PostgreSQL Source Code  git master
nodeNamedtuplestorescan.h File Reference
#include "nodes/execnodes.h"
Include dependency graph for nodeNamedtuplestorescan.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

NamedTuplestoreScanStateExecInitNamedTuplestoreScan (NamedTuplestoreScan *node, EState *estate, int eflags)
 
void ExecEndNamedTuplestoreScan (NamedTuplestoreScanState *node)
 
void ExecReScanNamedTuplestoreScan (NamedTuplestoreScanState *node)
 

Function Documentation

◆ ExecEndNamedTuplestoreScan()

void ExecEndNamedTuplestoreScan ( NamedTuplestoreScanState node)

Definition at line 165 of file nodeNamedtuplestorescan.c.

166 {
167  /*
168  * Free exprcontext
169  */
170  ExecFreeExprContext(&node->ss.ps);
171 
172  /*
173  * clean out the tuple table
174  */
175  if (node->ss.ps.ps_ResultTupleSlot)
178 }
void ExecFreeExprContext(PlanState *planstate)
Definition: execUtils.c:658
TupleTableSlot * ps_ResultTupleSlot
Definition: execnodes.h:1075
TupleTableSlot * ss_ScanTupleSlot
Definition: execnodes.h:1477
PlanState ps
Definition: execnodes.h:1474
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
Definition: tuptable.h:433

References ExecClearTuple(), ExecFreeExprContext(), ScanState::ps, PlanState::ps_ResultTupleSlot, NamedTuplestoreScanState::ss, and ScanState::ss_ScanTupleSlot.

Referenced by ExecEndNode().

◆ ExecInitNamedTuplestoreScan()

NamedTuplestoreScanState* ExecInitNamedTuplestoreScan ( NamedTuplestoreScan node,
EState estate,
int  eflags 
)

Definition at line 83 of file nodeNamedtuplestorescan.c.

84 {
85  NamedTuplestoreScanState *scanstate;
87 
88  /* check for unsupported flags */
89  Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
90 
91  /*
92  * NamedTuplestoreScan should not have any children.
93  */
94  Assert(outerPlan(node) == NULL);
95  Assert(innerPlan(node) == NULL);
96 
97  /*
98  * create new NamedTuplestoreScanState for node
99  */
100  scanstate = makeNode(NamedTuplestoreScanState);
101  scanstate->ss.ps.plan = (Plan *) node;
102  scanstate->ss.ps.state = estate;
104 
105  enr = get_ENR(estate->es_queryEnv, node->enrname);
106  if (!enr)
107  elog(ERROR, "executor could not find named tuplestore \"%s\"",
108  node->enrname);
109 
110  Assert(enr->reldata);
111  scanstate->relation = (Tuplestorestate *) enr->reldata;
112  scanstate->tupdesc = ENRMetadataGetTupDesc(&(enr->md));
113  scanstate->readptr =
115 
116  /*
117  * The new read pointer copies its position from read pointer 0, which
118  * could be anywhere, so explicitly rewind it.
119  */
120  tuplestore_select_read_pointer(scanstate->relation, scanstate->readptr);
121  tuplestore_rescan(scanstate->relation);
122 
123  /*
124  * XXX: Should we add a function to free that read pointer when done?
125  *
126  * This was attempted, but it did not improve performance or memory usage
127  * in any tested cases.
128  */
129 
130  /*
131  * Miscellaneous initialization
132  *
133  * create expression context for node
134  */
135  ExecAssignExprContext(estate, &scanstate->ss.ps);
136 
137  /*
138  * The scan tuple type is specified for the tuplestore.
139  */
140  ExecInitScanTupleSlot(estate, &scanstate->ss, scanstate->tupdesc,
142 
143  /*
144  * Initialize result type and projection.
145  */
146  ExecInitResultTypeTL(&scanstate->ss.ps);
147  ExecAssignScanProjectionInfo(&scanstate->ss);
148 
149  /*
150  * initialize child expressions
151  */
152  scanstate->ss.ps.qual =
153  ExecInitQual(node->scan.plan.qual, (PlanState *) scanstate);
154 
155  return scanstate;
156 }
#define ERROR
Definition: elog.h:39
ExprState * ExecInitQual(List *qual, PlanState *parent)
Definition: execExpr.c:213
void ExecAssignScanProjectionInfo(ScanState *node)
Definition: execScan.c:271
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
Definition: execTuples.c:1812
void ExecInitResultTypeTL(PlanState *planstate)
Definition: execTuples.c:1756
const TupleTableSlotOps TTSOpsMinimalTuple
Definition: execTuples.c:85
void ExecAssignExprContext(EState *estate, PlanState *planstate)
Definition: execUtils.c:488
#define EXEC_FLAG_BACKWARD
Definition: executor.h:68
#define EXEC_FLAG_REWIND
Definition: executor.h:67
#define EXEC_FLAG_MARK
Definition: executor.h:69
Assert(fmt[strlen(fmt) - 1] !='\n')
static TupleTableSlot * ExecNamedTuplestoreScan(PlanState *pstate)
#define makeNode(_type_)
Definition: nodes.h:176
#define innerPlan(node)
Definition: plannodes.h:182
#define outerPlan(node)
Definition: plannodes.h:183
TupleDesc ENRMetadataGetTupDesc(EphemeralNamedRelationMetadata enrmd)
EphemeralNamedRelation get_ENR(QueryEnvironment *queryEnv, const char *name)
QueryEnvironment * es_queryEnv
Definition: execnodes.h:656
EphemeralNamedRelationMetadataData md
Tuplestorestate * relation
Definition: execnodes.h:1929
ExprState * qual
Definition: execnodes.h:1058
Plan * plan
Definition: execnodes.h:1037
EState * state
Definition: execnodes.h:1039
ExecProcNodeMtd ExecProcNode
Definition: execnodes.h:1043
void tuplestore_select_read_pointer(Tuplestorestate *state, int ptr)
Definition: tuplestore.c:473
void tuplestore_rescan(Tuplestorestate *state)
Definition: tuplestore.c:1233
int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags)
Definition: tuplestore.c:383

