PostgreSQL Source Code: src/include/executor/executor.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef EXECUTOR_H
15#define EXECUTOR_H
16
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65#define EXEC_FLAG_EXPLAIN_ONLY 0x0001
66#define EXEC_FLAG_EXPLAIN_GENERIC 0x0002
67#define EXEC_FLAG_REWIND 0x0004
68#define EXEC_FLAG_BACKWARD 0x0008
69#define EXEC_FLAG_MARK 0x0010
70#define EXEC_FLAG_SKIP_TRIGGERS 0x0020
71#define EXEC_FLAG_WITH_NO_DATA 0x0040
72
73
74
77
78
83
84
87
88
91
92
94 List *rtePermInfos,
95 bool ereport_on_violation);
97
98
99
100
101
102struct Path;
103
110
111
112
113
116 Oid table_oid,
118
119
120
121
123 int numCols,
125 const Oid *eqOperators,
126 const Oid *collations,
129 const Oid *eqOperators,
130 Oid **eqFuncOids,
135 int numCols,
137 const Oid *eqfuncoids,
139 Oid *collations,
140 long nbuckets,
141 Size additionalsize,
145 bool use_variable_hash_iv);
159
160#ifndef FRONTEND
161
162
163
164static inline size_t
166{
168}
169
170
171
172
175{
177}
178
179
180
181
182
183
184
185
186
187static inline void *
189{
192 else
193 return NULL;
194}
195#endif
196
197
198
199
206 const char *attrName);
208 const char *attrName);
211
212
213
214
215
216
217
218
219#ifndef FRONTEND
220static inline Datum
222{
225}
226#endif
227
228
229
230
243 List *rteperminfos, bool ereport_on_violation);
245 List *mergeActions);
248 Index resultRelationIndex,
250 int instrument_options);
259 List *notnull_virtual_attrs);
269 int maxfieldlen);
276 Plan *subplan, List *auxrowmarks,
277 int epqParam, List *resultRelations);
279 Plan *subplan, List *auxrowmarks);
282
283#define EvalPlanQualSetSlot(epqstate, slot) ((epqstate)->origslot = (slot))
288
289
290
291
298
299
300
301
302
303
304
305
306#ifndef FRONTEND
309{
310 if (node->chgParam != NULL)
311 ExecReScan(node);
312
314}
315#endif
316
317
318
319
326 bool doSort, bool doHash, bool nullcheck);
330 Oid *collations,
331 int numCols,
337 const Oid *hashfunc_oids,
338 const List *collations,
339 const List *hash_exprs,
340 const bool *opstrict, PlanState *parent,
341 uint32 init_value, bool keep_nulls);
344 int numCols,
346 const Oid *eqfunctions,
347 const Oid *collations,
352 const Oid *eqfunctions,
353 const Oid *collations,
354 const List *param_exprs,
362 bool evalTargetList,
363 List *targetColnos,
372
373
374
375
376
377
378
379
380
381
382
383
384
385#ifndef FRONTEND
386static inline Datum
389 bool *isNull)
390{
391 return state->evalfunc(state, econtext, isNull);
392}
393#endif
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410#ifndef FRONTEND
411static inline void
414{
416
417 retDatum = state->evalfunc(state, econtext, NULL);
418
420}
421#endif
422
423
424
425
426
427
428#ifndef FRONTEND
429static inline Datum
432 bool *isNull)
433{
436
438 retDatum = state->evalfunc(state, econtext, isNull);
440 return retDatum;
441}
442#endif
443
444
445
446
447
448
449
450#ifndef FRONTEND
451static inline void
454{
456
460}
461#endif
462
463
464
465
466
467
468
469
470
471
472
473
474
475#ifndef FRONTEND
478{
482
483
484
485
486
488
489
491
492
493
494
495
496 slot->tts_flags &= ~TTS_FLAG_EMPTY;
498
499 return slot;
500}
501#endif
502
503
504
505
506
507
508
509
510
511#ifndef FRONTEND
512static inline bool
514{
516 bool isnull;
517
518
519 if (state == NULL)
520 return true;
521
522
524
526
527
529
531}
532#endif
533
534
535
536
537
538#ifndef FRONTEND
539static inline bool
541{
543
544
546 return ret;
547}
548#endif
549
551
552
553
554
561 bool randomAccess);
567 bool *isNull,
569
570
571
572
575
581
582
583
584
603
605{
609
616
617
618
619
620
621
622#define do_text_output_oneline(tstate, str_to_emit) \
623 do { \
624 Datum values_[1]; \
625 bool isnull_[1]; \
626 values_[0] = PointerGetDatum(cstring_to_text(str_to_emit)); \
627 isnull_[0] = false; \
628 do_tup_output(tstate, values_, isnull_); \
629 pfree(DatumGetPointer(values_[0])); \
630 } while (0)
631
632
633
634
635
643
644#define ResetExprContext(econtext) \
645 MemoryContextReset((econtext)->ecxt_per_tuple_memory)
646
648
649
650#define GetPerTupleExprContext(estate) \
651 ((estate)->es_per_tuple_exprcontext ? \
652 (estate)->es_per_tuple_exprcontext : \
653 MakePerTupleExprContext(estate))
654
655#define GetPerTupleMemoryContext(estate) \
656 (GetPerTupleExprContext(estate)->ecxt_per_tuple_memory)
657
658
659#define ResetPerTupleExprContext(estate) \
660 do { \
661 if ((estate)->es_per_tuple_exprcontext) \
662 ResetExprContext((estate)->es_per_tuple_exprcontext); \
663 } while (0)
664
668 bool *isfixed);
670 int nplans);
680
682
684
689
692{
694}
695
697 bool isResultRel);
700
702
709
711 bool *isNull);
713 bool *isNull);
714
717
724
730
731
732
733
738 bool update,
739 bool noDupErr,
740 bool *specConflict, List *arbiterIndexes,
741 bool onlySummarizing);
746 List *arbiterIndexes);
751 EState *estate, bool newIndex);
752
753
754
755
762
772
775
776
777
778
783 Oid resultoid,
784 bool missing_ok,
785 bool update_cache);
786
787#endif
static Datum values[MAXATTR]
#define PG_USED_FOR_ASSERTS_ONLY
void(* ExprContextCallbackFunction)(Datum arg)
TupleTableSlot *(* ExecProcNodeMtd)(struct PlanState *pstate)
struct TupleHashEntryData TupleHashEntryData
static MinimalTuple TupleHashEntryGetTuple(TupleHashEntry entry)
TupleDesc ExecGetResultType(PlanState *planstate)
Relation ExecGetRangeTableRelation(EState *estate, Index rti, bool isResultRel)
bool RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode, TupleTableSlot *searchslot, TupleTableSlot *outslot)
bool RelationFindReplTupleByIndex(Relation rel, Oid idxoid, LockTupleMode lockmode, TupleTableSlot *searchslot, TupleTableSlot *outslot)
LockTupleMode ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo)
ResultRelInfo * ExecLookupResultRelByOid(ModifyTableState *node, Oid resultoid, bool missing_ok, bool update_cache)
ExprState * execTuplesMatchPrepare(TupleDesc desc, int numCols, const AttrNumber *keyColIdx, const Oid *eqOperators, const Oid *collations, PlanState *parent)
ExecRowMark * ExecFindRowMark(EState *estate, Index rti, bool missing_ok)
TupleConversionMap * ExecGetRootToChildMap(ResultRelInfo *resultRelInfo, EState *estate)
ExecAuxRowMark * ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist)
ResultRelInfo * ExecGetTriggerResultRel(EState *estate, Oid relid, ResultRelInfo *rootRelInfo)
void CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation, List *mergeActions)
void ExecAssignScanProjectionInfoWithVarno(ScanState *node, int varno)
PGDLLIMPORT ExecutorEnd_hook_type ExecutorEnd_hook
TupleTableSlot * EvalPlanQualSlot(EPQState *epqstate, Relation relation, Index rti)
Bitmapset * ExecGetExtraUpdatedCols(ResultRelInfo *relinfo, EState *estate)
void ExecSimpleRelationDelete(ResultRelInfo *resultRelInfo, EState *estate, EPQState *epqstate, TupleTableSlot *searchslot)
void CheckSubscriptionRelkind(char relkind, const char *nspname, const char *relname)
void EvalPlanQualBegin(EPQState *epqstate)
Bitmapset * ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate)
TupleTableSlot * ExecGetTriggerNewSlot(EState *estate, ResultRelInfo *relInfo)
PGDLLIMPORT ExecutorStart_hook_type ExecutorStart_hook
char * ExecBuildSlotValueDescription(Oid reloid, TupleTableSlot *slot, TupleDesc tupdesc, Bitmapset *modifiedCols, int maxfieldlen)
ExprState * ExecBuildHash32FromAttrs(TupleDesc desc, const TupleTableSlotOps *ops, FmgrInfo *hashfunctions, Oid *collations, int numCols, AttrNumber *keyColIdx, PlanState *parent, uint32 init_value)
void ReScanExprContext(ExprContext *econtext)
static TupleTableSlot * ExecProject(ProjectionInfo *projInfo)
bool ExecPartitionCheck(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, bool emitError)
static void * TupleHashEntryGetAdditional(TupleHashTable hashtable, TupleHashEntry entry)
ExprState * ExecInitExpr(Expr *node, PlanState *parent)
JunkFilter * ExecInitJunkFilterConversion(List *targetList, TupleDesc cleanTupType, TupleTableSlot *slot)
void do_tup_output(TupOutputState *tstate, const Datum *values, const bool *isnull)
ExprState * ExecPrepareExpr(Expr *node, EState *estate)
bool ExecCheck(ExprState *state, ExprContext *econtext)
ExprContext * CreateExprContext(EState *estate)
ExprState * ExecInitCheck(List *qual, PlanState *parent)
SetExprState * ExecInitFunctionResultSet(Expr *expr, ExprContext *econtext, PlanState *parent)
void execTuplesHashPrepare(int numCols, const Oid *eqOperators, Oid **eqFuncOids, FmgrInfo **hashFunctions)
void(* ExecutorFinish_hook_type)(QueryDesc *queryDesc)
TupleConversionMap * ExecGetChildToRootMap(ResultRelInfo *resultRelInfo)
ExprContext * CreateStandaloneExprContext(void)
void ExecutorEnd(QueryDesc *queryDesc)
void EvalPlanQualInit(EPQState *epqstate, EState *parentestate, Plan *subplan, List *auxrowmarks, int epqParam, List *resultRelations)
TupleTableSlot * ExecGetTriggerOldSlot(EState *estate, ResultRelInfo *relInfo)
TupleDesc ExecCleanTypeFromTL(List *targetList)
void ExecWithCheckOptions(WCOKind kind, ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
int executor_errposition(EState *estate, int location)
void ExecInitResultSlot(PlanState *planstate, const TupleTableSlotOps *tts_ops)
ProjectionInfo * ExecBuildProjectionInfo(List *targetList, ExprContext *econtext, TupleTableSlot *slot, PlanState *parent, TupleDesc inputDesc)
void ExecTypeSetColNames(TupleDesc typeInfo, List *namesList)
TupleHashEntry LookupTupleHashEntryHash(TupleHashTable hashtable, TupleTableSlot *slot, bool *isnew, uint32 hash)
bool ExecSupportsMarkRestore(struct Path *pathnode)
static RangeTblEntry * exec_rt_fetch(Index rti, EState *estate)
Tuplestorestate * ExecMakeTableFunctionResult(SetExprState *setexpr, ExprContext *econtext, MemoryContext argContext, TupleDesc expectedDesc, bool randomAccess)
Datum GetAttributeByNum(HeapTupleHeader tuple, AttrNumber attrno, bool *isNull)
void FreeExprContext(ExprContext *econtext, bool isCommit)
void ExecInitRangeTable(EState *estate, List *rangeTable, List *permInfos, Bitmapset *unpruned_relids)
TupleTableSlot * ExecFilterJunk(JunkFilter *junkfilter, TupleTableSlot *slot)
Node * MultiExecProcNode(PlanState *node)
AttrNumber ExecFindJunkAttributeInTlist(List *targetlist, const char *attrName)
Bitmapset * ExecGetUpdatedCols(ResultRelInfo *relinfo, EState *estate)
TupleTableSlot * ExecGetUpdateNewTuple(ResultRelInfo *relinfo, TupleTableSlot *planSlot, TupleTableSlot *oldSlot)
const TupleTableSlotOps * ExecGetCommonSlotOps(PlanState **planstates, int nplans)
void ExecInitResultRelation(EState *estate, ResultRelInfo *resultRelInfo, Index rti)
void end_tup_output(TupOutputState *tstate)
void InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, Index resultRelationIndex, ResultRelInfo *partition_root_rri, int instrument_options)
void ExecMarkPos(PlanState *node)
void ExecSetTupleBound(int64 tuples_needed, PlanState *child_node)
TupleTableSlot * ExecScan(ScanState *node, ExecScanAccessMtd accessMtd, ExecScanRecheckMtd recheckMtd)
Datum ExecMakeFunctionResultSet(SetExprState *fcache, ExprContext *econtext, MemoryContext argContext, bool *isNull, ExprDoneCond *isDone)
void standard_ExecutorStart(QueryDesc *queryDesc, int eflags)
void ExecCreateScanSlotFromOuterPlan(EState *estate, ScanState *scanstate, const TupleTableSlotOps *tts_ops)
void ExecutorFinish(QueryDesc *queryDesc)
void ExecEndNode(PlanState *node)
JunkFilter * ExecInitJunkFilter(List *targetList, TupleTableSlot *slot)
void ExecSimpleRelationUpdate(ResultRelInfo *resultRelInfo, EState *estate, EPQState *epqstate, TupleTableSlot *searchslot, TupleTableSlot *slot)
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
TupleHashEntry LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot, bool *isnew, uint32 *hash)
void EvalPlanQualEnd(EPQState *epqstate)
void ExecInitResultTypeTL(PlanState *planstate)
void EvalPlanQualSetPlan(EPQState *epqstate, Plan *subplan, List *auxrowmarks)
void CheckCmdReplicaIdentity(Relation rel, CmdType cmd)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
ExprState * ExecBuildAggTrans(AggState *aggstate, struct AggStatePerPhaseData *phase, bool doSort, bool doHash, bool nullcheck)
void(* ExecutorRun_hook_type)(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
void ExecSimpleRelationInsert(ResultRelInfo *resultRelInfo, EState *estate, TupleTableSlot *slot)
AttrNumber ExecFindJunkAttribute(JunkFilter *junkfilter, const char *attrName)
PGDLLIMPORT ExecutorFinish_hook_type ExecutorFinish_hook
void ExecutorRewind(QueryDesc *queryDesc)
void do_text_output_multiline(TupOutputState *tstate, const char *txt)
void ExecShutdownNode(PlanState *node)
void ExecAssignExprContext(EState *estate, PlanState *planstate)
void ExecutorStart(QueryDesc *queryDesc, int eflags)
ExprState * ExecPrepareQual(List *qual, EState *estate)
AttrNumber ExecRelGenVirtualNotNull(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, List *notnull_virtual_attrs)
SetExprState * ExecInitTableFunctionResult(Expr *expr, ExprContext *econtext, PlanState *parent)
ExprState * ExecInitQual(List *qual, PlanState *parent)
TupleTableSlot * EvalPlanQual(EPQState *epqstate, Relation relation, Index rti, TupleTableSlot *inputslot)
void ExecAssignProjectionInfo(PlanState *planstate, TupleDesc inputDesc)
void(* ExecutorStart_hook_type)(QueryDesc *queryDesc, int eflags)
static bool ExecQual(ExprState *state, ExprContext *econtext)
ExprContext * MakePerTupleExprContext(EState *estate)
void UnregisterExprContextCallback(ExprContext *econtext, ExprContextCallbackFunction function, Datum arg)
void ExecAssignScanType(ScanState *scanstate, TupleDesc tupDesc)
bool(* ExecScanRecheckMtd)(ScanState *node, TupleTableSlot *slot)
const TupleTableSlotOps * ExecGetCommonChildSlotOps(PlanState *ps)
TupleTableSlot * ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
bool(* ExecutorCheckPerms_hook_type)(List *rangeTable, List *rtePermInfos, bool ereport_on_violation)
uint32 TupleHashTableHash(TupleHashTable hashtable, TupleTableSlot *slot)
bool EvalPlanQualFetchRowMark(EPQState *epqstate, Index rti, TupleTableSlot *slot)
List * ExecInitExprList(List *nodes, PlanState *parent)
void ExecConditionalAssignProjectionInfo(PlanState *planstate, TupleDesc inputDesc, int varno)
void(* ExecutorEnd_hook_type)(QueryDesc *queryDesc)
void ExecInitResultTupleSlotTL(PlanState *planstate, const TupleTableSlotOps *tts_ops)
void ExecCloseIndices(ResultRelInfo *resultRelInfo)
void RegisterExprContextCallback(ExprContext *econtext, ExprContextCallbackFunction function, Datum arg)
static bool ExecQualAndReset(ExprState *state, ExprContext *econtext)
ExprState * ExecInitExprWithParams(Expr *node, ParamListInfo ext_params)
void ExecAssignScanProjectionInfo(ScanState *node)
int ExecTargetListLength(List *targetlist)
ProjectionInfo * ExecBuildUpdateProjection(List *targetList, bool evalTargetList, List *targetColnos, TupleDesc relDesc, ExprContext *econtext, TupleTableSlot *slot, PlanState *parent)
void FreeExecutorState(EState *estate)
struct TupOutputState TupOutputState
static size_t TupleHashEntrySize(void)
bool ExecRelationIsTargetRelation(EState *estate, Index scanrelid)
ExprState * ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc, const TupleTableSlotOps *lops, const TupleTableSlotOps *rops, int numCols, const AttrNumber *keyColIdx, const Oid *eqfunctions, const Oid *collations, PlanState *parent)
TupleHashEntry FindTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot, ExprState *eqcomp, ExprState *hashexpr)
void ExecCloseResultRelations(EState *estate)
static TupleTableSlot * ExecProcNode(PlanState *node)
TupleTableSlot * ExecGetAllNullSlot(EState *estate, ResultRelInfo *relInfo)
bool ExecMaterializesOutput(NodeTag plantype)
void ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative)
int ExecCleanTargetListLength(List *targetlist)
ExprContext * CreateWorkExprContext(EState *estate)
TupOutputState * begin_tup_output_tupdesc(DestReceiver *dest, TupleDesc tupdesc, const TupleTableSlotOps *tts_ops)
TupleTableSlot *(* ExecScanAccessMtd)(ScanState *node)
void UpdateChangedParamSet(PlanState *node, Bitmapset *newchg)
void ExecScanReScan(ScanState *node)
bool ExecSupportsBackwardScan(Plan *node)
const TupleTableSlotOps * ExecGetResultSlotOps(PlanState *planstate, bool *isfixed)
Datum GetAttributeByName(HeapTupleHeader tuple, const char *attname, bool *isNull)
TupleHashTable BuildTupleHashTable(PlanState *parent, TupleDesc inputDesc, const TupleTableSlotOps *inputOps, int numCols, AttrNumber *keyColIdx, const Oid *eqfuncoids, FmgrInfo *hashfunctions, Oid *collations, long nbuckets, Size additionalsize, MemoryContext metacxt, MemoryContext tablecxt, MemoryContext tempcxt, bool use_variable_hash_iv)
PGDLLIMPORT ExecutorCheckPerms_hook_type ExecutorCheckPerms_hook
bool ExecCheckIndexConstraints(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, ItemPointer conflictTid, ItemPointer tupleid, List *arbiterIndexes)
Bitmapset * ExecGetAllUpdatedCols(ResultRelInfo *relinfo, EState *estate)
void ExecReScan(PlanState *node)
static void ExecEvalExprNoReturn(ExprState *state, ExprContext *econtext)
PGDLLIMPORT ExecutorRun_hook_type ExecutorRun_hook
TupleDesc ExecTypeFromExprList(List *exprList)
List * ExecInsertIndexTuples(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate, bool update, bool noDupErr, bool *specConflict, List *arbiterIndexes, bool onlySummarizing)
TupleDesc ExecTypeFromTL(List *targetList)
void standard_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
static Datum ExecEvalExpr(ExprState *state, ExprContext *econtext, bool *isNull)
bool execCurrentOf(CurrentOfExpr *cexpr, ExprContext *econtext, Oid table_oid, ItemPointer current_tid)
void ResetTupleHashTable(TupleHashTable hashtable)
List * ExecPrepareExprList(List *nodes, EState *estate)
void standard_ExecutorEnd(QueryDesc *queryDesc)
void ExecRestrPos(PlanState *node)
static void ExecEvalExprNoReturnSwitchContext(ExprState *state, ExprContext *econtext)
void ExecCloseRangeTableRelations(EState *estate)
static Datum ExecEvalExprSwitchContext(ExprState *state, ExprContext *econtext, bool *isNull)
void check_exclusion_constraint(Relation heap, Relation index, IndexInfo *indexInfo, ItemPointer tupleid, const Datum *values, const bool *isnull, EState *estate, bool newIndex)
void ExecSetExecProcNode(PlanState *node, ExecProcNodeMtd function)
void ExecPartitionCheckEmitError(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
ExprState * ExecBuildParamSetEqual(TupleDesc desc, const TupleTableSlotOps *lops, const TupleTableSlotOps *rops, const Oid *eqfunctions, const Oid *collations, const List *param_exprs, PlanState *parent)
void ExecConstraints(ResultRelInfo *resultRelInfo, TupleTableSlot *slot, EState *estate)
TupleTableSlot * ExecInitNullTupleSlot(EState *estate, TupleDesc tupType, const TupleTableSlotOps *tts_ops)
TupleTableSlot * ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo)
Relation ExecOpenScanRelation(EState *estate, Index scanrelid, int eflags)
bool ExecCheckPermissions(List *rangeTable, List *rteperminfos, bool ereport_on_violation)
static Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno, bool *isNull)
void ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
Oid ExecGetResultRelCheckAsUser(ResultRelInfo *relInfo, EState *estate)
ExprState * ExecBuildHash32Expr(TupleDesc desc, const TupleTableSlotOps *ops, const Oid *hashfunc_oids, const List *collations, const List *hash_exprs, const bool *opstrict, PlanState *parent, uint32 init_value, bool keep_nulls)
EState * CreateExecutorState(void)
ExprState * ExecPrepareCheck(List *qual, EState *estate)
List * ExecGetAncestorResultRels(EState *estate, ResultRelInfo *resultRelInfo)
TupleTableSlot * EvalPlanQualNext(EPQState *epqstate)
void standard_ExecutorFinish(QueryDesc *queryDesc)
Assert(PointerIsAligned(start, uint64))
void MemoryContextReset(MemoryContext context)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
on_exit_nicely_callback function
static void * list_nth(const List *list, int n)
static bool DatumGetBool(Datum X)
static unsigned hash(unsigned *uv, int n)
MemoryContext ecxt_per_tuple_memory
ExecProcNodeMtd ExecProcNode
ExprContext * pi_exprContext
TupleDesc tts_tupleDescriptor
static Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)