PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
nodeUnique.h File Reference
#include "nodes/execnodes.h"
Include dependency graph for nodeUnique.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

UniqueStateExecInitUnique (Unique *node, EState *estate, int eflags)
 
void ExecEndUnique (UniqueState *node)
 
void ExecReScanUnique (UniqueState *node)
 

Function Documentation

void ExecEndUnique ( UniqueState node)

Definition at line 178 of file nodeUnique.c.

References ExecClearTuple(), ExecEndNode(), MemoryContextDelete(), outerPlanState, UniqueState::ps, PlanState::ps_ResultTupleSlot, and UniqueState::tempContext.

Referenced by ExecEndNode().

179 {
180  /* clean up tuple table */
182 
184 
186 }
void MemoryContextDelete(MemoryContext context)
Definition: mcxt.c:200
void ExecEndNode(PlanState *node)
Definition: execProcnode.c:523
TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
Definition: execTuples.c:439
TupleTableSlot * ps_ResultTupleSlot
Definition: execnodes.h:880
#define outerPlanState(node)
Definition: execnodes.h:893
PlanState ps
Definition: execnodes.h:1899
MemoryContext tempContext
Definition: execnodes.h:1901
UniqueState* ExecInitUnique ( Unique node,
EState estate,
int  eflags 
)

Definition at line 116 of file nodeUnique.c.

References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate(), Assert, CurrentMemoryContext, UniqueState::eqfunctions, EXEC_FLAG_BACKWARD, EXEC_FLAG_MARK, ExecAssignResultTypeFromTL(), ExecInitNode(), ExecInitResultTupleSlot(), PlanState::ExecProcNode, execTuplesMatchPrepare(), ExecUnique(), makeNode, NULL, Unique::numCols, outerPlan, outerPlanState, PlanState::plan, UniqueState::ps, PlanState::ps_ProjInfo, PlanState::state, UniqueState::tempContext, and Unique::uniqOperators.

Referenced by ExecInitNode().

117 {
118  UniqueState *uniquestate;
119 
120  /* check for unsupported flags */
121  Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
122 
123  /*
124  * create state structure
125  */
126  uniquestate = makeNode(UniqueState);
127  uniquestate->ps.plan = (Plan *) node;
128  uniquestate->ps.state = estate;
129  uniquestate->ps.ExecProcNode = ExecUnique;
130 
131  /*
132  * Miscellaneous initialization
133  *
134  * Unique nodes have no ExprContext initialization because they never call
135  * ExecQual or ExecProject. But they do need a per-tuple memory context
136  * anyway for calling execTuplesMatch.
137  */
138  uniquestate->tempContext =
140  "Unique",
142 
143  /*
144  * Tuple table initialization
145  */
146  ExecInitResultTupleSlot(estate, &uniquestate->ps);
147 
148  /*
149  * then initialize outer plan
150  */
151  outerPlanState(uniquestate) = ExecInitNode(outerPlan(node), estate, eflags);
152 
153  /*
154  * unique nodes do no projections, so initialize projection info for this
155  * node appropriately
156  */
157  ExecAssignResultTypeFromTL(&uniquestate->ps);
158  uniquestate->ps.ps_ProjInfo = NULL;
159 
160  /*
161  * Precompute fmgr lookup data for inner loop
162  */
163  uniquestate->eqfunctions =
165  node->uniqOperators);
166 
167  return uniquestate;
168 }
int numCols
Definition: plannodes.h:821
ProjectionInfo * ps_ProjInfo
Definition: execnodes.h:882
EState * state
Definition: execnodes.h:849
void ExecAssignResultTypeFromTL(PlanState *planstate)
Definition: execUtils.c:445
Oid * uniqOperators
Definition: plannodes.h:823
void ExecInitResultTupleSlot(EState *estate, PlanState *planstate)
Definition: execTuples.c:832
#define ALLOCSET_DEFAULT_SIZES
Definition: memutils.h:165
#define EXEC_FLAG_BACKWARD
Definition: executor.h:60
#define outerPlanState(node)
Definition: execnodes.h:893
PlanState ps
Definition: execnodes.h:1899
MemoryContext CurrentMemoryContext
Definition: mcxt.c:37
#define outerPlan(node)
Definition: plannodes.h:174
MemoryContext AllocSetContextCreate(MemoryContext parent, const char *name, Size minContextSize, Size initBlockSize, Size maxBlockSize)
Definition: aset.c:322
ExecProcNodeMtd ExecProcNode
Definition: execnodes.h:853
FmgrInfo * eqfunctions
Definition: execnodes.h:1900
Plan * plan
Definition: execnodes.h:847
MemoryContext tempContext
Definition: execnodes.h:1901
#define makeNode(_type_)
Definition: nodes.h:557
#define NULL
Definition: c.h:229
#define Assert(condition)
Definition: c.h:676
#define EXEC_FLAG_MARK
Definition: executor.h:61
static TupleTableSlot * ExecUnique(PlanState *pstate)
Definition: nodeUnique.c:47
FmgrInfo * execTuplesMatchPrepare(int numCols, Oid *eqOperators)
Definition: execGrouping.c:204
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
Definition: execProcnode.c:139
void ExecReScanUnique ( UniqueState node)

Definition at line 190 of file nodeUnique.c.

References PlanState::chgParam, ExecClearTuple(), ExecReScan(), PlanState::lefttree, NULL, UniqueState::ps, and PlanState::ps_ResultTupleSlot.

Referenced by ExecReScan().

191 {
192  /* must clear result tuple so first input tuple is returned */
194 
195  /*
196  * if chgParam of subnode is not null then plan will be re-scanned by
197  * first ExecProcNode.
198  */
199  if (node->ps.lefttree->chgParam == NULL)
200  ExecReScan(node->ps.lefttree);
201 }
void ExecReScan(PlanState *node)
Definition: execAmi.c:76
TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
Definition: execTuples.c:439
struct PlanState * lefttree
Definition: execnodes.h:866
TupleTableSlot * ps_ResultTupleSlot
Definition: execnodes.h:880
PlanState ps
Definition: execnodes.h:1899
Bitmapset * chgParam
Definition: execnodes.h:875
#define NULL
Definition: c.h:229