References Assert(), elog(), ENRMetadataGetTupDesc(), NamedTuplestoreScan::enrname, ERROR, EState::es_queryEnv, EXEC_FLAG_BACKWARD, EXEC_FLAG_MARK, EXEC_FLAG_REWIND, ExecAssignExprContext(), ExecAssignScanProjectionInfo(), ExecInitQual(), ExecInitResultTypeTL(), ExecInitScanTupleSlot(), ExecNamedTuplestoreScan(), PlanState::ExecProcNode, get_ENR(), innerPlan, makeNode, EphemeralNamedRelationData::md, outerPlan, PlanState::plan, ScanState::ps, PlanState::qual, NamedTuplestoreScanState::readptr, NamedTuplestoreScanState::relation, EphemeralNamedRelationData::reldata, NamedTuplestoreScan::scan, NamedTuplestoreScanState::ss, PlanState::state, TTSOpsMinimalTuple, NamedTuplestoreScanState::tupdesc, tuplestore_alloc_read_pointer(), tuplestore_rescan(), and tuplestore_select_read_pointer().

Referenced by ExecInitNode().

◆ ExecReScanNamedTuplestoreScan()

void ExecReScanNamedTuplestoreScan ( NamedTuplestoreScanState node)

Definition at line 187 of file nodeNamedtuplestorescan.c.

188 {
189  Tuplestorestate *tuplestorestate = node->relation;
190 
191  if (node->ss.ps.ps_ResultTupleSlot)
193 
194  ExecScanReScan(&node->ss);
195 
196  /*
197  * Rewind my own pointer.
198  */
199  tuplestore_select_read_pointer(tuplestorestate, node->readptr);
200  tuplestore_rescan(tuplestorestate);
201 }
void ExecScanReScan(ScanState *node)
Definition: execScan.c:298

References ExecClearTuple(), ExecScanReScan(), ScanState::ps, PlanState::ps_ResultTupleSlot, NamedTuplestoreScanState::readptr, NamedTuplestoreScanState::relation, NamedTuplestoreScanState::ss, tuplestore_rescan(), and tuplestore_select_read_pointer().

Referenced by ExecReScan().