Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
spi.h214 linesDownload Raw Back to executor
1/*-------------------------------------------------------------------------2 *3 * spi.h4 *				Server Programming Interface public declarations5 *6 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group7 * Portions Copyright (c) 1994, Regents of the University of California8 *9 * src/include/executor/spi.h10 *11 *-------------------------------------------------------------------------12 */13#ifndef SPI_H14#define SPI_H15 16#include "commands/trigger.h"17#include "lib/ilist.h"18#include "parser/parser.h"19#include "utils/portal.h"20 21 22typedef struct SPITupleTable23{24	/* Public members */25	TupleDesc	tupdesc;		/* tuple descriptor */26	HeapTuple  *vals;			/* array of tuples */27	uint64		numvals;		/* number of valid tuples */28 29	/* Private members, not intended for external callers */30	uint64		alloced;		/* allocated length of vals array */31	MemoryContext tuptabcxt;	/* memory context of result table */32	slist_node	next;			/* link for internal bookkeeping */33	SubTransactionId subid;		/* subxact in which tuptable was created */34} SPITupleTable;35 36/* Optional arguments for SPI_prepare_extended */37typedef struct SPIPrepareOptions38{39	ParserSetupHook parserSetup;40	void	   *parserSetupArg;41	RawParseMode parseMode;42	int			cursorOptions;43} SPIPrepareOptions;44 45/* Optional arguments for SPI_execute[_plan]_extended */46typedef struct SPIExecuteOptions47{48	ParamListInfo params;49	bool		read_only;50	bool		allow_nonatomic;51	bool		must_return_tuples;52	uint64		tcount;53	DestReceiver *dest;54	ResourceOwner owner;55} SPIExecuteOptions;56 57/* Optional arguments for SPI_cursor_parse_open */58typedef struct SPIParseOpenOptions59{60	ParamListInfo params;61	int			cursorOptions;62	bool		read_only;63} SPIParseOpenOptions;64 65/* Plans are opaque structs for standard users of SPI */66typedef struct _SPI_plan *SPIPlanPtr;67 68#define SPI_ERROR_CONNECT		(-1)69#define SPI_ERROR_COPY			(-2)70#define SPI_ERROR_OPUNKNOWN		(-3)71#define SPI_ERROR_UNCONNECTED	(-4)72#define SPI_ERROR_CURSOR		(-5)	/* not used anymore */73#define SPI_ERROR_ARGUMENT		(-6)74#define SPI_ERROR_PARAM			(-7)75#define SPI_ERROR_TRANSACTION	(-8)76#define SPI_ERROR_NOATTRIBUTE	(-9)77#define SPI_ERROR_NOOUTFUNC		(-10)78#define SPI_ERROR_TYPUNKNOWN	(-11)79#define SPI_ERROR_REL_DUPLICATE (-12)80#define SPI_ERROR_REL_NOT_FOUND (-13)81 82#define SPI_OK_CONNECT			183#define SPI_OK_FINISH			284#define SPI_OK_FETCH			385#define SPI_OK_UTILITY			486#define SPI_OK_SELECT			587#define SPI_OK_SELINTO			688#define SPI_OK_INSERT			789#define SPI_OK_DELETE			890#define SPI_OK_UPDATE			991#define SPI_OK_CURSOR			1092#define SPI_OK_INSERT_RETURNING 1193#define SPI_OK_DELETE_RETURNING 1294#define SPI_OK_UPDATE_RETURNING 1395#define SPI_OK_REWRITTEN		1496#define SPI_OK_REL_REGISTER		1597#define SPI_OK_REL_UNREGISTER	1698#define SPI_OK_TD_REGISTER		1799#define SPI_OK_MERGE			18100 101#define SPI_OPT_NONATOMIC		(1 << 0)102 103/* These used to be functions, now just no-ops for backwards compatibility */104#define SPI_push()	((void) 0)105#define SPI_pop()	((void) 0)106#define SPI_push_conditional()	false107#define SPI_pop_conditional(pushed) ((void) 0)108#define SPI_restore_connection()	((void) 0)109 110extern PGDLLIMPORT uint64 SPI_processed;111extern PGDLLIMPORT SPITupleTable *SPI_tuptable;112extern PGDLLIMPORT int SPI_result;113 114extern int	SPI_connect(void);115extern int	SPI_connect_ext(int options);116extern int	SPI_finish(void);117extern int	SPI_execute(const char *src, bool read_only, long tcount);118extern int	SPI_execute_extended(const char *src,119								 const SPIExecuteOptions *options);120extern int	SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,121							 bool read_only, long tcount);122extern int	SPI_execute_plan_extended(SPIPlanPtr plan,123									  const SPIExecuteOptions *options);124extern int	SPI_execute_plan_with_paramlist(SPIPlanPtr plan,125											ParamListInfo params,126											bool read_only, long tcount);127extern int	SPI_exec(const char *src, long tcount);128extern int	SPI_execp(SPIPlanPtr plan, Datum *Values, const char *Nulls,129					  long tcount);130extern int	SPI_execute_snapshot(SPIPlanPtr plan,131								 Datum *Values, const char *Nulls,132								 Snapshot snapshot,133								 Snapshot crosscheck_snapshot,134								 bool read_only, bool fire_triggers, long tcount);135extern int	SPI_execute_with_args(const char *src,136								  int nargs, Oid *argtypes,137								  Datum *Values, const char *Nulls,138								  bool read_only, long tcount);139extern SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes);140extern SPIPlanPtr SPI_prepare_cursor(const char *src, int nargs, Oid *argtypes,141									 int cursorOptions);142extern SPIPlanPtr SPI_prepare_extended(const char *src,143									   const SPIPrepareOptions *options);144extern SPIPlanPtr SPI_prepare_params(const char *src,145									 ParserSetupHook parserSetup,146									 void *parserSetupArg,147									 int cursorOptions);148extern int	SPI_keepplan(SPIPlanPtr plan);149extern SPIPlanPtr SPI_saveplan(SPIPlanPtr plan);150extern int	SPI_freeplan(SPIPlanPtr plan);151 152extern Oid	SPI_getargtypeid(SPIPlanPtr plan, int argIndex);153extern int	SPI_getargcount(SPIPlanPtr plan);154extern bool SPI_is_cursor_plan(SPIPlanPtr plan);155extern bool SPI_plan_is_valid(SPIPlanPtr plan);156extern const char *SPI_result_code_string(int code);157 158extern List *SPI_plan_get_plan_sources(SPIPlanPtr plan);159extern CachedPlan *SPI_plan_get_cached_plan(SPIPlanPtr plan);160 161extern HeapTuple SPI_copytuple(HeapTuple tuple);162extern HeapTupleHeader SPI_returntuple(HeapTuple tuple, TupleDesc tupdesc);163extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts,164								 int *attnum, Datum *Values, const char *Nulls);165extern int	SPI_fnumber(TupleDesc tupdesc, const char *fname);166extern char *SPI_fname(TupleDesc tupdesc, int fnumber);167extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);168extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);169extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);170extern Oid	SPI_gettypeid(TupleDesc tupdesc, int fnumber);171extern char *SPI_getrelname(Relation rel);172extern char *SPI_getnspname(Relation rel);173extern void *SPI_palloc(Size size);174extern void *SPI_repalloc(void *pointer, Size size);175extern void SPI_pfree(void *pointer);176extern Datum SPI_datumTransfer(Datum value, bool typByVal, int typLen);177extern void SPI_freetuple(HeapTuple tuple);178extern void SPI_freetuptable(SPITupleTable *tuptable);179 180extern Portal SPI_cursor_open(const char *name, SPIPlanPtr plan,181							  Datum *Values, const char *Nulls, bool read_only);182extern Portal SPI_cursor_open_with_args(const char *name,183										const char *src,184										int nargs, Oid *argtypes,185										Datum *Values, const char *Nulls,186										bool read_only, int cursorOptions);187extern Portal SPI_cursor_open_with_paramlist(const char *name, SPIPlanPtr plan,188											 ParamListInfo params, bool read_only);189extern Portal SPI_cursor_parse_open(const char *name,190									const char *src,191									const SPIParseOpenOptions *options);192extern Portal SPI_cursor_find(const char *name);193extern void SPI_cursor_fetch(Portal portal, bool forward, long count);194extern void SPI_cursor_move(Portal portal, bool forward, long count);195extern void SPI_scroll_cursor_fetch(Portal, FetchDirection direction, long count);196extern void SPI_scroll_cursor_move(Portal, FetchDirection direction, long count);197extern void SPI_cursor_close(Portal portal);198 199extern int	SPI_register_relation(EphemeralNamedRelation enr);200extern int	SPI_unregister_relation(const char *name);201extern int	SPI_register_trigger_data(TriggerData *tdata);202 203extern void SPI_start_transaction(void);204extern void SPI_commit(void);205extern void SPI_commit_and_chain(void);206extern void SPI_rollback(void);207extern void SPI_rollback_and_chain(void);208 209extern void AtEOXact_SPI(bool isCommit);210extern void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid);211extern bool SPI_inside_nonatomic_context(void);212 213#endif							/* SPI_H */214 
codekingpro/portable-devtools · Team Ai