PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 ExecReScanNamedTuplestoreScan (NamedTuplestoreScanState *node)
 

Function Documentation

◆ ExecInitNamedTuplestoreScan()

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

Definition at line 82 of file nodeNamedtuplestorescan.c.

83{
84 NamedTuplestoreScanState *scanstate;
86
87 /* check for unsupported flags */
89
90 /*
91 * NamedTuplestoreScan should not have any children.
92 */
93 Assert(outerPlan(node) == NULL);
94 Assert(innerPlan(node) == NULL);
95
96 /*
97 * create new NamedTuplestoreScanState for node
98 */
100 scanstate->ss.ps.plan = (Plan *) node;
101 scanstate->ss.ps.state = estate;
103
104 enr = get_ENR(estate->es_queryEnv, node->enrname);
105 if (!enr)
106 elog(ERROR, "executor could not find named tuplestore \"%s\"",
107 node->enrname);
108
109 Assert(enr->reldata);
110 scanstate->relation = (Tuplestorestate *) enr->reldata;
111 scanstate->tupdesc = ENRMetadataGetTupDesc(&(enr->md));
112 scanstate->readptr =
114
115 /*
116 * The new read pointer copies its position from read pointer 0, which
117 * could be anywhere, so explicitly rewind it.
118 */
119 tuplestore_select_read_pointer(scanstate->relation, scanstate->readptr);
120 tuplestore_rescan(scanstate->relation);
121
122 /*
123 * XXX: Should we add a function to free that read pointer when done?
124 *
125 * This was attempted, but it did not improve performance or memory usage
126 * in any tested cases.
127 */
128
129 /*
130 * Miscellaneous initialization
131 *
132 * create expression context for node
133 */
134 ExecAssignExprContext(estate, &scanstate->ss.ps);
135
136 /*
137 * The scan tuple type is specified for the tuplestore.
138 */
139 ExecInitScanTupleSlot(estate, &scanstate->ss, scanstate->tupdesc,
141
142 /*
143 * Initialize result type and projection.
144 */
145 ExecInitResultTypeTL(&scanstate->ss.ps);
146 ExecAssignScanProjectionInfo(&scanstate->ss);
147
148 /*
149 * initialize child expressions
150 */
151 scanstate->ss.ps.qual =
152 ExecInitQual(node->scan.plan.qual, (PlanState *) scanstate);
153
154 return scanstate;
155}
#define Assert(condition)
Definition: c.h:812
#define ERROR
Definition: elog.h:39
#define elog(elevel,...)
Definition: elog.h:225
ExprState * ExecInitQual(List *qual, PlanState *parent)
Definition: execExpr.c:224
void ExecAssignScanProjectionInfo(ScanState *node)
Definition: execScan.c:270
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
Definition: execTuples.c:1998
void ExecInitResultTypeTL(PlanState *planstate)
Definition: execTuples.c:1942
const TupleTableSlotOps TTSOpsMinimalTuple
Definition: execTuples.c:86
void ExecAssignExprContext(EState *estate, PlanState *planstate)
Definition: execUtils.c:485
#define EXEC_FLAG_BACKWARD
Definition: executor.h:68
#define EXEC_FLAG_REWIND
Definition: executor.h:67
#define EXEC_FLAG_MARK
Definition: executor.h:69
static TupleTableSlot * ExecNamedTuplestoreScan(PlanState *pstate)
#define makeNode(_type_)
Definition: nodes.h:155
#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:672
EphemeralNamedRelationMetadataData md
Tuplestorestate * relation
Definition: execnodes.h:2046
ExprState * qual
Definition: execnodes.h:1146
Plan * plan
Definition: execnodes.h:1125
EState * state
Definition: execnodes.h:1127
ExecProcNodeMtd ExecProcNode
Definition: execnodes.h:1131
PlanState ps
Definition: execnodes.h:1572
void tuplestore_select_read_pointer(Tuplestorestate *state, int ptr)
Definition: tuplestore.c:507
void tuplestore_rescan(Tuplestorestate *state)
Definition: tuplestore.c:1285
int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags)
Definition: tuplestore.c:395

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 164 of file nodeNamedtuplestorescan.c.

165{
166 Tuplestorestate *tuplestorestate = node->relation;
167
168 if (node->ss.ps.ps_ResultTupleSlot)
170
171 ExecScanReScan(&node->ss);
172
173 /*
174 * Rewind my own pointer.
175 */
176 tuplestore_select_read_pointer(tuplestorestate, node->readptr);
177 tuplestore_rescan(tuplestorestate);
178}
void ExecScanReScan(ScanState *node)
Definition: execScan.c:297
TupleTableSlot * ps_ResultTupleSlot
Definition: execnodes.h:1163
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
Definition: tuptable.h:454

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

Referenced by ExecReScan().