📄 plpgsql.h
字号:
int lineno; List *diag_items; /* List of PLpgSQL_diag_item */} PLpgSQL_stmt_getdiag;typedef struct{ /* IF statement */ int cmd_type; int lineno; PLpgSQL_expr *cond; List *true_body; /* List of statements */ List *false_body; /* List of statements */} PLpgSQL_stmt_if;typedef struct{ /* Unconditional LOOP statement */ int cmd_type; int lineno; char *label; List *body; /* List of statements */} PLpgSQL_stmt_loop;typedef struct{ /* WHILE cond LOOP statement */ int cmd_type; int lineno; char *label; PLpgSQL_expr *cond; List *body; /* List of statements */} PLpgSQL_stmt_while;typedef struct{ /* FOR statement with integer loopvar */ int cmd_type; int lineno; char *label; PLpgSQL_var *var; PLpgSQL_expr *lower; PLpgSQL_expr *upper; int reverse; List *body; /* List of statements */} PLpgSQL_stmt_fori;typedef struct{ /* FOR statement running over SELECT */ int cmd_type; int lineno; char *label; PLpgSQL_rec *rec; PLpgSQL_row *row; PLpgSQL_expr *query; List *body; /* List of statements */} PLpgSQL_stmt_fors;typedef struct{ /* FOR statement running over EXECUTE */ int cmd_type; int lineno; char *label; PLpgSQL_rec *rec; PLpgSQL_row *row; PLpgSQL_expr *query; List *body; /* List of statements */} PLpgSQL_stmt_dynfors;typedef struct{ /* SELECT ... INTO statement */ int cmd_type; int lineno; PLpgSQL_rec *rec; PLpgSQL_row *row; PLpgSQL_expr *query;} PLpgSQL_stmt_select;typedef struct{ /* OPEN a curvar */ int cmd_type; int lineno; int curvar; PLpgSQL_row *returntype; PLpgSQL_expr *argquery; PLpgSQL_expr *query; PLpgSQL_expr *dynquery;} PLpgSQL_stmt_open;typedef struct{ /* FETCH curvar INTO statement */ int cmd_type; int lineno; PLpgSQL_rec *rec; PLpgSQL_row *row; int curvar;} PLpgSQL_stmt_fetch;typedef struct{ /* CLOSE curvar */ int cmd_type; int lineno; int curvar;} PLpgSQL_stmt_close;typedef struct{ /* EXIT or CONTINUE statement */ int cmd_type; int lineno; bool is_exit; /* Is this an exit or a continue? */ char *label; PLpgSQL_expr *cond;} PLpgSQL_stmt_exit;typedef struct{ /* RETURN statement */ int cmd_type; int lineno; PLpgSQL_expr *expr; int retvarno;} PLpgSQL_stmt_return;typedef struct{ /* RETURN NEXT statement */ int cmd_type; int lineno; PLpgSQL_expr *expr; int retvarno;} PLpgSQL_stmt_return_next;typedef struct{ /* RAISE statement */ int cmd_type; int lineno; int elog_level; char *message; List *params; /* list of expressions */} PLpgSQL_stmt_raise;typedef struct{ /* Generic SQL statement to execute */ int cmd_type; int lineno; PLpgSQL_expr *sqlstmt;} PLpgSQL_stmt_execsql;typedef struct{ /* Dynamic SQL string to execute */ int cmd_type; int lineno; PLpgSQL_rec *rec; /* INTO record or row variable */ PLpgSQL_row *row; PLpgSQL_expr *query;} PLpgSQL_stmt_dynexecute;typedef struct PLpgSQL_func_hashkey{ /* Hash lookup key for functions */ Oid funcOid; /* * For a trigger function, the OID of the relation triggered on is part of * the hashkey --- we want to compile the trigger separately for each * relation it is used with, in case the rowtype is different. Zero if * not called as a trigger. */ Oid trigrelOid; /* * We include actual argument types in the hash key to support polymorphic * PLpgSQL functions. Be careful that extra positions are zeroed! */ Oid argtypes[FUNC_MAX_ARGS];} PLpgSQL_func_hashkey;typedef struct PLpgSQL_function{ /* Complete compiled function */ char *fn_name; Oid fn_oid; TransactionId fn_xmin; CommandId fn_cmin; int fn_functype; PLpgSQL_func_hashkey *fn_hashkey; /* back-link to hashtable key */ MemoryContext fn_cxt; Oid fn_rettype; int fn_rettyplen; bool fn_retbyval; FmgrInfo fn_retinput; Oid fn_rettypioparam; bool fn_retistuple; bool fn_retset; bool fn_readonly; int fn_nargs; int fn_argvarnos[FUNC_MAX_ARGS]; int out_param_varno; int found_varno; int new_varno; int old_varno; int tg_name_varno; int tg_when_varno; int tg_level_varno; int tg_op_varno; int tg_relid_varno; int tg_relname_varno; int tg_nargs_varno; int ndatums; PLpgSQL_datum **datums; PLpgSQL_stmt_block *action;} PLpgSQL_function;typedef struct{ /* Runtime execution data */ Datum retval; bool retisnull; Oid rettype; /* type of current retval */ Oid fn_rettype; /* info about declared function rettype */ bool retistuple; bool retisset; bool readonly_func; TupleDesc rettupdesc; char *exitlabel; /* the "target" label of the current EXIT or * CONTINUE stmt, if any */ Tuplestorestate *tuple_store; /* SRFs accumulate results here */ MemoryContext tuple_store_cxt; ReturnSetInfo *rsi; int trig_nargs; Datum *trig_argv; int found_varno; int ndatums; PLpgSQL_datum **datums; /* temporary state for results from evaluation of query or expr */ SPITupleTable *eval_tuptable; uint32 eval_processed; Oid eval_lastoid; ExprContext *eval_econtext; /* status information for error context reporting */ PLpgSQL_function *err_func; /* current func */ PLpgSQL_stmt *err_stmt; /* current stmt */ const char *err_text; /* additional state info */} PLpgSQL_execstate;/********************************************************************** * Global variable declarations **********************************************************************/extern bool plpgsql_DumpExecTree;extern bool plpgsql_SpaceScanned;extern int plpgsql_nDatums;extern PLpgSQL_datum **plpgsql_Datums;extern int plpgsql_error_lineno;extern char *plpgsql_error_funcname;/* linkage to the real yytext variable */extern char *plpgsql_base_yytext;#define plpgsql_yytext plpgsql_base_yytextextern PLpgSQL_function *plpgsql_curr_compile;extern bool plpgsql_check_syntax;extern MemoryContext compile_tmp_cxt;/********************************************************************** * Function declarations **********************************************************************//* ---------- * Functions in pl_comp.c * ---------- */extern PLpgSQL_function *plpgsql_compile(FunctionCallInfo fcinfo, bool forValidator);extern int plpgsql_parse_word(char *word);extern int plpgsql_parse_dblword(char *word);extern int plpgsql_parse_tripword(char *word);extern int plpgsql_parse_wordtype(char *word);extern int plpgsql_parse_dblwordtype(char *word);extern int plpgsql_parse_tripwordtype(char *word);extern int plpgsql_parse_wordrowtype(char *word);extern int plpgsql_parse_dblwordrowtype(char *word);extern PLpgSQL_type *plpgsql_parse_datatype(const char *string);extern PLpgSQL_type *plpgsql_build_datatype(Oid typeOid, int32 typmod);extern PLpgSQL_variable *plpgsql_build_variable(const char *refname, int lineno, PLpgSQL_type *dtype, bool add2namespace);extern PLpgSQL_condition *plpgsql_parse_err_condition(char *condname);extern void plpgsql_adddatum(PLpgSQL_datum *new);extern int plpgsql_add_initdatums(int **varnos);extern void plpgsql_HashTableInit(void);extern void plpgsql_compile_error_callback(void *arg);/* ---------- * Functions in pl_handler.c * ---------- */extern void plpgsql_init(void);extern Datum plpgsql_call_handler(PG_FUNCTION_ARGS);extern Datum plpgsql_validator(PG_FUNCTION_ARGS);/* ---------- * Functions in pl_exec.c * ---------- */extern Datum plpgsql_exec_function(PLpgSQL_function *func, FunctionCallInfo fcinfo);extern HeapTuple plpgsql_exec_trigger(PLpgSQL_function *func, TriggerData *trigdata);extern void plpgsql_xact_cb(XactEvent event, void *arg);/* ---------- * Functions for the dynamic string handling in pl_funcs.c * ---------- */extern void plpgsql_dstring_init(PLpgSQL_dstring *ds);extern void plpgsql_dstring_free(PLpgSQL_dstring *ds);extern void plpgsql_dstring_append(PLpgSQL_dstring *ds, const char *str);extern void plpgsql_dstring_append_char(PLpgSQL_dstring *ds, char c);extern char *plpgsql_dstring_get(PLpgSQL_dstring *ds);/* ---------- * Functions for the namestack handling in pl_funcs.c * ---------- */extern void plpgsql_ns_init(void);extern bool plpgsql_ns_setlocal(bool flag);extern void plpgsql_ns_push(char *label);extern void plpgsql_ns_pop(void);extern void plpgsql_ns_additem(int itemtype, int itemno, const char *name);extern PLpgSQL_nsitem *plpgsql_ns_lookup(char *name, char *nsname);extern void plpgsql_ns_rename(char *oldname, char *newname);/* ---------- * Other functions in pl_funcs.c * ---------- */extern void plpgsql_convert_ident(const char *s, char **output, int numidents);extern const char *plpgsql_stmt_typename(PLpgSQL_stmt *stmt);extern void plpgsql_dumptree(PLpgSQL_function *func);/* ---------- * Externs in gram.y and scan.l * ---------- */extern PLpgSQL_expr *plpgsql_read_expression(int until, const char *expected);extern int plpgsql_yyparse(void);extern int plpgsql_base_yylex(void);extern int plpgsql_yylex(void);extern void plpgsql_push_back_token(int token);extern void plpgsql_yyerror(const char *message);extern int plpgsql_scanner_lineno(void);extern void plpgsql_scanner_init(const char *str, int functype);extern void plpgsql_scanner_finish(void);extern char *plpgsql_get_string_value(void);#endif /* PLPGSQL_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -