⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plpgsql.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/********************************************************************** * plpgsql.h		- Definitions for the PL/pgSQL *			  procedural language * * IDENTIFICATION *	  $Header: /usr/local/cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.3 1999/01/27 16:15:22 wieck Exp $ * *	  This software is copyrighted by Jan Wieck - Hamburg. * *	  The author hereby grants permission  to  use,  copy,	modify, *	  distribute,  and	license this software and its documentation *	  for any purpose, provided that existing copyright notices are *	  retained	in	all  copies  and  that	this notice is included *	  verbatim in any distributions. No written agreement, license, *	  or  royalty  fee	is required for any of the authorized uses. *	  Modifications to this software may be  copyrighted  by  their *	  author  and  need  not  follow  the licensing terms described *	  here, provided that the new terms are  clearly  indicated  on *	  the first page of each file where they apply. * *	  IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY *	  PARTY  FOR  DIRECT,	INDIRECT,	SPECIAL,   INCIDENTAL,	 OR *	  CONSEQUENTIAL   DAMAGES  ARISING	OUT  OF  THE  USE  OF  THIS *	  SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN *	  IF  THE  AUTHOR  HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH *	  DAMAGE. * *	  THE  AUTHOR  AND	DISTRIBUTORS  SPECIFICALLY	 DISCLAIM	ANY *	  WARRANTIES,  INCLUDING,  BUT	NOT  LIMITED  TO,  THE	IMPLIED *	  WARRANTIES  OF  MERCHANTABILITY,	FITNESS  FOR  A  PARTICULAR *	  PURPOSE,	AND NON-INFRINGEMENT.  THIS SOFTWARE IS PROVIDED ON *	  AN "AS IS" BASIS, AND THE AUTHOR	AND  DISTRIBUTORS  HAVE  NO *	  OBLIGATION   TO	PROVIDE   MAINTENANCE,	 SUPPORT,  UPDATES, *	  ENHANCEMENTS, OR MODIFICATIONS. * **********************************************************************/#ifndef PLPGSQL_H#define PLPGSQL_H#include <stdio.h>#include <stdarg.h>#include "postgres.h"#include "executor/spi.h"#include "commands/trigger.h"#include "fmgr.h"/********************************************************************** * Definitions **********************************************************************//* ---------- * Compilers namestack item types * ---------- */enum{	PLPGSQL_NSTYPE_LABEL,	PLPGSQL_NSTYPE_VAR,	PLPGSQL_NSTYPE_ROW,	PLPGSQL_NSTYPE_REC,	PLPGSQL_NSTYPE_RECFIELD};/* ---------- * Datum array node types * ---------- */enum{	PLPGSQL_DTYPE_VAR,	PLPGSQL_DTYPE_ROW,	PLPGSQL_DTYPE_REC,	PLPGSQL_DTYPE_RECFIELD,	PLPGSQL_DTYPE_EXPR,	PLPGSQL_DTYPE_TRIGARG};/* ---------- * Execution tree node types * ---------- */enum{	PLPGSQL_STMT_BLOCK,	PLPGSQL_STMT_ASSIGN,	PLPGSQL_STMT_IF,	PLPGSQL_STMT_LOOP,	PLPGSQL_STMT_WHILE,	PLPGSQL_STMT_FORI,	PLPGSQL_STMT_FORS,	PLPGSQL_STMT_SELECT,	PLPGSQL_STMT_EXIT,	PLPGSQL_STMT_RETURN,	PLPGSQL_STMT_RAISE,	PLPGSQL_STMT_EXECSQL};/* ---------- * Execution node return codes * ---------- */enum{	PLPGSQL_RC_OK,	PLPGSQL_RC_EXIT,	PLPGSQL_RC_RETURN};/********************************************************************** * Node and structure definitions **********************************************************************/typedef struct{								/* Dynamic string control structure */	int			alloc;	int			used;	char	   *value;}			PLpgSQL_dstring;typedef struct{								/* Postgres base data type		*/	char	   *typname;	Oid			typoid;	FmgrInfo	typinput;	bool		typbyval;	int16		atttypmod;}			PLpgSQL_type;typedef struct{								/* Generic datum array item		*/	int			dtype;	int			dno;}			PLpgSQL_datum;typedef struct{								/* SQL Query to plan and execute	*/	int			dtype;	int			exprno;	char	   *query;	void	   *plan;	Node	   *plan_simple_expr;	Oid			plan_simple_type;	Oid		   *plan_argtypes;	int			nparams;	int			params[1];}			PLpgSQL_expr;typedef struct{								/* Local variable			*/	int			dtype;	int			varno;	char	   *refname;	int			lineno;	PLpgSQL_type *datatype;	int			isconst;	int			notnull;	PLpgSQL_expr *default_val;	Datum		value;	bool		isnull;	int			shouldfree;}			PLpgSQL_var;typedef struct{								/* Rowtype				*/	int			dtype;	int			rowno;	char	   *refname;	int			lineno;	Oid			rowtypeclass;	int			nfields;	char	  **fieldnames;	int		   *varnos;}			PLpgSQL_row;typedef struct{								/* Record of undefined structure	*/	int			dtype;	int			recno;	char	   *refname;	int			lineno;	HeapTuple	tup;	TupleDesc	tupdesc;}			PLpgSQL_rec;typedef struct{								/* Field in record			*/	int			dtype;	int			rfno;	char	   *fieldname;	int			recno;}			PLpgSQL_recfield;typedef struct{								/* Positional argument to trigger	*/	int			dtype;	int			dno;	PLpgSQL_expr *argnum;}			PLpgSQL_trigarg;typedef struct{								/* Item in the compilers namestack	*/	int			itemtype;	int			itemno;	char		name[1];}			PLpgSQL_nsitem;typedef struct PLpgSQL_ns{								/* Compiler namestack level		*/	int			items_alloc;	int			items_used;	PLpgSQL_nsitem **items;	struct PLpgSQL_ns *upper;}			PLpgSQL_ns;typedef struct{								/* List of execution nodes		*/	int			stmts_alloc;	int			stmts_used;	struct PLpgSQL_stmt **stmts;}			PLpgSQL_stmts;typedef struct{								/* Generic execution node		*/	int			cmd_type;	int			lineno;}			PLpgSQL_stmt;typedef struct{								/* Block of statements			*/	int			cmd_type;	int			lineno;	char	   *label;	PLpgSQL_stmts *body;	int			n_initvars;	int		   *initvarnos;}			PLpgSQL_stmt_block;typedef struct{								/* Assign statement			*/	int			cmd_type;	int			lineno;	int			varno;	PLpgSQL_expr *expr;}			PLpgSQL_stmt_assign;typedef struct{								/* IF statement				*/	int			cmd_type;	int			lineno;	PLpgSQL_expr *cond;	PLpgSQL_stmts *true_body;	PLpgSQL_stmts *false_body;}			PLpgSQL_stmt_if;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{								/* SELECT ... INTO statement		*/	int			cmd_type;	int			lineno;	PLpgSQL_rec *rec;	PLpgSQL_row *row;	PLpgSQL_expr *query;}			PLpgSQL_stmt_select;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;	bool		retistuple;	PLpgSQL_expr *expr;	int			retrecno;}			PLpgSQL_stmt_return;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 PLpgSQL_function{								/* Complete compiled function	  */	Oid			fn_oid;	char	   *fn_name;	int			fn_functype;	Oid			fn_rettype;	int			fn_rettyplen;	bool		fn_retbyval;	FmgrInfo	fn_retinput;	bool		fn_retistuple;	bool		fn_retset;	int			fn_nargs;	int			fn_argvarnos[MAXFMGRARGS];	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;	struct PLpgSQL_function *next;}			PLpgSQL_function;typedef struct{								/* Runtime execution data	*/	Datum		retval;	bool		retisnull;	Oid			rettype;	bool		retistuple;	TupleDesc	rettupdesc;	bool		retisset;	char	   *exitlabel;	int			trig_nargs;	Datum	   *trig_argv;	int			found_varno;	int			ndatums;	PLpgSQL_datum **datums;}			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;extern PLpgSQL_function *plpgsql_curr_compile;/********************************************************************** * Function declarations **********************************************************************/extern char *pstrdup(char *s);/* ---------- * Functions in pl_comp.c * ---------- */extern PLpgSQL_function *plpgsql_compile(Oid fn_oid, int functype);extern int	plpgsql_parse_word(char *word);extern int	plpgsql_parse_dblword(char *string);extern int	plpgsql_parse_tripword(char *string);extern int	plpgsql_parse_wordtype(char *string);extern int	plpgsql_parse_dblwordtype(char *string);extern int	plpgsql_parse_wordrowtype(char *string);extern void plpgsql_adddatum(PLpgSQL_datum * new);extern int	plpgsql_add_initdatums(int **varnos);extern void plpgsql_comperrinfo(void);/* ---------- * Functions in pl_exec.c * ---------- */extern Datum plpgsql_exec_function(PLpgSQL_function * func,					  FmgrValues *args, bool *isNull);extern HeapTuple plpgsql_exec_trigger(PLpgSQL_function * func,					 TriggerData *trigdata);/* ---------- * 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_dumptree(PLpgSQL_function * func);extern char *plpgsql_tolower(char *s);/* ---------- * Externs in gram.y and scan.l * ---------- */extern PLpgSQL_expr *plpgsql_read_expression(int until, char *s);extern void plpgsql_yyrestart(FILE *fp);extern int	plpgsql_yylex();extern void plpgsql_setinput(char *s, int functype);extern int	plpgsql_yyparse();#endif	 /* PLPGSQL_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -