📄 plpgsql.h
字号:
typedef struct{ /* Unconditional LOOP statement */ int cmd_type; int lineno; char *label; PLpgSQL_stmts *body;} PLpgSQL_stmt_loop;typedef struct{ /* WHILE cond LOOP statement */ int cmd_type; int lineno; char *label; PLpgSQL_expr *cond; PLpgSQL_stmts *body;} 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; PLpgSQL_stmts *body;} 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; PLpgSQL_stmts *body;} 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; PLpgSQL_stmts *body;} 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 statement */ int cmd_type; int lineno; char *label; PLpgSQL_expr *cond;} PLpgSQL_stmt_exit;typedef struct{ /* RETURN statement */ int cmd_type; int lineno; PLpgSQL_expr *expr; int retrecno; int retrowno;} PLpgSQL_stmt_return;typedef struct{ /* RETURN NEXT statement */ int cmd_type; int lineno; PLpgSQL_rec *rec; PLpgSQL_row *row; PLpgSQL_expr *expr;} PLpgSQL_stmt_return_next;typedef struct{ /* RAISE statement */ int cmd_type; int lineno; int elog_level; char *message; int nparams; int *params;} 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_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 */ Oid fn_rettype; int fn_rettyplen; bool fn_retbyval; FmgrInfo fn_retinput; Oid fn_rettypelem; bool fn_retistuple; bool fn_retset; int fn_nargs; int fn_argvarnos[FUNC_MAX_ARGS]; 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; TupleDesc rettupdesc; char *exitlabel; 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 int plpgsql_DumpExecTree;extern int 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;/********************************************************************** * Function declarations **********************************************************************//* ---------- * Functions in pl_comp.c * ---------- */extern PLpgSQL_function *plpgsql_compile(FunctionCallInfo fcinfo);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(char *string);extern PLpgSQL_row *plpgsql_build_rowtype(Oid classOid);extern void plpgsql_adddatum(PLpgSQL_datum * new);extern int plpgsql_add_initdatums(int **varnos);extern void plpgsql_yyerror(const char *s);extern void plpgsql_HashTableInit(void);/* ---------- * Functions in pl_handler.c * ---------- */extern void plpgsql_init(void);extern Datum plpgsql_call_handler(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_eoxact(bool isCommit, 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, char *str);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, 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 int plpgsql_scanner_lineno(void);extern void plpgsql_scanner_init(const char *str, int functype);extern void plpgsql_scanner_finish(void);#endif /* PLPGSQL_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -