PostgreSQL Source Code git master
Loading...
Searching...
No Matches
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 
)
extern

Definition at line 83 of file nodeNamedtuplestorescan.c.

84{
87
88 /* check for unsupported flags */
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 */
101 scanstate->ss.ps.plan = (Plan *) node;
102 scanstate->ss.ps.state = estate;
103 scanstate->ss.ps.ExecProcNode = ExecNamedTuplestoreScan;
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 */
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 */
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 Assert(condition)
Definition c.h:945
#define ERROR
Definition elog.h:39
#define elog(elevel,...)
Definition elog.h:226
ExprState * ExecInitQual(List *qual, PlanState *parent)
Definition execExpr.c:250
void ExecAssignScanProjectionInfo(ScanState *node)
Definition execScan.c:81
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops, uint16 flags)
void ExecInitResultTypeTL(PlanState *planstate)
const TupleTableSlotOps TTSOpsMinimalTuple
Definition execTuples.c:86
void ExecAssignExprContext(EState *estate, PlanState *planstate)
Definition execUtils.c:490
#define EXEC_FLAG_BACKWARD
Definition executor.h:70
#define EXEC_FLAG_REWIND
Definition executor.h:69
#define EXEC_FLAG_MARK
Definition executor.h:71
static TupleTableSlot * ExecNamedTuplestoreScan(PlanState *pstate)
#define makeNode(_type_)
Definition nodes.h:161
#define innerPlan(node)
Definition plannodes.h:264
#define outerPlan(node)
Definition plannodes.h:265
static int fb(int x)
TupleDesc ENRMetadataGetTupDesc(EphemeralNamedRelationMetadata enrmd)
EphemeralNamedRelation get_ENR(QueryEnvironment *queryEnv, const char *name)
QueryEnvironment * es_queryEnv
Definition execnodes.h:719
void tuplestore_select_read_pointer(Tuplestorestate *state, int ptr)
Definition tuplestore.c:508
void tuplestore_rescan(Tuplestorestate *state)
int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags)
Definition tuplestore.c:396

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(), fb(), get_ENR(), innerPlan, makeNode, outerPlan, NamedTuplestoreScan::scan, TTSOpsMinimalTuple, tuplestore_alloc_read_pointer(), tuplestore_rescan(), and tuplestore_select_read_pointer().

Referenced by ExecInitNode().

◆ ExecReScanNamedTuplestoreScan()

void ExecReScanNamedTuplestoreScan ( NamedTuplestoreScanState node)
extern

Definition at line 165 of file nodeNamedtuplestorescan.c.

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

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

Referenced by ExecReScan().