summaryrefslogtreecommitdiffstats
path: root/src/interfaces/ecpg/preproc/preproc_extern.h
blob: c5fd07fbd8b52e15fc76b5d4611233971dd0d359 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* src/interfaces/ecpg/preproc/preproc_extern.h */

#ifndef _ECPG_PREPROC_EXTERN_H
#define _ECPG_PREPROC_EXTERN_H

#include "common/keywords.h"
#include "type.h"

#ifndef CHAR_BIT
#include <limits.h>
#endif

/* defines */

#define STRUCT_DEPTH 128
#define EMPTY mm_strdup("")

/* variables */

extern bool autocommit,
			auto_create_c,
			system_includes,
			force_indicator,
			questionmarks,
			regression_mode,
			auto_prepare;
extern int	braces_open,
			ret_value,
			struct_level,
			ecpg_internal_var;
extern char *current_function;
extern char *descriptor_name;
extern char *connection;
extern char *input_filename;
extern char *base_yytext,
		   *token_start;

#ifdef YYDEBUG
extern int	base_yydebug;
#endif
extern int	base_yylineno;
extern FILE *base_yyin,
		   *base_yyout;
extern char *output_filename;

extern struct _include_path *include_paths;
extern struct cursor *cur;
extern struct typedefs *types;
extern struct _defines *defines;
extern struct declared_list *g_declared_list;
extern struct ECPGtype ecpg_no_indicator;
extern struct variable no_indicator;
extern struct arguments *argsinsert;
extern struct arguments *argsresult;
extern struct when when_error,
			when_nf,
			when_warn;
extern struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH];

/* Globals from keywords.c */
extern const uint16 SQLScanKeywordTokens[];

/* functions */

extern const char *get_dtype(enum ECPGdtype);
extern void lex_init(void);
extern void output_line_number(void);
extern void output_statement(char *stmt, int whenever_mode, enum ECPG_statement_type st);
extern void output_prepare_statement(char *name, char *stmt);
extern void output_deallocate_prepare_statement(char *name);
extern void output_simple_statement(char *stmt, int whenever_mode);
extern char *hashline_number(void);
extern int	base_yyparse(void);
extern int	base_yylex(void);
extern void base_yyerror(const char *error);
extern void *mm_alloc(size_t size);
extern char *mm_strdup(const char *string);
extern void mmerror(int error_code, enum errortype type, const char *error,...) pg_attribute_printf(3, 4);
extern void mmfatal(int error_code, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
extern void output_get_descr_header(char *desc_name);
extern void output_get_descr(char *desc_name, char *index);
extern void output_set_descr_header(char *desc_name);
extern void output_set_descr(char *desc_name, char *index);
extern void push_assignment(char *var, enum ECPGdtype value);
extern struct variable *find_variable(char *name);
extern void whenever_action(int mode);
extern void add_descriptor(char *name, char *connection);
extern void drop_descriptor(char *name, char *connection);
extern struct descriptor *lookup_descriptor(char *name, char *connection);
extern struct variable *descriptor_variable(const char *name, int input);
extern struct variable *sqlda_variable(const char *name);
extern void add_variable_to_head(struct arguments **list,
								 struct variable *var,
								 struct variable *ind);
extern void add_variable_to_tail(struct arguments **list,
								 struct variable *var,
								 struct variable *ind);
extern void remove_variable_from_list(struct arguments **list, struct variable *var);
extern void dump_variables(struct arguments *list, int mode);
extern struct typedefs *get_typedef(const char *name, bool noerror);
extern void adjust_array(enum ECPGttype type_enum, char **dimension,
						 char **length, char *type_dimension,
						 char *type_index, int pointer_len,
						 bool type_definition);
extern void reset_variables(void);
extern void check_indicator(struct ECPGtype *var);
extern void remove_typedefs(int brace_level);
extern void remove_variables(int brace_level);
extern struct variable *new_variable(const char *name,
									 struct ECPGtype *type,
									 int brace_level);
extern int	ScanCKeywordLookup(const char *text);
extern int	ScanECPGKeywordLookup(const char *text);
extern void parser_init(void);
extern int	filtered_base_yylex(void);

/* return codes */

#define ILLEGAL_OPTION		1
#define NO_INCLUDE_FILE		2
#define PARSE_ERROR			3
#define INDICATOR_NOT_ARRAY 4
#define OUT_OF_MEMORY		5
#define INDICATOR_NOT_STRUCT	6
#define INDICATOR_NOT_SIMPLE	7

enum COMPAT_MODE
{
	ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE, ECPG_COMPAT_ORACLE
};
extern enum COMPAT_MODE compat;

#define INFORMIX_MODE	(compat == ECPG_COMPAT_INFORMIX || compat == ECPG_COMPAT_INFORMIX_SE)
#define ORACLE_MODE (compat == ECPG_COMPAT_ORACLE)


#endif							/* _ECPG_PREPROC_EXTERN_H */