110 econtext->ecxt_per_tuple_memory,
124 switch (plannode->
cmd)
149 elog(
ERROR,
"unrecognized set op: %d", (
int) plannode->
cmd);
175 return resultTupleSlot;
287 else if (cmpresult == 0)
314 return resultTupleSlot;
334 input->needGroup =
false;
340 input->numTuples = 0;
346 input->firstTupleSlot,
349 input->numTuples = 1;
363 input->nextTupleSlot,
384 for (
int nkey = 0; nkey < setopstate->
numCols; nkey++)
388 Datum datum1 =
s1->tts_values[attno - 1],
389 datum2 =
s2->tts_values[attno - 1];
390 bool isNull1 =
s1->tts_isnull[attno - 1],
391 isNull2 =
s2->tts_isnull[attno - 1];
412 bool have_tuples =
false;
596 eflags &= ~EXEC_FLAG_REWIND;
637 for (
int i = 0;
i < nkeys;
i++)
#define Assert(condition)
void ExecReScan(PlanState *node)
void execTuplesHashPrepare(int numCols, const Oid *eqOperators, Oid **eqFuncOids, FmgrInfo **hashFunctions)
TupleHashEntry LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot, bool *isnew, uint32 *hash)
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)
void ResetTupleHashTable(TupleHashTable hashtable)
void ExecEndNode(PlanState *node)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
TupleTableSlot * ExecStoreMinimalTuple(MinimalTuple mtup, TupleTableSlot *slot, bool shouldFree)
TupleTableSlot * ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
void ExecInitResultTupleSlotTL(PlanState *planstate, const TupleTableSlotOps *tts_ops)
const TupleTableSlotOps TTSOpsMinimalTuple
TupleDesc ExecGetResultType(PlanState *planstate)
void ExecAssignExprContext(EState *estate, PlanState *planstate)
const TupleTableSlotOps * ExecGetCommonChildSlotOps(PlanState *ps)
#define outerPlanState(node)
#define ScanTupleHashTable(htable, iter)
#define ResetTupleHashIterator(htable, iter)
#define innerPlanState(node)
#define EXEC_FLAG_BACKWARD
#define ResetExprContext(econtext)
static TupleTableSlot * ExecProcNode(PlanState *node)
static int compare(const void *arg1, const void *arg2)
if(TABLE==NULL||TABLE_index==NULL)
void MemoryContextReset(MemoryContext context)
void * MemoryContextAllocZero(MemoryContext context, Size size)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define CHECK_FOR_INTERRUPTS()
static void setop_fill_hash_table(SetOpState *setopstate)
static void setop_load_group(SetOpStatePerInput *input, PlanState *inputPlan, SetOpState *setopstate)
static void build_hash_table(SetOpState *setopstate)
void ExecEndSetOp(SetOpState *node)
static void set_output_count(SetOpState *setopstate, SetOpStatePerGroup pergroup)
static TupleTableSlot * ExecSetOp(PlanState *pstate)
static TupleTableSlot * setop_retrieve_hash_table(SetOpState *setopstate)
static int setop_compare_slots(TupleTableSlot *s1, TupleTableSlot *s2, SetOpState *setopstate)
static TupleTableSlot * setop_retrieve_sorted(SetOpState *setopstate)
struct SetOpStatePerGroupData SetOpStatePerGroupData
SetOpState * ExecInitSetOp(SetOp *node, EState *estate, int eflags)
SetOpStatePerGroupData * SetOpStatePerGroup
void ExecReScanSetOp(SetOpState *node)
#define castNode(_type_, nodeptr)
void PrepareSortSupportFromOrderingOp(Oid orderingOp, SortSupport ssup)
struct SortSupportData * SortSupport
static int ApplySortComparator(Datum datum1, bool isNull1, Datum datum2, bool isNull2, SortSupport ssup)
MemoryContext es_query_cxt
TupleDesc ps_ResultTupleDesc
ExprContext * ps_ExprContext
TupleTableSlot * ps_ResultTupleSlot
ProjectionInfo * ps_ProjInfo
ExecProcNodeMtd ExecProcNode
TupleHashIterator hashiter
SetOpStatePerInput rightInput
MemoryContext tableContext
SetOpStatePerInput leftInput
static MinimalTuple ExecCopySlotMinimalTuple(TupleTableSlot *slot)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
static void slot_getallattrs(TupleTableSlot *slot)