mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
DECLARE STATEMENT is a statement that lets users declare an identifier pointing at a connection. This identifier will be used in other embedded dynamic SQL statement such as PREPARE, EXECUTE, DECLARE CURSOR and so on. When connecting to a non-default connection, the AT clause can be used in a DECLARE STATEMENT once and is no longer needed in every dynamic SQL statement. This makes ECPG applications easier and more efficient. Moreover, writing code without designating connection explicitly improves portability. Authors: Ideriha-san ("Ideriha, Takeshi" <ideriha.takeshi@jp.fujitsu.com>) Kuroda-san ("Kuroda, Hayato" <kuroda.hayato@jp.fujitsu.com>) Discussion: https://postgr.es/m4E72940DA2BF16479384A86D54D0988A565669DF@G01JPEXMBKW04
133 lines
4.2 KiB
C
133 lines
4.2 KiB
C
/* src/interfaces/ecpg/preproc/preproc_extern.h */
|
|
|
|
#ifndef _ECPG_PREPROC_EXTERN_H
|
|
#define _ECPG_PREPROC_EXTERN_H
|
|
|
|
#include "type.h"
|
|
|
|
#include "common/keywords.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_index;
|
|
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_name_st *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 *, int, enum ECPG_statement_type);
|
|
extern void output_prepare_statement(char *, char *);
|
|
extern void output_deallocate_prepare_statement(char *);
|
|
extern void output_simple_statement(char *, int);
|
|
extern void output_declare_statement(char *);
|
|
extern void output_cursor_statement(int , char *, char *, char *, int , enum ECPG_statement_type);
|
|
extern char *hashline_number(void);
|
|
extern int base_yyparse(void);
|
|
extern int base_yylex(void);
|
|
extern void base_yyerror(const char *);
|
|
extern void *mm_alloc(size_t);
|
|
extern char *mm_strdup(const char *);
|
|
extern void mmerror(int errorcode, enum errortype type, const char *error,...) pg_attribute_printf(3, 4);
|
|
extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
|
|
extern void output_get_descr_header(char *);
|
|
extern void output_get_descr(char *, char *);
|
|
extern void output_set_descr_header(char *);
|
|
extern void output_set_descr(char *, char *);
|
|
extern void push_assignment(char *, enum ECPGdtype);
|
|
extern struct variable *find_variable(char *);
|
|
extern void whenever_action(int);
|
|
extern void add_descriptor(char *, char *);
|
|
extern void drop_descriptor(char *, char *);
|
|
extern struct descriptor *lookup_descriptor(char *, char *);
|
|
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 **, struct variable *, struct variable *);
|
|
extern void add_variable_to_tail(struct arguments **, struct variable *, struct variable *);
|
|
extern void remove_variable_from_list(struct arguments **list, struct variable *var);
|
|
extern void dump_variables(struct arguments *, int);
|
|
extern struct typedefs *get_typedef(char *);
|
|
extern void adjust_array(enum ECPGttype, char **, char **, char *, char *, int, bool);
|
|
extern void reset_variables(void);
|
|
extern void check_indicator(struct ECPGtype *);
|
|
extern void remove_typedefs(int);
|
|
extern void remove_variables(int);
|
|
extern struct variable *new_variable(const char *, struct ECPGtype *, int);
|
|
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 */
|