mirror of
https://github.com/simtactics/niotso.git
synced 2025-07-04 13:47:05 -04:00
work in progress, cleaned up the directories and split them up into folder which make more sense, Still need to compile libvitaboy and all the tools
This commit is contained in:
parent
66ce473514
commit
948bd8474c
1786 changed files with 571812 additions and 15332 deletions
149
deps/libpq/include/executor/execdebug.h
vendored
Normal file
149
deps/libpq/include/executor/execdebug.h
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* execdebug.h
|
||||
* #defines governing debugging behaviour in the executor
|
||||
*
|
||||
* XXX this is all pretty old and crufty. Newer code tends to use elog()
|
||||
* for debug printouts, because that's more flexible than printf().
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/execdebug.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef EXECDEBUG_H
|
||||
#define EXECDEBUG_H
|
||||
|
||||
#include "executor/executor.h"
|
||||
#include "nodes/print.h"
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* debugging defines.
|
||||
*
|
||||
* If you want certain debugging behaviour, then #define
|
||||
* the variable to 1. No need to explicitly #undef by default,
|
||||
* since we can use -D compiler options to enable features.
|
||||
* - thomas 1999-02-20
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ----------------
|
||||
* EXEC_NESTLOOPDEBUG is a flag which turns on debugging of the
|
||||
* nest loop node by NL_printf() and ENL_printf() in nodeNestloop.c
|
||||
* ----------------
|
||||
#undef EXEC_NESTLOOPDEBUG
|
||||
*/
|
||||
|
||||
/* ----------------
|
||||
* EXEC_EVALDEBUG is a flag which turns on debugging of
|
||||
* ExecEval and ExecTargetList() stuff by EV_printf() in execQual.c
|
||||
* ----------------
|
||||
#undef EXEC_EVALDEBUG
|
||||
*/
|
||||
|
||||
/* ----------------
|
||||
* EXEC_SORTDEBUG is a flag which turns on debugging of
|
||||
* the ExecSort() stuff by SO_printf() in nodeSort.c
|
||||
* ----------------
|
||||
#undef EXEC_SORTDEBUG
|
||||
*/
|
||||
|
||||
/* ----------------
|
||||
* EXEC_MERGEJOINDEBUG is a flag which turns on debugging of
|
||||
* the ExecMergeJoin() stuff by MJ_printf() in nodeMergejoin.c
|
||||
* ----------------
|
||||
#undef EXEC_MERGEJOINDEBUG
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* #defines controlled by above definitions
|
||||
*
|
||||
* Note: most of these are "incomplete" because I didn't
|
||||
* need the ones not defined. More should be added
|
||||
* only as necessary -cim 10/26/89
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
#define T_OR_F(b) ((b) ? "true" : "false")
|
||||
#define NULL_OR_TUPLE(slot) (TupIsNull(slot) ? "null" : "a tuple")
|
||||
|
||||
/* ----------------
|
||||
* nest loop debugging defines
|
||||
* ----------------
|
||||
*/
|
||||
#ifdef EXEC_NESTLOOPDEBUG
|
||||
#define NL_nodeDisplay(l) nodeDisplay(l)
|
||||
#define NL_printf(s) printf(s)
|
||||
#define NL1_printf(s, a) printf(s, a)
|
||||
#define ENL1_printf(message) printf("ExecNestLoop: %s\n", message)
|
||||
#else
|
||||
#define NL_nodeDisplay(l)
|
||||
#define NL_printf(s)
|
||||
#define NL1_printf(s, a)
|
||||
#define ENL1_printf(message)
|
||||
#endif /* EXEC_NESTLOOPDEBUG */
|
||||
|
||||
/* ----------------
|
||||
* exec eval / target list debugging defines
|
||||
* ----------------
|
||||
*/
|
||||
#ifdef EXEC_EVALDEBUG
|
||||
#define EV_nodeDisplay(l) nodeDisplay(l)
|
||||
#define EV_printf(s) printf(s)
|
||||
#define EV1_printf(s, a) printf(s, a)
|
||||
#else
|
||||
#define EV_nodeDisplay(l)
|
||||
#define EV_printf(s)
|
||||
#define EV1_printf(s, a)
|
||||
#endif /* EXEC_EVALDEBUG */
|
||||
|
||||
/* ----------------
|
||||
* sort node debugging defines
|
||||
* ----------------
|
||||
*/
|
||||
#ifdef EXEC_SORTDEBUG
|
||||
#define SO_nodeDisplay(l) nodeDisplay(l)
|
||||
#define SO_printf(s) printf(s)
|
||||
#define SO1_printf(s, p) printf(s, p)
|
||||
#else
|
||||
#define SO_nodeDisplay(l)
|
||||
#define SO_printf(s)
|
||||
#define SO1_printf(s, p)
|
||||
#endif /* EXEC_SORTDEBUG */
|
||||
|
||||
/* ----------------
|
||||
* merge join debugging defines
|
||||
* ----------------
|
||||
*/
|
||||
#ifdef EXEC_MERGEJOINDEBUG
|
||||
|
||||
#define MJ_nodeDisplay(l) nodeDisplay(l)
|
||||
#define MJ_printf(s) printf(s)
|
||||
#define MJ1_printf(s, p) printf(s, p)
|
||||
#define MJ2_printf(s, p1, p2) printf(s, p1, p2)
|
||||
#define MJ_debugtup(slot) debugtup(slot, NULL)
|
||||
#define MJ_dump(state) ExecMergeTupleDump(state)
|
||||
#define MJ_DEBUG_COMPARE(res) \
|
||||
MJ1_printf(" MJCompare() returns %d\n", (res))
|
||||
#define MJ_DEBUG_QUAL(clause, res) \
|
||||
MJ2_printf(" ExecQual(%s, econtext) returns %s\n", \
|
||||
CppAsString(clause), T_OR_F(res))
|
||||
#define MJ_DEBUG_PROC_NODE(slot) \
|
||||
MJ2_printf(" %s = ExecProcNode(...) returns %s\n", \
|
||||
CppAsString(slot), NULL_OR_TUPLE(slot))
|
||||
#else
|
||||
|
||||
#define MJ_nodeDisplay(l)
|
||||
#define MJ_printf(s)
|
||||
#define MJ1_printf(s, p)
|
||||
#define MJ2_printf(s, p1, p2)
|
||||
#define MJ_debugtup(slot)
|
||||
#define MJ_dump(state)
|
||||
#define MJ_DEBUG_COMPARE(res)
|
||||
#define MJ_DEBUG_QUAL(clause, res)
|
||||
#define MJ_DEBUG_PROC_NODE(slot)
|
||||
#endif /* EXEC_MERGEJOINDEBUG */
|
||||
|
||||
#endif /* ExecDebugIncluded */
|
73
deps/libpq/include/executor/execdesc.h
vendored
Normal file
73
deps/libpq/include/executor/execdesc.h
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* execdesc.h
|
||||
* plan and query descriptor accessor macros used by the executor
|
||||
* and related modules.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/execdesc.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef EXECDESC_H
|
||||
#define EXECDESC_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
#include "nodes/plannodes.h"
|
||||
#include "tcop/dest.h"
|
||||
|
||||
|
||||
/* ----------------
|
||||
* query descriptor:
|
||||
*
|
||||
* a QueryDesc encapsulates everything that the executor
|
||||
* needs to execute the query.
|
||||
*
|
||||
* For the convenience of SQL-language functions, we also support QueryDescs
|
||||
* containing utility statements; these must not be passed to the executor
|
||||
* however.
|
||||
* ---------------------
|
||||
*/
|
||||
typedef struct QueryDesc
|
||||
{
|
||||
/* These fields are provided by CreateQueryDesc */
|
||||
CmdType operation; /* CMD_SELECT, CMD_UPDATE, etc. */
|
||||
PlannedStmt *plannedstmt; /* planner's output, or null if utility */
|
||||
Node *utilitystmt; /* utility statement, or null */
|
||||
const char *sourceText; /* source text of the query */
|
||||
Snapshot snapshot; /* snapshot to use for query */
|
||||
Snapshot crosscheck_snapshot; /* crosscheck for RI update/delete */
|
||||
DestReceiver *dest; /* the destination for tuple output */
|
||||
ParamListInfo params; /* param values being passed in */
|
||||
int instrument_options; /* OR of InstrumentOption flags */
|
||||
|
||||
/* These fields are set by ExecutorStart */
|
||||
TupleDesc tupDesc; /* descriptor for result tuples */
|
||||
EState *estate; /* executor's query-wide state */
|
||||
PlanState *planstate; /* tree of per-plan-node state */
|
||||
|
||||
/* This is always set NULL by the core system, but plugins can change it */
|
||||
struct Instrumentation *totaltime; /* total time spent in ExecutorRun */
|
||||
} QueryDesc;
|
||||
|
||||
/* in pquery.c */
|
||||
extern QueryDesc *CreateQueryDesc(PlannedStmt *plannedstmt,
|
||||
const char *sourceText,
|
||||
Snapshot snapshot,
|
||||
Snapshot crosscheck_snapshot,
|
||||
DestReceiver *dest,
|
||||
ParamListInfo params,
|
||||
int instrument_options);
|
||||
|
||||
extern QueryDesc *CreateUtilityQueryDesc(Node *utilitystmt,
|
||||
const char *sourceText,
|
||||
Snapshot snapshot,
|
||||
DestReceiver *dest,
|
||||
ParamListInfo params);
|
||||
|
||||
extern void FreeQueryDesc(QueryDesc *qdesc);
|
||||
|
||||
#endif /* EXECDESC_H */
|
359
deps/libpq/include/executor/executor.h
vendored
Normal file
359
deps/libpq/include/executor/executor.h
vendored
Normal file
|
@ -0,0 +1,359 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* executor.h
|
||||
* support for the POSTGRES executor module
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/executor.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef EXECUTOR_H
|
||||
#define EXECUTOR_H
|
||||
|
||||
#include "executor/execdesc.h"
|
||||
#include "nodes/parsenodes.h"
|
||||
|
||||
|
||||
/*
|
||||
* The "eflags" argument to ExecutorStart and the various ExecInitNode
|
||||
* routines is a bitwise OR of the following flag bits, which tell the
|
||||
* called plan node what to expect. Note that the flags will get modified
|
||||
* as they are passed down the plan tree, since an upper node may require
|
||||
* functionality in its subnode not demanded of the plan as a whole
|
||||
* (example: MergeJoin requires mark/restore capability in its inner input),
|
||||
* or an upper node may shield its input from some functionality requirement
|
||||
* (example: Materialize shields its input from needing to do backward scan).
|
||||
*
|
||||
* EXPLAIN_ONLY indicates that the plan tree is being initialized just so
|
||||
* EXPLAIN can print it out; it will not be run. Hence, no side-effects
|
||||
* of startup should occur (such as creating a SELECT INTO target table).
|
||||
* However, error checks (such as permission checks) should be performed.
|
||||
*
|
||||
* REWIND indicates that the plan node should try to efficiently support
|
||||
* rescans without parameter changes. (Nodes must support ExecReScan calls
|
||||
* in any case, but if this flag was not given, they are at liberty to do it
|
||||
* through complete recalculation. Note that a parameter change forces a
|
||||
* full recalculation in any case.)
|
||||
*
|
||||
* BACKWARD indicates that the plan node must respect the es_direction flag.
|
||||
* When this is not passed, the plan node will only be run forwards.
|
||||
*
|
||||
* MARK indicates that the plan node must support Mark/Restore calls.
|
||||
* When this is not passed, no Mark/Restore will occur.
|
||||
*
|
||||
* SKIP_TRIGGERS tells ExecutorStart/ExecutorFinish to skip calling
|
||||
* AfterTriggerBeginQuery/AfterTriggerEndQuery. This does not necessarily
|
||||
* mean that the plan can't queue any AFTER triggers; just that the caller
|
||||
* is responsible for there being a trigger context for them to be queued in.
|
||||
*/
|
||||
#define EXEC_FLAG_EXPLAIN_ONLY 0x0001 /* EXPLAIN, no ANALYZE */
|
||||
#define EXEC_FLAG_REWIND 0x0002 /* need efficient rescan */
|
||||
#define EXEC_FLAG_BACKWARD 0x0004 /* need backward scan */
|
||||
#define EXEC_FLAG_MARK 0x0008 /* need mark/restore */
|
||||
#define EXEC_FLAG_SKIP_TRIGGERS 0x0010 /* skip AfterTrigger calls */
|
||||
|
||||
|
||||
/*
|
||||
* ExecEvalExpr was formerly a function containing a switch statement;
|
||||
* now it's just a macro invoking the function pointed to by an ExprState
|
||||
* node. Beware of double evaluation of the ExprState argument!
|
||||
*/
|
||||
#define ExecEvalExpr(expr, econtext, isNull, isDone) \
|
||||
((*(expr)->evalfunc) (expr, econtext, isNull, isDone))
|
||||
|
||||
|
||||
/* Hook for plugins to get control in ExecutorStart() */
|
||||
typedef void (*ExecutorStart_hook_type) (QueryDesc *queryDesc, int eflags);
|
||||
extern PGDLLIMPORT ExecutorStart_hook_type ExecutorStart_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecutorRun() */
|
||||
typedef void (*ExecutorRun_hook_type) (QueryDesc *queryDesc,
|
||||
ScanDirection direction,
|
||||
long count);
|
||||
extern PGDLLIMPORT ExecutorRun_hook_type ExecutorRun_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecutorFinish() */
|
||||
typedef void (*ExecutorFinish_hook_type) (QueryDesc *queryDesc);
|
||||
extern PGDLLIMPORT ExecutorFinish_hook_type ExecutorFinish_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecutorEnd() */
|
||||
typedef void (*ExecutorEnd_hook_type) (QueryDesc *queryDesc);
|
||||
extern PGDLLIMPORT ExecutorEnd_hook_type ExecutorEnd_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecCheckRTPerms() */
|
||||
typedef bool (*ExecutorCheckPerms_hook_type) (List *, bool);
|
||||
extern PGDLLIMPORT ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook;
|
||||
|
||||
|
||||
/*
|
||||
* prototypes from functions in execAmi.c
|
||||
*/
|
||||
extern void ExecReScan(PlanState *node);
|
||||
extern void ExecMarkPos(PlanState *node);
|
||||
extern void ExecRestrPos(PlanState *node);
|
||||
extern bool ExecSupportsMarkRestore(NodeTag plantype);
|
||||
extern bool ExecSupportsBackwardScan(Plan *node);
|
||||
extern bool ExecMaterializesOutput(NodeTag plantype);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execCurrent.c
|
||||
*/
|
||||
extern bool execCurrentOf(CurrentOfExpr *cexpr,
|
||||
ExprContext *econtext,
|
||||
Oid table_oid,
|
||||
ItemPointer current_tid);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execGrouping.c
|
||||
*/
|
||||
extern bool execTuplesMatch(TupleTableSlot *slot1,
|
||||
TupleTableSlot *slot2,
|
||||
int numCols,
|
||||
AttrNumber *matchColIdx,
|
||||
FmgrInfo *eqfunctions,
|
||||
MemoryContext evalContext);
|
||||
extern bool execTuplesUnequal(TupleTableSlot *slot1,
|
||||
TupleTableSlot *slot2,
|
||||
int numCols,
|
||||
AttrNumber *matchColIdx,
|
||||
FmgrInfo *eqfunctions,
|
||||
MemoryContext evalContext);
|
||||
extern FmgrInfo *execTuplesMatchPrepare(int numCols,
|
||||
Oid *eqOperators);
|
||||
extern void execTuplesHashPrepare(int numCols,
|
||||
Oid *eqOperators,
|
||||
FmgrInfo **eqFunctions,
|
||||
FmgrInfo **hashFunctions);
|
||||
extern TupleHashTable BuildTupleHashTable(int numCols, AttrNumber *keyColIdx,
|
||||
FmgrInfo *eqfunctions,
|
||||
FmgrInfo *hashfunctions,
|
||||
long nbuckets, Size entrysize,
|
||||
MemoryContext tablecxt,
|
||||
MemoryContext tempcxt);
|
||||
extern TupleHashEntry LookupTupleHashEntry(TupleHashTable hashtable,
|
||||
TupleTableSlot *slot,
|
||||
bool *isnew);
|
||||
extern TupleHashEntry FindTupleHashEntry(TupleHashTable hashtable,
|
||||
TupleTableSlot *slot,
|
||||
FmgrInfo *eqfunctions,
|
||||
FmgrInfo *hashfunctions);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execJunk.c
|
||||
*/
|
||||
extern JunkFilter *ExecInitJunkFilter(List *targetList, bool hasoid,
|
||||
TupleTableSlot *slot);
|
||||
extern JunkFilter *ExecInitJunkFilterConversion(List *targetList,
|
||||
TupleDesc cleanTupType,
|
||||
TupleTableSlot *slot);
|
||||
extern AttrNumber ExecFindJunkAttribute(JunkFilter *junkfilter,
|
||||
const char *attrName);
|
||||
extern AttrNumber ExecFindJunkAttributeInTlist(List *targetlist,
|
||||
const char *attrName);
|
||||
extern Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno,
|
||||
bool *isNull);
|
||||
extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter,
|
||||
TupleTableSlot *slot);
|
||||
|
||||
|
||||
/*
|
||||
* prototypes from functions in execMain.c
|
||||
*/
|
||||
extern void ExecutorStart(QueryDesc *queryDesc, int eflags);
|
||||
extern void standard_ExecutorStart(QueryDesc *queryDesc, int eflags);
|
||||
extern void ExecutorRun(QueryDesc *queryDesc,
|
||||
ScanDirection direction, long count);
|
||||
extern void standard_ExecutorRun(QueryDesc *queryDesc,
|
||||
ScanDirection direction, long count);
|
||||
extern void ExecutorFinish(QueryDesc *queryDesc);
|
||||
extern void standard_ExecutorFinish(QueryDesc *queryDesc);
|
||||
extern void ExecutorEnd(QueryDesc *queryDesc);
|
||||
extern void standard_ExecutorEnd(QueryDesc *queryDesc);
|
||||
extern void ExecutorRewind(QueryDesc *queryDesc);
|
||||
extern bool ExecCheckRTPerms(List *rangeTable, bool ereport_on_violation);
|
||||
extern void CheckValidResultRel(Relation resultRel, CmdType operation);
|
||||
extern void InitResultRelInfo(ResultRelInfo *resultRelInfo,
|
||||
Relation resultRelationDesc,
|
||||
Index resultRelationIndex,
|
||||
int instrument_options);
|
||||
extern ResultRelInfo *ExecGetTriggerResultRel(EState *estate, Oid relid);
|
||||
extern bool ExecContextForcesOids(PlanState *planstate, bool *hasoids);
|
||||
extern void ExecConstraints(ResultRelInfo *resultRelInfo,
|
||||
TupleTableSlot *slot, EState *estate);
|
||||
extern ExecRowMark *ExecFindRowMark(EState *estate, Index rti);
|
||||
extern ExecAuxRowMark *ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist);
|
||||
extern TupleTableSlot *EvalPlanQual(EState *estate, EPQState *epqstate,
|
||||
Relation relation, Index rti,
|
||||
ItemPointer tid, TransactionId priorXmax);
|
||||
extern HeapTuple EvalPlanQualFetch(EState *estate, Relation relation,
|
||||
int lockmode, ItemPointer tid, TransactionId priorXmax);
|
||||
extern void EvalPlanQualInit(EPQState *epqstate, EState *estate,
|
||||
Plan *subplan, List *auxrowmarks, int epqParam);
|
||||
extern void EvalPlanQualSetPlan(EPQState *epqstate,
|
||||
Plan *subplan, List *auxrowmarks);
|
||||
extern void EvalPlanQualSetTuple(EPQState *epqstate, Index rti,
|
||||
HeapTuple tuple);
|
||||
extern HeapTuple EvalPlanQualGetTuple(EPQState *epqstate, Index rti);
|
||||
|
||||
#define EvalPlanQualSetSlot(epqstate, slot) ((epqstate)->origslot = (slot))
|
||||
extern void EvalPlanQualFetchRowMarks(EPQState *epqstate);
|
||||
extern TupleTableSlot *EvalPlanQualNext(EPQState *epqstate);
|
||||
extern void EvalPlanQualBegin(EPQState *epqstate, EState *parentestate);
|
||||
extern void EvalPlanQualEnd(EPQState *epqstate);
|
||||
extern DestReceiver *CreateIntoRelDestReceiver(void);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execProcnode.c
|
||||
*/
|
||||
extern PlanState *ExecInitNode(Plan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecProcNode(PlanState *node);
|
||||
extern Node *MultiExecProcNode(PlanState *node);
|
||||
extern void ExecEndNode(PlanState *node);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execQual.c
|
||||
*/
|
||||
extern Datum GetAttributeByNum(HeapTupleHeader tuple, AttrNumber attrno,
|
||||
bool *isNull);
|
||||
extern Datum GetAttributeByName(HeapTupleHeader tuple, const char *attname,
|
||||
bool *isNull);
|
||||
extern Tuplestorestate *ExecMakeTableFunctionResult(ExprState *funcexpr,
|
||||
ExprContext *econtext,
|
||||
TupleDesc expectedDesc,
|
||||
bool randomAccess);
|
||||
extern Datum ExecEvalExprSwitchContext(ExprState *expression, ExprContext *econtext,
|
||||
bool *isNull, ExprDoneCond *isDone);
|
||||
extern ExprState *ExecInitExpr(Expr *node, PlanState *parent);
|
||||
extern ExprState *ExecPrepareExpr(Expr *node, EState *estate);
|
||||
extern bool ExecQual(List *qual, ExprContext *econtext, bool resultForNull);
|
||||
extern int ExecTargetListLength(List *targetlist);
|
||||
extern int ExecCleanTargetListLength(List *targetlist);
|
||||
extern TupleTableSlot *ExecProject(ProjectionInfo *projInfo,
|
||||
ExprDoneCond *isDone);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execScan.c
|
||||
*/
|
||||
typedef TupleTableSlot *(*ExecScanAccessMtd) (ScanState *node);
|
||||
typedef bool (*ExecScanRecheckMtd) (ScanState *node, TupleTableSlot *slot);
|
||||
|
||||
extern TupleTableSlot *ExecScan(ScanState *node, ExecScanAccessMtd accessMtd,
|
||||
ExecScanRecheckMtd recheckMtd);
|
||||
extern void ExecAssignScanProjectionInfo(ScanState *node);
|
||||
extern void ExecScanReScan(ScanState *node);
|
||||
|
||||
/*
|
||||
* prototypes from functions in execTuples.c
|
||||
*/
|
||||
extern void ExecInitResultTupleSlot(EState *estate, PlanState *planstate);
|
||||
extern void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate);
|
||||
extern TupleTableSlot *ExecInitExtraTupleSlot(EState *estate);
|
||||
extern TupleTableSlot *ExecInitNullTupleSlot(EState *estate,
|
||||
TupleDesc tupType);
|
||||
extern TupleDesc ExecTypeFromTL(List *targetList, bool hasoid);
|
||||
extern TupleDesc ExecCleanTypeFromTL(List *targetList, bool hasoid);
|
||||
extern TupleDesc ExecTypeFromExprList(List *exprList);
|
||||
extern void UpdateChangedParamSet(PlanState *node, Bitmapset *newchg);
|
||||
|
||||
typedef struct TupOutputState
|
||||
{
|
||||
TupleTableSlot *slot;
|
||||
DestReceiver *dest;
|
||||
} TupOutputState;
|
||||
|
||||
extern TupOutputState *begin_tup_output_tupdesc(DestReceiver *dest,
|
||||
TupleDesc tupdesc);
|
||||
extern void do_tup_output(TupOutputState *tstate, Datum *values, bool *isnull);
|
||||
extern void do_text_output_multiline(TupOutputState *tstate, char *text);
|
||||
extern void end_tup_output(TupOutputState *tstate);
|
||||
|
||||
/*
|
||||
* Write a single line of text given as a C string.
|
||||
*
|
||||
* Should only be used with a single-TEXT-attribute tupdesc.
|
||||
*/
|
||||
#define do_text_output_oneline(tstate, str_to_emit) \
|
||||
do { \
|
||||
Datum values_[1]; \
|
||||
bool isnull_[1]; \
|
||||
values_[0] = PointerGetDatum(cstring_to_text(str_to_emit)); \
|
||||
isnull_[0] = false; \
|
||||
do_tup_output(tstate, values_, isnull_); \
|
||||
pfree(DatumGetPointer(values_[0])); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* prototypes from functions in execUtils.c
|
||||
*/
|
||||
extern EState *CreateExecutorState(void);
|
||||
extern void FreeExecutorState(EState *estate);
|
||||
extern ExprContext *CreateExprContext(EState *estate);
|
||||
extern ExprContext *CreateStandaloneExprContext(void);
|
||||
extern void FreeExprContext(ExprContext *econtext, bool isCommit);
|
||||
extern void ReScanExprContext(ExprContext *econtext);
|
||||
|
||||
#define ResetExprContext(econtext) \
|
||||
MemoryContextReset((econtext)->ecxt_per_tuple_memory)
|
||||
|
||||
extern ExprContext *MakePerTupleExprContext(EState *estate);
|
||||
|
||||
/* Get an EState's per-output-tuple exprcontext, making it if first use */
|
||||
#define GetPerTupleExprContext(estate) \
|
||||
((estate)->es_per_tuple_exprcontext ? \
|
||||
(estate)->es_per_tuple_exprcontext : \
|
||||
MakePerTupleExprContext(estate))
|
||||
|
||||
#define GetPerTupleMemoryContext(estate) \
|
||||
(GetPerTupleExprContext(estate)->ecxt_per_tuple_memory)
|
||||
|
||||
/* Reset an EState's per-output-tuple exprcontext, if one's been created */
|
||||
#define ResetPerTupleExprContext(estate) \
|
||||
do { \
|
||||
if ((estate)->es_per_tuple_exprcontext) \
|
||||
ResetExprContext((estate)->es_per_tuple_exprcontext); \
|
||||
} while (0)
|
||||
|
||||
extern void ExecAssignExprContext(EState *estate, PlanState *planstate);
|
||||
extern void ExecAssignResultType(PlanState *planstate, TupleDesc tupDesc);
|
||||
extern void ExecAssignResultTypeFromTL(PlanState *planstate);
|
||||
extern TupleDesc ExecGetResultType(PlanState *planstate);
|
||||
extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList,
|
||||
ExprContext *econtext,
|
||||
TupleTableSlot *slot,
|
||||
TupleDesc inputDesc);
|
||||
extern void ExecAssignProjectionInfo(PlanState *planstate,
|
||||
TupleDesc inputDesc);
|
||||
extern void ExecFreeExprContext(PlanState *planstate);
|
||||
extern TupleDesc ExecGetScanType(ScanState *scanstate);
|
||||
extern void ExecAssignScanType(ScanState *scanstate, TupleDesc tupDesc);
|
||||
extern void ExecAssignScanTypeFromOuterPlan(ScanState *scanstate);
|
||||
|
||||
extern bool ExecRelationIsTargetRelation(EState *estate, Index scanrelid);
|
||||
|
||||
extern Relation ExecOpenScanRelation(EState *estate, Index scanrelid);
|
||||
extern void ExecCloseScanRelation(Relation scanrel);
|
||||
|
||||
extern void ExecOpenIndices(ResultRelInfo *resultRelInfo);
|
||||
extern void ExecCloseIndices(ResultRelInfo *resultRelInfo);
|
||||
extern List *ExecInsertIndexTuples(TupleTableSlot *slot, ItemPointer tupleid,
|
||||
EState *estate);
|
||||
extern bool check_exclusion_constraint(Relation heap, Relation index,
|
||||
IndexInfo *indexInfo,
|
||||
ItemPointer tupleid,
|
||||
Datum *values, bool *isnull,
|
||||
EState *estate,
|
||||
bool newIndex, bool errorOK);
|
||||
|
||||
extern void RegisterExprContextCallback(ExprContext *econtext,
|
||||
ExprContextCallbackFunction function,
|
||||
Datum arg);
|
||||
extern void UnregisterExprContextCallback(ExprContext *econtext,
|
||||
ExprContextCallbackFunction function,
|
||||
Datum arg);
|
||||
|
||||
#endif /* EXECUTOR_H */
|
39
deps/libpq/include/executor/functions.h
vendored
Normal file
39
deps/libpq/include/executor/functions.h
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* functions.h
|
||||
* Declarations for execution of SQL-language functions.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/functions.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef FUNCTIONS_H
|
||||
#define FUNCTIONS_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
#include "tcop/dest.h"
|
||||
|
||||
/* This struct is known only within executor/functions.c */
|
||||
typedef struct SQLFunctionParseInfo *SQLFunctionParseInfoPtr;
|
||||
|
||||
extern Datum fmgr_sql(PG_FUNCTION_ARGS);
|
||||
|
||||
extern SQLFunctionParseInfoPtr prepare_sql_fn_parse_info(HeapTuple procedureTuple,
|
||||
Node *call_expr,
|
||||
Oid inputCollation);
|
||||
|
||||
extern void sql_fn_parser_setup(struct ParseState *pstate,
|
||||
SQLFunctionParseInfoPtr pinfo);
|
||||
|
||||
extern bool check_sql_fn_retval(Oid func_id, Oid rettype,
|
||||
List *queryTreeList,
|
||||
bool *modifyTargetList,
|
||||
JunkFilter **junkFilter);
|
||||
|
||||
extern DestReceiver *CreateSQLFunctionDestReceiver(void);
|
||||
|
||||
#endif /* FUNCTIONS_H */
|
163
deps/libpq/include/executor/hashjoin.h
vendored
Normal file
163
deps/libpq/include/executor/hashjoin.h
vendored
Normal file
|
@ -0,0 +1,163 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* hashjoin.h
|
||||
* internal structures for hash joins
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/hashjoin.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef HASHJOIN_H
|
||||
#define HASHJOIN_H
|
||||
|
||||
#include "fmgr.h"
|
||||
#include "nodes/execnodes.h"
|
||||
#include "storage/buffile.h"
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* hash-join hash table structures
|
||||
*
|
||||
* Each active hashjoin has a HashJoinTable control block, which is
|
||||
* palloc'd in the executor's per-query context. All other storage needed
|
||||
* for the hashjoin is kept in private memory contexts, two for each hashjoin.
|
||||
* This makes it easy and fast to release the storage when we don't need it
|
||||
* anymore. (Exception: data associated with the temp files lives in the
|
||||
* per-query context too, since we always call buffile.c in that context.)
|
||||
*
|
||||
* The hashtable contexts are made children of the per-query context, ensuring
|
||||
* that they will be discarded at end of statement even if the join is
|
||||
* aborted early by an error. (Likewise, any temporary files we make will
|
||||
* be cleaned up by the virtual file manager in event of an error.)
|
||||
*
|
||||
* Storage that should live through the entire join is allocated from the
|
||||
* "hashCxt", while storage that is only wanted for the current batch is
|
||||
* allocated in the "batchCxt". By resetting the batchCxt at the end of
|
||||
* each batch, we free all the per-batch storage reliably and without tedium.
|
||||
*
|
||||
* During first scan of inner relation, we get its tuples from executor.
|
||||
* If nbatch > 1 then tuples that don't belong in first batch get saved
|
||||
* into inner-batch temp files. The same statements apply for the
|
||||
* first scan of the outer relation, except we write tuples to outer-batch
|
||||
* temp files. After finishing the first scan, we do the following for
|
||||
* each remaining batch:
|
||||
* 1. Read tuples from inner batch file, load into hash buckets.
|
||||
* 2. Read tuples from outer batch file, match to hash buckets and output.
|
||||
*
|
||||
* It is possible to increase nbatch on the fly if the in-memory hash table
|
||||
* gets too big. The hash-value-to-batch computation is arranged so that this
|
||||
* can only cause a tuple to go into a later batch than previously thought,
|
||||
* never into an earlier batch. When we increase nbatch, we rescan the hash
|
||||
* table and dump out any tuples that are now of a later batch to the correct
|
||||
* inner batch file. Subsequently, while reading either inner or outer batch
|
||||
* files, we might find tuples that no longer belong to the current batch;
|
||||
* if so, we just dump them out to the correct batch file.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* these are in nodes/execnodes.h: */
|
||||
/* typedef struct HashJoinTupleData *HashJoinTuple; */
|
||||
/* typedef struct HashJoinTableData *HashJoinTable; */
|
||||
|
||||
typedef struct HashJoinTupleData
|
||||
{
|
||||
struct HashJoinTupleData *next; /* link to next tuple in same bucket */
|
||||
uint32 hashvalue; /* tuple's hash code */
|
||||
/* Tuple data, in MinimalTuple format, follows on a MAXALIGN boundary */
|
||||
} HashJoinTupleData;
|
||||
|
||||
#define HJTUPLE_OVERHEAD MAXALIGN(sizeof(HashJoinTupleData))
|
||||
#define HJTUPLE_MINTUPLE(hjtup) \
|
||||
((MinimalTuple) ((char *) (hjtup) + HJTUPLE_OVERHEAD))
|
||||
|
||||
/*
|
||||
* If the outer relation's distribution is sufficiently nonuniform, we attempt
|
||||
* to optimize the join by treating the hash values corresponding to the outer
|
||||
* relation's MCVs specially. Inner relation tuples matching these hash
|
||||
* values go into the "skew" hashtable instead of the main hashtable, and
|
||||
* outer relation tuples with these hash values are matched against that
|
||||
* table instead of the main one. Thus, tuples with these hash values are
|
||||
* effectively handled as part of the first batch and will never go to disk.
|
||||
* The skew hashtable is limited to SKEW_WORK_MEM_PERCENT of the total memory
|
||||
* allowed for the join; while building the hashtables, we decrease the number
|
||||
* of MCVs being specially treated if needed to stay under this limit.
|
||||
*
|
||||
* Note: you might wonder why we look at the outer relation stats for this,
|
||||
* rather than the inner. One reason is that the outer relation is typically
|
||||
* bigger, so we get more I/O savings by optimizing for its most common values.
|
||||
* Also, for similarly-sized relations, the planner prefers to put the more
|
||||
* uniformly distributed relation on the inside, so we're more likely to find
|
||||
* interesting skew in the outer relation.
|
||||
*/
|
||||
typedef struct HashSkewBucket
|
||||
{
|
||||
uint32 hashvalue; /* common hash value */
|
||||
HashJoinTuple tuples; /* linked list of inner-relation tuples */
|
||||
} HashSkewBucket;
|
||||
|
||||
#define SKEW_BUCKET_OVERHEAD MAXALIGN(sizeof(HashSkewBucket))
|
||||
#define INVALID_SKEW_BUCKET_NO (-1)
|
||||
#define SKEW_WORK_MEM_PERCENT 2
|
||||
#define SKEW_MIN_OUTER_FRACTION 0.01
|
||||
|
||||
|
||||
typedef struct HashJoinTableData
|
||||
{
|
||||
int nbuckets; /* # buckets in the in-memory hash table */
|
||||
int log2_nbuckets; /* its log2 (nbuckets must be a power of 2) */
|
||||
|
||||
/* buckets[i] is head of list of tuples in i'th in-memory bucket */
|
||||
struct HashJoinTupleData **buckets;
|
||||
/* buckets array is per-batch storage, as are all the tuples */
|
||||
|
||||
bool keepNulls; /* true to store unmatchable NULL tuples */
|
||||
|
||||
bool skewEnabled; /* are we using skew optimization? */
|
||||
HashSkewBucket **skewBucket; /* hashtable of skew buckets */
|
||||
int skewBucketLen; /* size of skewBucket array (a power of 2!) */
|
||||
int nSkewBuckets; /* number of active skew buckets */
|
||||
int *skewBucketNums; /* array indexes of active skew buckets */
|
||||
|
||||
int nbatch; /* number of batches */
|
||||
int curbatch; /* current batch #; 0 during 1st pass */
|
||||
|
||||
int nbatch_original; /* nbatch when we started inner scan */
|
||||
int nbatch_outstart; /* nbatch when we started outer scan */
|
||||
|
||||
bool growEnabled; /* flag to shut off nbatch increases */
|
||||
|
||||
double totalTuples; /* # tuples obtained from inner plan */
|
||||
|
||||
/*
|
||||
* These arrays are allocated for the life of the hash join, but only if
|
||||
* nbatch > 1. A file is opened only when we first write a tuple into it
|
||||
* (otherwise its pointer remains NULL). Note that the zero'th array
|
||||
* elements never get used, since we will process rather than dump out any
|
||||
* tuples of batch zero.
|
||||
*/
|
||||
BufFile **innerBatchFile; /* buffered virtual temp file per batch */
|
||||
BufFile **outerBatchFile; /* buffered virtual temp file per batch */
|
||||
|
||||
/*
|
||||
* Info about the datatype-specific hash functions for the datatypes being
|
||||
* hashed. These are arrays of the same length as the number of hash join
|
||||
* clauses (hash keys).
|
||||
*/
|
||||
FmgrInfo *outer_hashfunctions; /* lookup data for hash functions */
|
||||
FmgrInfo *inner_hashfunctions; /* lookup data for hash functions */
|
||||
bool *hashStrict; /* is each hash join operator strict? */
|
||||
|
||||
Size spaceUsed; /* memory space currently used by tuples */
|
||||
Size spaceAllowed; /* upper limit for space used */
|
||||
Size spacePeak; /* peak space used */
|
||||
Size spaceUsedSkew; /* skew hash table's current space usage */
|
||||
Size spaceAllowedSkew; /* upper limit for skew hashtable */
|
||||
|
||||
MemoryContext hashCxt; /* context for whole-hash-join storage */
|
||||
MemoryContext batchCxt; /* context for this-batch-only storage */
|
||||
} HashJoinTableData;
|
||||
|
||||
#endif /* HASHJOIN_H */
|
63
deps/libpq/include/executor/instrument.h
vendored
Normal file
63
deps/libpq/include/executor/instrument.h
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* instrument.h
|
||||
* definitions for run-time statistics collection
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2001-2011, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/include/executor/instrument.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef INSTRUMENT_H
|
||||
#define INSTRUMENT_H
|
||||
|
||||
#include "portability/instr_time.h"
|
||||
|
||||
|
||||
typedef struct BufferUsage
|
||||
{
|
||||
long shared_blks_hit; /* # of shared buffer hits */
|
||||
long shared_blks_read; /* # of shared disk blocks read */
|
||||
long shared_blks_written; /* # of shared disk blocks written */
|
||||
long local_blks_hit; /* # of local buffer hits */
|
||||
long local_blks_read; /* # of local disk blocks read */
|
||||
long local_blks_written; /* # of local disk blocks written */
|
||||
long temp_blks_read; /* # of temp blocks read */
|
||||
long temp_blks_written; /* # of temp blocks written */
|
||||
} BufferUsage;
|
||||
|
||||
typedef enum InstrumentOption
|
||||
{
|
||||
INSTRUMENT_TIMER = 1 << 0, /* needs timer */
|
||||
INSTRUMENT_BUFFERS = 1 << 1, /* needs buffer usage */
|
||||
INSTRUMENT_ALL = 0x7FFFFFFF
|
||||
} InstrumentOption;
|
||||
|
||||
typedef struct Instrumentation
|
||||
{
|
||||
/* Info about current plan cycle: */
|
||||
bool running; /* TRUE if we've completed first tuple */
|
||||
bool needs_bufusage; /* TRUE if we need buffer usage */
|
||||
instr_time starttime; /* Start time of current iteration of node */
|
||||
instr_time counter; /* Accumulated runtime for this node */
|
||||
double firsttuple; /* Time for first tuple of this cycle */
|
||||
double tuplecount; /* Tuples emitted so far this cycle */
|
||||
BufferUsage bufusage_start; /* Buffer usage at start */
|
||||
/* Accumulated statistics across all completed cycles: */
|
||||
double startup; /* Total startup time (in seconds) */
|
||||
double total; /* Total total time (in seconds) */
|
||||
double ntuples; /* Total tuples produced */
|
||||
double nloops; /* # of run cycles for this node */
|
||||
BufferUsage bufusage; /* Total buffer usage */
|
||||
} Instrumentation;
|
||||
|
||||
extern PGDLLIMPORT BufferUsage pgBufferUsage;
|
||||
|
||||
extern Instrumentation *InstrAlloc(int n, int instrument_options);
|
||||
extern void InstrStartNode(Instrumentation *instr);
|
||||
extern void InstrStopNode(Instrumentation *instr, double nTuples);
|
||||
extern void InstrEndLoop(Instrumentation *instr);
|
||||
|
||||
#endif /* INSTRUMENT_H */
|
28
deps/libpq/include/executor/nodeAgg.h
vendored
Normal file
28
deps/libpq/include/executor/nodeAgg.h
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeAgg.h
|
||||
* prototypes for nodeAgg.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeAgg.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEAGG_H
|
||||
#define NODEAGG_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern AggState *ExecInitAgg(Agg *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecAgg(AggState *node);
|
||||
extern void ExecEndAgg(AggState *node);
|
||||
extern void ExecReScanAgg(AggState *node);
|
||||
|
||||
extern Size hash_agg_entry_size(int numAggs);
|
||||
|
||||
extern Datum aggregate_dummy(PG_FUNCTION_ARGS);
|
||||
|
||||
#endif /* NODEAGG_H */
|
24
deps/libpq/include/executor/nodeAppend.h
vendored
Normal file
24
deps/libpq/include/executor/nodeAppend.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeAppend.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeAppend.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEAPPEND_H
|
||||
#define NODEAPPEND_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern AppendState *ExecInitAppend(Append *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecAppend(AppendState *node);
|
||||
extern void ExecEndAppend(AppendState *node);
|
||||
extern void ExecReScanAppend(AppendState *node);
|
||||
|
||||
#endif /* NODEAPPEND_H */
|
24
deps/libpq/include/executor/nodeBitmapAnd.h
vendored
Normal file
24
deps/libpq/include/executor/nodeBitmapAnd.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeBitmapAnd.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeBitmapAnd.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEBITMAPAND_H
|
||||
#define NODEBITMAPAND_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern BitmapAndState *ExecInitBitmapAnd(BitmapAnd *node, EState *estate, int eflags);
|
||||
extern Node *MultiExecBitmapAnd(BitmapAndState *node);
|
||||
extern void ExecEndBitmapAnd(BitmapAndState *node);
|
||||
extern void ExecReScanBitmapAnd(BitmapAndState *node);
|
||||
|
||||
#endif /* NODEBITMAPAND_H */
|
24
deps/libpq/include/executor/nodeBitmapHeapscan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeBitmapHeapscan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeBitmapHeapscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeBitmapHeapscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEBITMAPHEAPSCAN_H
|
||||
#define NODEBITMAPHEAPSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern BitmapHeapScanState *ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecBitmapHeapScan(BitmapHeapScanState *node);
|
||||
extern void ExecEndBitmapHeapScan(BitmapHeapScanState *node);
|
||||
extern void ExecReScanBitmapHeapScan(BitmapHeapScanState *node);
|
||||
|
||||
#endif /* NODEBITMAPHEAPSCAN_H */
|
24
deps/libpq/include/executor/nodeBitmapIndexscan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeBitmapIndexscan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeBitmapIndexscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeBitmapIndexscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEBITMAPINDEXSCAN_H
|
||||
#define NODEBITMAPINDEXSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern BitmapIndexScanState *ExecInitBitmapIndexScan(BitmapIndexScan *node, EState *estate, int eflags);
|
||||
extern Node *MultiExecBitmapIndexScan(BitmapIndexScanState *node);
|
||||
extern void ExecEndBitmapIndexScan(BitmapIndexScanState *node);
|
||||
extern void ExecReScanBitmapIndexScan(BitmapIndexScanState *node);
|
||||
|
||||
#endif /* NODEBITMAPINDEXSCAN_H */
|
24
deps/libpq/include/executor/nodeBitmapOr.h
vendored
Normal file
24
deps/libpq/include/executor/nodeBitmapOr.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeBitmapOr.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeBitmapOr.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEBITMAPOR_H
|
||||
#define NODEBITMAPOR_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern BitmapOrState *ExecInitBitmapOr(BitmapOr *node, EState *estate, int eflags);
|
||||
extern Node *MultiExecBitmapOr(BitmapOrState *node);
|
||||
extern void ExecEndBitmapOr(BitmapOrState *node);
|
||||
extern void ExecReScanBitmapOr(BitmapOrState *node);
|
||||
|
||||
#endif /* NODEBITMAPOR_H */
|
24
deps/libpq/include/executor/nodeCtescan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeCtescan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeCtescan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeCtescan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODECTESCAN_H
|
||||
#define NODECTESCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern CteScanState *ExecInitCteScan(CteScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecCteScan(CteScanState *node);
|
||||
extern void ExecEndCteScan(CteScanState *node);
|
||||
extern void ExecReScanCteScan(CteScanState *node);
|
||||
|
||||
#endif /* NODECTESCAN_H */
|
24
deps/libpq/include/executor/nodeForeignscan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeForeignscan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeForeignscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeForeignscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEFOREIGNSCAN_H
|
||||
#define NODEFOREIGNSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern ForeignScanState *ExecInitForeignScan(ForeignScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecForeignScan(ForeignScanState *node);
|
||||
extern void ExecEndForeignScan(ForeignScanState *node);
|
||||
extern void ExecReScanForeignScan(ForeignScanState *node);
|
||||
|
||||
#endif /* NODEFOREIGNSCAN_H */
|
24
deps/libpq/include/executor/nodeFunctionscan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeFunctionscan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeFunctionscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeFunctionscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEFUNCTIONSCAN_H
|
||||
#define NODEFUNCTIONSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern FunctionScanState *ExecInitFunctionScan(FunctionScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecFunctionScan(FunctionScanState *node);
|
||||
extern void ExecEndFunctionScan(FunctionScanState *node);
|
||||
extern void ExecReScanFunctionScan(FunctionScanState *node);
|
||||
|
||||
#endif /* NODEFUNCTIONSCAN_H */
|
24
deps/libpq/include/executor/nodeGroup.h
vendored
Normal file
24
deps/libpq/include/executor/nodeGroup.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeGroup.h
|
||||
* prototypes for nodeGroup.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeGroup.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEGROUP_H
|
||||
#define NODEGROUP_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern GroupState *ExecInitGroup(Group *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecGroup(GroupState *node);
|
||||
extern void ExecEndGroup(GroupState *node);
|
||||
extern void ExecReScanGroup(GroupState *node);
|
||||
|
||||
#endif /* NODEGROUP_H */
|
53
deps/libpq/include/executor/nodeHash.h
vendored
Normal file
53
deps/libpq/include/executor/nodeHash.h
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeHash.h
|
||||
* prototypes for nodeHash.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeHash.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEHASH_H
|
||||
#define NODEHASH_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern HashState *ExecInitHash(Hash *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecHash(HashState *node);
|
||||
extern Node *MultiExecHash(HashState *node);
|
||||
extern void ExecEndHash(HashState *node);
|
||||
extern void ExecReScanHash(HashState *node);
|
||||
|
||||
extern HashJoinTable ExecHashTableCreate(Hash *node, List *hashOperators,
|
||||
bool keepNulls);
|
||||
extern void ExecHashTableDestroy(HashJoinTable hashtable);
|
||||
extern void ExecHashTableInsert(HashJoinTable hashtable,
|
||||
TupleTableSlot *slot,
|
||||
uint32 hashvalue);
|
||||
extern bool ExecHashGetHashValue(HashJoinTable hashtable,
|
||||
ExprContext *econtext,
|
||||
List *hashkeys,
|
||||
bool outer_tuple,
|
||||
bool keep_nulls,
|
||||
uint32 *hashvalue);
|
||||
extern void ExecHashGetBucketAndBatch(HashJoinTable hashtable,
|
||||
uint32 hashvalue,
|
||||
int *bucketno,
|
||||
int *batchno);
|
||||
extern bool ExecScanHashBucket(HashJoinState *hjstate, ExprContext *econtext);
|
||||
extern void ExecPrepHashTableForUnmatched(HashJoinState *hjstate);
|
||||
extern bool ExecScanHashTableForUnmatched(HashJoinState *hjstate,
|
||||
ExprContext *econtext);
|
||||
extern void ExecHashTableReset(HashJoinTable hashtable);
|
||||
extern void ExecHashTableResetMatchFlags(HashJoinTable hashtable);
|
||||
extern void ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew,
|
||||
int *numbuckets,
|
||||
int *numbatches,
|
||||
int *num_skew_mcvs);
|
||||
extern int ExecHashGetSkewBucket(HashJoinTable hashtable, uint32 hashvalue);
|
||||
|
||||
#endif /* NODEHASH_H */
|
28
deps/libpq/include/executor/nodeHashjoin.h
vendored
Normal file
28
deps/libpq/include/executor/nodeHashjoin.h
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeHashjoin.h
|
||||
* prototypes for nodeHashjoin.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeHashjoin.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEHASHJOIN_H
|
||||
#define NODEHASHJOIN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
#include "storage/buffile.h"
|
||||
|
||||
extern HashJoinState *ExecInitHashJoin(HashJoin *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecHashJoin(HashJoinState *node);
|
||||
extern void ExecEndHashJoin(HashJoinState *node);
|
||||
extern void ExecReScanHashJoin(HashJoinState *node);
|
||||
|
||||
extern void ExecHashJoinSaveTuple(MinimalTuple tuple, uint32 hashvalue,
|
||||
BufFile **fileptr);
|
||||
|
||||
#endif /* NODEHASHJOIN_H */
|
38
deps/libpq/include/executor/nodeIndexscan.h
vendored
Normal file
38
deps/libpq/include/executor/nodeIndexscan.h
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeIndexscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeIndexscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEINDEXSCAN_H
|
||||
#define NODEINDEXSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern IndexScanState *ExecInitIndexScan(IndexScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecIndexScan(IndexScanState *node);
|
||||
extern void ExecEndIndexScan(IndexScanState *node);
|
||||
extern void ExecIndexMarkPos(IndexScanState *node);
|
||||
extern void ExecIndexRestrPos(IndexScanState *node);
|
||||
extern void ExecReScanIndexScan(IndexScanState *node);
|
||||
|
||||
/* routines exported to share code with nodeBitmapIndexscan.c */
|
||||
extern void ExecIndexBuildScanKeys(PlanState *planstate, Relation index,
|
||||
Index scanrelid, List *quals, bool isorderby,
|
||||
ScanKey *scanKeys, int *numScanKeys,
|
||||
IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys,
|
||||
IndexArrayKeyInfo **arrayKeys, int *numArrayKeys);
|
||||
extern void ExecIndexEvalRuntimeKeys(ExprContext *econtext,
|
||||
IndexRuntimeKeyInfo *runtimeKeys, int numRuntimeKeys);
|
||||
extern bool ExecIndexEvalArrayKeys(ExprContext *econtext,
|
||||
IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
|
||||
extern bool ExecIndexAdvanceArrayKeys(IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
|
||||
|
||||
#endif /* NODEINDEXSCAN_H */
|
24
deps/libpq/include/executor/nodeLimit.h
vendored
Normal file
24
deps/libpq/include/executor/nodeLimit.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeLimit.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeLimit.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODELIMIT_H
|
||||
#define NODELIMIT_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern LimitState *ExecInitLimit(Limit *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecLimit(LimitState *node);
|
||||
extern void ExecEndLimit(LimitState *node);
|
||||
extern void ExecReScanLimit(LimitState *node);
|
||||
|
||||
#endif /* NODELIMIT_H */
|
24
deps/libpq/include/executor/nodeLockRows.h
vendored
Normal file
24
deps/libpq/include/executor/nodeLockRows.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeLockRows.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeLockRows.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODELOCKROWS_H
|
||||
#define NODELOCKROWS_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern LockRowsState *ExecInitLockRows(LockRows *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecLockRows(LockRowsState *node);
|
||||
extern void ExecEndLockRows(LockRowsState *node);
|
||||
extern void ExecReScanLockRows(LockRowsState *node);
|
||||
|
||||
#endif /* NODELOCKROWS_H */
|
26
deps/libpq/include/executor/nodeMaterial.h
vendored
Normal file
26
deps/libpq/include/executor/nodeMaterial.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeMaterial.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeMaterial.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEMATERIAL_H
|
||||
#define NODEMATERIAL_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern MaterialState *ExecInitMaterial(Material *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecMaterial(MaterialState *node);
|
||||
extern void ExecEndMaterial(MaterialState *node);
|
||||
extern void ExecMaterialMarkPos(MaterialState *node);
|
||||
extern void ExecMaterialRestrPos(MaterialState *node);
|
||||
extern void ExecReScanMaterial(MaterialState *node);
|
||||
|
||||
#endif /* NODEMATERIAL_H */
|
24
deps/libpq/include/executor/nodeMergeAppend.h
vendored
Normal file
24
deps/libpq/include/executor/nodeMergeAppend.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeMergeAppend.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeMergeAppend.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEMERGEAPPEND_H
|
||||
#define NODEMERGEAPPEND_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern MergeAppendState *ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecMergeAppend(MergeAppendState *node);
|
||||
extern void ExecEndMergeAppend(MergeAppendState *node);
|
||||
extern void ExecReScanMergeAppend(MergeAppendState *node);
|
||||
|
||||
#endif /* NODEMERGEAPPEND_H */
|
24
deps/libpq/include/executor/nodeMergejoin.h
vendored
Normal file
24
deps/libpq/include/executor/nodeMergejoin.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeMergejoin.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeMergejoin.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEMERGEJOIN_H
|
||||
#define NODEMERGEJOIN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern MergeJoinState *ExecInitMergeJoin(MergeJoin *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecMergeJoin(MergeJoinState *node);
|
||||
extern void ExecEndMergeJoin(MergeJoinState *node);
|
||||
extern void ExecReScanMergeJoin(MergeJoinState *node);
|
||||
|
||||
#endif /* NODEMERGEJOIN_H */
|
23
deps/libpq/include/executor/nodeModifyTable.h
vendored
Normal file
23
deps/libpq/include/executor/nodeModifyTable.h
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeModifyTable.h
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeModifyTable.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEMODIFYTABLE_H
|
||||
#define NODEMODIFYTABLE_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern ModifyTableState *ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecModifyTable(ModifyTableState *node);
|
||||
extern void ExecEndModifyTable(ModifyTableState *node);
|
||||
extern void ExecReScanModifyTable(ModifyTableState *node);
|
||||
|
||||
#endif /* NODEMODIFYTABLE_H */
|
24
deps/libpq/include/executor/nodeNestloop.h
vendored
Normal file
24
deps/libpq/include/executor/nodeNestloop.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeNestloop.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeNestloop.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODENESTLOOP_H
|
||||
#define NODENESTLOOP_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern NestLoopState *ExecInitNestLoop(NestLoop *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecNestLoop(NestLoopState *node);
|
||||
extern void ExecEndNestLoop(NestLoopState *node);
|
||||
extern void ExecReScanNestLoop(NestLoopState *node);
|
||||
|
||||
#endif /* NODENESTLOOP_H */
|
24
deps/libpq/include/executor/nodeRecursiveunion.h
vendored
Normal file
24
deps/libpq/include/executor/nodeRecursiveunion.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeRecursiveunion.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeRecursiveunion.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODERECURSIVEUNION_H
|
||||
#define NODERECURSIVEUNION_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern RecursiveUnionState *ExecInitRecursiveUnion(RecursiveUnion *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecRecursiveUnion(RecursiveUnionState *node);
|
||||
extern void ExecEndRecursiveUnion(RecursiveUnionState *node);
|
||||
extern void ExecReScanRecursiveUnion(RecursiveUnionState *node);
|
||||
|
||||
#endif /* NODERECURSIVEUNION_H */
|
26
deps/libpq/include/executor/nodeResult.h
vendored
Normal file
26
deps/libpq/include/executor/nodeResult.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeResult.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeResult.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODERESULT_H
|
||||
#define NODERESULT_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern ResultState *ExecInitResult(Result *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecResult(ResultState *node);
|
||||
extern void ExecEndResult(ResultState *node);
|
||||
extern void ExecResultMarkPos(ResultState *node);
|
||||
extern void ExecResultRestrPos(ResultState *node);
|
||||
extern void ExecReScanResult(ResultState *node);
|
||||
|
||||
#endif /* NODERESULT_H */
|
26
deps/libpq/include/executor/nodeSeqscan.h
vendored
Normal file
26
deps/libpq/include/executor/nodeSeqscan.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeSeqscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeSeqscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODESEQSCAN_H
|
||||
#define NODESEQSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern SeqScanState *ExecInitSeqScan(SeqScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecSeqScan(SeqScanState *node);
|
||||
extern void ExecEndSeqScan(SeqScanState *node);
|
||||
extern void ExecSeqMarkPos(SeqScanState *node);
|
||||
extern void ExecSeqRestrPos(SeqScanState *node);
|
||||
extern void ExecReScanSeqScan(SeqScanState *node);
|
||||
|
||||
#endif /* NODESEQSCAN_H */
|
24
deps/libpq/include/executor/nodeSetOp.h
vendored
Normal file
24
deps/libpq/include/executor/nodeSetOp.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeSetOp.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeSetOp.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODESETOP_H
|
||||
#define NODESETOP_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern SetOpState *ExecInitSetOp(SetOp *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecSetOp(SetOpState *node);
|
||||
extern void ExecEndSetOp(SetOpState *node);
|
||||
extern void ExecReScanSetOp(SetOpState *node);
|
||||
|
||||
#endif /* NODESETOP_H */
|
26
deps/libpq/include/executor/nodeSort.h
vendored
Normal file
26
deps/libpq/include/executor/nodeSort.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeSort.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeSort.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODESORT_H
|
||||
#define NODESORT_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern SortState *ExecInitSort(Sort *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecSort(SortState *node);
|
||||
extern void ExecEndSort(SortState *node);
|
||||
extern void ExecSortMarkPos(SortState *node);
|
||||
extern void ExecSortRestrPos(SortState *node);
|
||||
extern void ExecReScanSort(SortState *node);
|
||||
|
||||
#endif /* NODESORT_H */
|
27
deps/libpq/include/executor/nodeSubplan.h
vendored
Normal file
27
deps/libpq/include/executor/nodeSubplan.h
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeSubplan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeSubplan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODESUBPLAN_H
|
||||
#define NODESUBPLAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern SubPlanState *ExecInitSubPlan(SubPlan *subplan, PlanState *parent);
|
||||
|
||||
extern AlternativeSubPlanState *ExecInitAlternativeSubPlan(AlternativeSubPlan *asplan, PlanState *parent);
|
||||
|
||||
extern void ExecReScanSetParamPlan(SubPlanState *node, PlanState *parent);
|
||||
|
||||
extern void ExecSetParamPlan(SubPlanState *node, ExprContext *econtext);
|
||||
|
||||
#endif /* NODESUBPLAN_H */
|
24
deps/libpq/include/executor/nodeSubqueryscan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeSubqueryscan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeSubqueryscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeSubqueryscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODESUBQUERYSCAN_H
|
||||
#define NODESUBQUERYSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern SubqueryScanState *ExecInitSubqueryScan(SubqueryScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecSubqueryScan(SubqueryScanState *node);
|
||||
extern void ExecEndSubqueryScan(SubqueryScanState *node);
|
||||
extern void ExecReScanSubqueryScan(SubqueryScanState *node);
|
||||
|
||||
#endif /* NODESUBQUERYSCAN_H */
|
26
deps/libpq/include/executor/nodeTidscan.h
vendored
Normal file
26
deps/libpq/include/executor/nodeTidscan.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeTidscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeTidscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODETIDSCAN_H
|
||||
#define NODETIDSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern TidScanState *ExecInitTidScan(TidScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecTidScan(TidScanState *node);
|
||||
extern void ExecEndTidScan(TidScanState *node);
|
||||
extern void ExecTidMarkPos(TidScanState *node);
|
||||
extern void ExecTidRestrPos(TidScanState *node);
|
||||
extern void ExecReScanTidScan(TidScanState *node);
|
||||
|
||||
#endif /* NODETIDSCAN_H */
|
24
deps/libpq/include/executor/nodeUnique.h
vendored
Normal file
24
deps/libpq/include/executor/nodeUnique.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeUnique.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeUnique.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEUNIQUE_H
|
||||
#define NODEUNIQUE_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern UniqueState *ExecInitUnique(Unique *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecUnique(UniqueState *node);
|
||||
extern void ExecEndUnique(UniqueState *node);
|
||||
extern void ExecReScanUnique(UniqueState *node);
|
||||
|
||||
#endif /* NODEUNIQUE_H */
|
26
deps/libpq/include/executor/nodeValuesscan.h
vendored
Normal file
26
deps/libpq/include/executor/nodeValuesscan.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeValuesscan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeValuesscan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEVALUESSCAN_H
|
||||
#define NODEVALUESSCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern ValuesScanState *ExecInitValuesScan(ValuesScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecValuesScan(ValuesScanState *node);
|
||||
extern void ExecEndValuesScan(ValuesScanState *node);
|
||||
extern void ExecValuesMarkPos(ValuesScanState *node);
|
||||
extern void ExecValuesRestrPos(ValuesScanState *node);
|
||||
extern void ExecReScanValuesScan(ValuesScanState *node);
|
||||
|
||||
#endif /* NODEVALUESSCAN_H */
|
24
deps/libpq/include/executor/nodeWindowAgg.h
vendored
Normal file
24
deps/libpq/include/executor/nodeWindowAgg.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeWindowAgg.h
|
||||
* prototypes for nodeWindowAgg.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeWindowAgg.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEWINDOWAGG_H
|
||||
#define NODEWINDOWAGG_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern WindowAggState *ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecWindowAgg(WindowAggState *node);
|
||||
extern void ExecEndWindowAgg(WindowAggState *node);
|
||||
extern void ExecReScanWindowAgg(WindowAggState *node);
|
||||
|
||||
#endif /* NODEWINDOWAGG_H */
|
24
deps/libpq/include/executor/nodeWorktablescan.h
vendored
Normal file
24
deps/libpq/include/executor/nodeWorktablescan.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* nodeWorktablescan.h
|
||||
*
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/nodeWorktablescan.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef NODEWORKTABLESCAN_H
|
||||
#define NODEWORKTABLESCAN_H
|
||||
|
||||
#include "nodes/execnodes.h"
|
||||
|
||||
extern WorkTableScanState *ExecInitWorkTableScan(WorkTableScan *node, EState *estate, int eflags);
|
||||
extern TupleTableSlot *ExecWorkTableScan(WorkTableScanState *node);
|
||||
extern void ExecEndWorkTableScan(WorkTableScanState *node);
|
||||
extern void ExecReScanWorkTableScan(WorkTableScanState *node);
|
||||
|
||||
#endif /* NODEWORKTABLESCAN_H */
|
144
deps/libpq/include/executor/spi.h
vendored
Normal file
144
deps/libpq/include/executor/spi.h
vendored
Normal file
|
@ -0,0 +1,144 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* spi.h
|
||||
* Server Programming Interface public declarations
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/spi.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef SPI_H
|
||||
#define SPI_H
|
||||
|
||||
#include "nodes/parsenodes.h"
|
||||
#include "utils/portal.h"
|
||||
#include "utils/relcache.h"
|
||||
#include "utils/snapshot.h"
|
||||
|
||||
|
||||
typedef struct SPITupleTable
|
||||
{
|
||||
MemoryContext tuptabcxt; /* memory context of result table */
|
||||
uint32 alloced; /* # of alloced vals */
|
||||
uint32 free; /* # of free vals */
|
||||
TupleDesc tupdesc; /* tuple descriptor */
|
||||
HeapTuple *vals; /* tuples */
|
||||
} SPITupleTable;
|
||||
|
||||
/* Plans are opaque structs for standard users of SPI */
|
||||
typedef struct _SPI_plan *SPIPlanPtr;
|
||||
|
||||
#define SPI_ERROR_CONNECT (-1)
|
||||
#define SPI_ERROR_COPY (-2)
|
||||
#define SPI_ERROR_OPUNKNOWN (-3)
|
||||
#define SPI_ERROR_UNCONNECTED (-4)
|
||||
#define SPI_ERROR_CURSOR (-5) /* not used anymore */
|
||||
#define SPI_ERROR_ARGUMENT (-6)
|
||||
#define SPI_ERROR_PARAM (-7)
|
||||
#define SPI_ERROR_TRANSACTION (-8)
|
||||
#define SPI_ERROR_NOATTRIBUTE (-9)
|
||||
#define SPI_ERROR_NOOUTFUNC (-10)
|
||||
#define SPI_ERROR_TYPUNKNOWN (-11)
|
||||
|
||||
#define SPI_OK_CONNECT 1
|
||||
#define SPI_OK_FINISH 2
|
||||
#define SPI_OK_FETCH 3
|
||||
#define SPI_OK_UTILITY 4
|
||||
#define SPI_OK_SELECT 5
|
||||
#define SPI_OK_SELINTO 6
|
||||
#define SPI_OK_INSERT 7
|
||||
#define SPI_OK_DELETE 8
|
||||
#define SPI_OK_UPDATE 9
|
||||
#define SPI_OK_CURSOR 10
|
||||
#define SPI_OK_INSERT_RETURNING 11
|
||||
#define SPI_OK_DELETE_RETURNING 12
|
||||
#define SPI_OK_UPDATE_RETURNING 13
|
||||
#define SPI_OK_REWRITTEN 14
|
||||
|
||||
extern PGDLLIMPORT uint32 SPI_processed;
|
||||
extern PGDLLIMPORT Oid SPI_lastoid;
|
||||
extern PGDLLIMPORT SPITupleTable *SPI_tuptable;
|
||||
extern PGDLLIMPORT int SPI_result;
|
||||
|
||||
extern int SPI_connect(void);
|
||||
extern int SPI_finish(void);
|
||||
extern void SPI_push(void);
|
||||
extern void SPI_pop(void);
|
||||
extern bool SPI_push_conditional(void);
|
||||
extern void SPI_pop_conditional(bool pushed);
|
||||
extern void SPI_restore_connection(void);
|
||||
extern int SPI_execute(const char *src, bool read_only, long tcount);
|
||||
extern int SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,
|
||||
bool read_only, long tcount);
|
||||
extern int SPI_execute_plan_with_paramlist(SPIPlanPtr plan,
|
||||
ParamListInfo params,
|
||||
bool read_only, long tcount);
|
||||
extern int SPI_exec(const char *src, long tcount);
|
||||
extern int SPI_execp(SPIPlanPtr plan, Datum *Values, const char *Nulls,
|
||||
long tcount);
|
||||
extern int SPI_execute_snapshot(SPIPlanPtr plan,
|
||||
Datum *Values, const char *Nulls,
|
||||
Snapshot snapshot,
|
||||
Snapshot crosscheck_snapshot,
|
||||
bool read_only, bool fire_triggers, long tcount);
|
||||
extern int SPI_execute_with_args(const char *src,
|
||||
int nargs, Oid *argtypes,
|
||||
Datum *Values, const char *Nulls,
|
||||
bool read_only, long tcount);
|
||||
extern SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes);
|
||||
extern SPIPlanPtr SPI_prepare_cursor(const char *src, int nargs, Oid *argtypes,
|
||||
int cursorOptions);
|
||||
extern SPIPlanPtr SPI_prepare_params(const char *src,
|
||||
ParserSetupHook parserSetup,
|
||||
void *parserSetupArg,
|
||||
int cursorOptions);
|
||||
extern SPIPlanPtr SPI_saveplan(SPIPlanPtr plan);
|
||||
extern int SPI_freeplan(SPIPlanPtr plan);
|
||||
|
||||
extern Oid SPI_getargtypeid(SPIPlanPtr plan, int argIndex);
|
||||
extern int SPI_getargcount(SPIPlanPtr plan);
|
||||
extern bool SPI_is_cursor_plan(SPIPlanPtr plan);
|
||||
extern bool SPI_plan_is_valid(SPIPlanPtr plan);
|
||||
extern const char *SPI_result_code_string(int code);
|
||||
|
||||
extern HeapTuple SPI_copytuple(HeapTuple tuple);
|
||||
extern HeapTupleHeader SPI_returntuple(HeapTuple tuple, TupleDesc tupdesc);
|
||||
extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts,
|
||||
int *attnum, Datum *Values, const char *Nulls);
|
||||
extern int SPI_fnumber(TupleDesc tupdesc, const char *fname);
|
||||
extern char *SPI_fname(TupleDesc tupdesc, int fnumber);
|
||||
extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
|
||||
extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull);
|
||||
extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);
|
||||
extern Oid SPI_gettypeid(TupleDesc tupdesc, int fnumber);
|
||||
extern char *SPI_getrelname(Relation rel);
|
||||
extern char *SPI_getnspname(Relation rel);
|
||||
extern void *SPI_palloc(Size size);
|
||||
extern void *SPI_repalloc(void *pointer, Size size);
|
||||
extern void SPI_pfree(void *pointer);
|
||||
extern void SPI_freetuple(HeapTuple pointer);
|
||||
extern void SPI_freetuptable(SPITupleTable *tuptable);
|
||||
|
||||
extern Portal SPI_cursor_open(const char *name, SPIPlanPtr plan,
|
||||
Datum *Values, const char *Nulls, bool read_only);
|
||||
extern Portal SPI_cursor_open_with_args(const char *name,
|
||||
const char *src,
|
||||
int nargs, Oid *argtypes,
|
||||
Datum *Values, const char *Nulls,
|
||||
bool read_only, int cursorOptions);
|
||||
extern Portal SPI_cursor_open_with_paramlist(const char *name, SPIPlanPtr plan,
|
||||
ParamListInfo params, bool read_only);
|
||||
extern Portal SPI_cursor_find(const char *name);
|
||||
extern void SPI_cursor_fetch(Portal portal, bool forward, long count);
|
||||
extern void SPI_cursor_move(Portal portal, bool forward, long count);
|
||||
extern void SPI_scroll_cursor_fetch(Portal, FetchDirection direction, long count);
|
||||
extern void SPI_scroll_cursor_move(Portal, FetchDirection direction, long count);
|
||||
extern void SPI_cursor_close(Portal portal);
|
||||
|
||||
extern void AtEOXact_SPI(bool isCommit);
|
||||
extern void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid);
|
||||
|
||||
#endif /* SPI_H */
|
75
deps/libpq/include/executor/spi_priv.h
vendored
Normal file
75
deps/libpq/include/executor/spi_priv.h
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* spi_priv.h
|
||||
* Server Programming Interface private declarations
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/spi_priv.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef SPI_PRIV_H
|
||||
#define SPI_PRIV_H
|
||||
|
||||
#include "executor/spi.h"
|
||||
|
||||
|
||||
#define _SPI_PLAN_MAGIC 569278163
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* current results */
|
||||
uint32 processed; /* by Executor */
|
||||
Oid lastoid;
|
||||
SPITupleTable *tuptable;
|
||||
|
||||
MemoryContext procCxt; /* procedure context */
|
||||
MemoryContext execCxt; /* executor context */
|
||||
MemoryContext savedcxt; /* context of SPI_connect's caller */
|
||||
SubTransactionId connectSubid; /* ID of connecting subtransaction */
|
||||
} _SPI_connection;
|
||||
|
||||
/*
|
||||
* SPI plans have two states: saved or unsaved.
|
||||
*
|
||||
* For an unsaved plan, the _SPI_plan struct and all its subsidiary data are in
|
||||
* a dedicated memory context identified by plancxt. An unsaved plan is good
|
||||
* at most for the current transaction, since the locks that protect it from
|
||||
* schema changes will be lost at end of transaction. Hence the plancxt is
|
||||
* always a transient one.
|
||||
*
|
||||
* For a saved plan, the _SPI_plan struct and the argument type array are in
|
||||
* the plancxt (which can be really small). All the other subsidiary state
|
||||
* is in plancache entries identified by plancache_list (note: the list cells
|
||||
* themselves are in plancxt). We rely on plancache.c to keep the cache
|
||||
* entries up-to-date as needed. The plancxt is a child of CacheMemoryContext
|
||||
* since it should persist until explicitly destroyed.
|
||||
*
|
||||
* To avoid redundant coding, the representation of unsaved plans matches
|
||||
* that of saved plans, ie, plancache_list is a list of CachedPlanSource
|
||||
* structs which in turn point to CachedPlan structs. However, in an unsaved
|
||||
* plan all these structs are just created by spi.c and are not known to
|
||||
* plancache.c. We don't try very hard to make all their fields valid,
|
||||
* only the ones spi.c actually uses.
|
||||
*
|
||||
* Note: if the original query string contained only whitespace and comments,
|
||||
* the plancache_list will be NIL and so there is no place to store the
|
||||
* query string. We don't care about that, but we do care about the
|
||||
* argument type array, which is why it's seemingly-redundantly stored.
|
||||
*/
|
||||
typedef struct _SPI_plan
|
||||
{
|
||||
int magic; /* should equal _SPI_PLAN_MAGIC */
|
||||
bool saved; /* saved or unsaved plan? */
|
||||
List *plancache_list; /* one CachedPlanSource per parsetree */
|
||||
MemoryContext plancxt; /* Context containing _SPI_plan and data */
|
||||
int cursor_options; /* Cursor options used for planning */
|
||||
int nargs; /* number of plan arguments */
|
||||
Oid *argtypes; /* Argument types (NULL if nargs is 0) */
|
||||
ParserSetupHook parserSetup; /* alternative parameter spec method */
|
||||
void *parserSetupArg;
|
||||
} _SPI_plan;
|
||||
|
||||
#endif /* SPI_PRIV_H */
|
29
deps/libpq/include/executor/tstoreReceiver.h
vendored
Normal file
29
deps/libpq/include/executor/tstoreReceiver.h
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* tstoreReceiver.h
|
||||
* prototypes for tstoreReceiver.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/tstoreReceiver.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TSTORE_RECEIVER_H
|
||||
#define TSTORE_RECEIVER_H
|
||||
|
||||
#include "tcop/dest.h"
|
||||
#include "utils/tuplestore.h"
|
||||
|
||||
|
||||
extern DestReceiver *CreateTuplestoreDestReceiver(void);
|
||||
|
||||
extern void SetTuplestoreDestReceiverParams(DestReceiver *self,
|
||||
Tuplestorestate *tStore,
|
||||
MemoryContext tContext,
|
||||
bool detoast);
|
||||
|
||||
#endif /* TSTORE_RECEIVER_H */
|
173
deps/libpq/include/executor/tuptable.h
vendored
Normal file
173
deps/libpq/include/executor/tuptable.h
vendored
Normal file
|
@ -0,0 +1,173 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* tuptable.h
|
||||
* tuple table support stuff
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/executor/tuptable.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef TUPTABLE_H
|
||||
#define TUPTABLE_H
|
||||
|
||||
#include "access/htup.h"
|
||||
#include "access/tupdesc.h"
|
||||
#include "storage/buf.h"
|
||||
|
||||
/*----------
|
||||
* The executor stores tuples in a "tuple table" which is a List of
|
||||
* independent TupleTableSlots. There are several cases we need to handle:
|
||||
* 1. physical tuple in a disk buffer page
|
||||
* 2. physical tuple constructed in palloc'ed memory
|
||||
* 3. "minimal" physical tuple constructed in palloc'ed memory
|
||||
* 4. "virtual" tuple consisting of Datum/isnull arrays
|
||||
*
|
||||
* The first two cases are similar in that they both deal with "materialized"
|
||||
* tuples, but resource management is different. For a tuple in a disk page
|
||||
* we need to hold a pin on the buffer until the TupleTableSlot's reference
|
||||
* to the tuple is dropped; while for a palloc'd tuple we usually want the
|
||||
* tuple pfree'd when the TupleTableSlot's reference is dropped.
|
||||
*
|
||||
* A "minimal" tuple is handled similarly to a palloc'd regular tuple.
|
||||
* At present, minimal tuples never are stored in buffers, so there is no
|
||||
* parallel to case 1. Note that a minimal tuple has no "system columns".
|
||||
* (Actually, it could have an OID, but we have no need to access the OID.)
|
||||
*
|
||||
* A "virtual" tuple is an optimization used to minimize physical data
|
||||
* copying in a nest of plan nodes. Any pass-by-reference Datums in the
|
||||
* tuple point to storage that is not directly associated with the
|
||||
* TupleTableSlot; generally they will point to part of a tuple stored in
|
||||
* a lower plan node's output TupleTableSlot, or to a function result
|
||||
* constructed in a plan node's per-tuple econtext. It is the responsibility
|
||||
* of the generating plan node to be sure these resources are not released
|
||||
* for as long as the virtual tuple needs to be valid. We only use virtual
|
||||
* tuples in the result slots of plan nodes --- tuples to be copied anywhere
|
||||
* else need to be "materialized" into physical tuples. Note also that a
|
||||
* virtual tuple does not have any "system columns".
|
||||
*
|
||||
* It is also possible for a TupleTableSlot to hold both physical and minimal
|
||||
* copies of a tuple. This is done when the slot is requested to provide
|
||||
* the format other than the one it currently holds. (Originally we attempted
|
||||
* to handle such requests by replacing one format with the other, but that
|
||||
* had the fatal defect of invalidating any pass-by-reference Datums pointing
|
||||
* into the existing slot contents.) Both copies must contain identical data
|
||||
* payloads when this is the case.
|
||||
*
|
||||
* The Datum/isnull arrays of a TupleTableSlot serve double duty. When the
|
||||
* slot contains a virtual tuple, they are the authoritative data. When the
|
||||
* slot contains a physical tuple, the arrays contain data extracted from
|
||||
* the tuple. (In this state, any pass-by-reference Datums point into
|
||||
* the physical tuple.) The extracted information is built "lazily",
|
||||
* ie, only as needed. This serves to avoid repeated extraction of data
|
||||
* from the physical tuple.
|
||||
*
|
||||
* A TupleTableSlot can also be "empty", holding no valid data. This is
|
||||
* the only valid state for a freshly-created slot that has not yet had a
|
||||
* tuple descriptor assigned to it. In this state, tts_isempty must be
|
||||
* TRUE, tts_shouldFree FALSE, tts_tuple NULL, tts_buffer InvalidBuffer,
|
||||
* and tts_nvalid zero.
|
||||
*
|
||||
* The tupleDescriptor is simply referenced, not copied, by the TupleTableSlot
|
||||
* code. The caller of ExecSetSlotDescriptor() is responsible for providing
|
||||
* a descriptor that will live as long as the slot does. (Typically, both
|
||||
* slots and descriptors are in per-query memory and are freed by memory
|
||||
* context deallocation at query end; so it's not worth providing any extra
|
||||
* mechanism to do more. However, the slot will increment the tupdesc
|
||||
* reference count if a reference-counted tupdesc is supplied.)
|
||||
*
|
||||
* When tts_shouldFree is true, the physical tuple is "owned" by the slot
|
||||
* and should be freed when the slot's reference to the tuple is dropped.
|
||||
*
|
||||
* If tts_buffer is not InvalidBuffer, then the slot is holding a pin
|
||||
* on the indicated buffer page; drop the pin when we release the
|
||||
* slot's reference to that buffer. (tts_shouldFree should always be
|
||||
* false in such a case, since presumably tts_tuple is pointing at the
|
||||
* buffer page.)
|
||||
*
|
||||
* tts_nvalid indicates the number of valid columns in the tts_values/isnull
|
||||
* arrays. When the slot is holding a "virtual" tuple this must be equal
|
||||
* to the descriptor's natts. When the slot is holding a physical tuple
|
||||
* this is equal to the number of columns we have extracted (we always
|
||||
* extract columns from left to right, so there are no holes).
|
||||
*
|
||||
* tts_values/tts_isnull are allocated when a descriptor is assigned to the
|
||||
* slot; they are of length equal to the descriptor's natts.
|
||||
*
|
||||
* tts_mintuple must always be NULL if the slot does not hold a "minimal"
|
||||
* tuple. When it does, tts_mintuple points to the actual MinimalTupleData
|
||||
* object (the thing to be pfree'd if tts_shouldFreeMin is true). If the slot
|
||||
* has only a minimal and not also a regular physical tuple, then tts_tuple
|
||||
* points at tts_minhdr and the fields of that struct are set correctly
|
||||
* for access to the minimal tuple; in particular, tts_minhdr.t_data points
|
||||
* MINIMAL_TUPLE_OFFSET bytes before tts_mintuple. This allows column
|
||||
* extraction to treat the case identically to regular physical tuples.
|
||||
*
|
||||
* tts_slow/tts_off are saved state for slot_deform_tuple, and should not
|
||||
* be touched by any other code.
|
||||
*----------
|
||||
*/
|
||||
typedef struct TupleTableSlot
|
||||
{
|
||||
NodeTag type;
|
||||
bool tts_isempty; /* true = slot is empty */
|
||||
bool tts_shouldFree; /* should pfree tts_tuple? */
|
||||
bool tts_shouldFreeMin; /* should pfree tts_mintuple? */
|
||||
bool tts_slow; /* saved state for slot_deform_tuple */
|
||||
HeapTuple tts_tuple; /* physical tuple, or NULL if virtual */
|
||||
TupleDesc tts_tupleDescriptor; /* slot's tuple descriptor */
|
||||
MemoryContext tts_mcxt; /* slot itself is in this context */
|
||||
Buffer tts_buffer; /* tuple's buffer, or InvalidBuffer */
|
||||
int tts_nvalid; /* # of valid values in tts_values */
|
||||
Datum *tts_values; /* current per-attribute values */
|
||||
bool *tts_isnull; /* current per-attribute isnull flags */
|
||||
MinimalTuple tts_mintuple; /* minimal tuple, or NULL if none */
|
||||
HeapTupleData tts_minhdr; /* workspace for minimal-tuple-only case */
|
||||
long tts_off; /* saved state for slot_deform_tuple */
|
||||
} TupleTableSlot;
|
||||
|
||||
#define TTS_HAS_PHYSICAL_TUPLE(slot) \
|
||||
((slot)->tts_tuple != NULL && (slot)->tts_tuple != &((slot)->tts_minhdr))
|
||||
|
||||
/*
|
||||
* TupIsNull -- is a TupleTableSlot empty?
|
||||
*/
|
||||
#define TupIsNull(slot) \
|
||||
((slot) == NULL || (slot)->tts_isempty)
|
||||
|
||||
/* in executor/execTuples.c */
|
||||
extern TupleTableSlot *MakeTupleTableSlot(void);
|
||||
extern TupleTableSlot *ExecAllocTableSlot(List **tupleTable);
|
||||
extern void ExecResetTupleTable(List *tupleTable, bool shouldFree);
|
||||
extern TupleTableSlot *MakeSingleTupleTableSlot(TupleDesc tupdesc);
|
||||
extern void ExecDropSingleTupleTableSlot(TupleTableSlot *slot);
|
||||
extern void ExecSetSlotDescriptor(TupleTableSlot *slot, TupleDesc tupdesc);
|
||||
extern TupleTableSlot *ExecStoreTuple(HeapTuple tuple,
|
||||
TupleTableSlot *slot,
|
||||
Buffer buffer,
|
||||
bool shouldFree);
|
||||
extern TupleTableSlot *ExecStoreMinimalTuple(MinimalTuple mtup,
|
||||
TupleTableSlot *slot,
|
||||
bool shouldFree);
|
||||
extern TupleTableSlot *ExecClearTuple(TupleTableSlot *slot);
|
||||
extern TupleTableSlot *ExecStoreVirtualTuple(TupleTableSlot *slot);
|
||||
extern TupleTableSlot *ExecStoreAllNullTuple(TupleTableSlot *slot);
|
||||
extern HeapTuple ExecCopySlotTuple(TupleTableSlot *slot);
|
||||
extern MinimalTuple ExecCopySlotMinimalTuple(TupleTableSlot *slot);
|
||||
extern HeapTuple ExecFetchSlotTuple(TupleTableSlot *slot);
|
||||
extern MinimalTuple ExecFetchSlotMinimalTuple(TupleTableSlot *slot);
|
||||
extern Datum ExecFetchSlotTupleDatum(TupleTableSlot *slot);
|
||||
extern HeapTuple ExecMaterializeSlot(TupleTableSlot *slot);
|
||||
extern TupleTableSlot *ExecCopySlot(TupleTableSlot *dstslot,
|
||||
TupleTableSlot *srcslot);
|
||||
|
||||
/* in access/common/heaptuple.c */
|
||||
extern Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull);
|
||||
extern void slot_getallattrs(TupleTableSlot *slot);
|
||||
extern void slot_getsomeattrs(TupleTableSlot *slot, int attnum);
|
||||
extern bool slot_attisnull(TupleTableSlot *slot, int attnum);
|
||||
|
||||
#endif /* TUPTABLE_H */
|
Loading…
Add table
Add a link
Reference in a new issue