PostgreSQL Source Code: src/backend/executor/nodeMaterial.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
23
27
28
29
30
31
32
33
34
35
36
37
38static TupleTableSlot *
40{
44 bool forward;
46 bool eof_tuplestore;
48
50
51
52
53
58
59
60
61
62 if (tuplestorestate == NULL && node->eflags != 0)
63 {
67 {
68
69
70
71
73
77 }
79 }
80
81
82
83
84
85 eof_tuplestore = (tuplestorestate == NULL) ||
87
88 if (!forward && eof_tuplestore)
89 {
91 {
92
93
94
95
96
97
99 return NULL;
100 }
101 eof_tuplestore = false;
102 }
103
104
105
106
108 if (!eof_tuplestore)
109 {
111 return slot;
112 if (forward)
113 eof_tuplestore = true;
114 }
115
116
117
118
119
120
121
122
123
125 {
128
129
130
131
132
136 {
138 return NULL;
139 }
140
141
142
143
144
145
146 if (tuplestorestate)
148
150 return slot;
151 }
152
153
154
155
157}
158
159
160
161
162
165{
168
169
170
171
176
177
178
179
180
181
182
186
187
188
189
190
191
192
193
196
199
200
201
202
203
204
205
206
207
208
209
210
211
212
214
217
218
219
220
221
222
223
226
227
228
229
231
232 return matstate;
233}
234
235
236
237
238
239void
241{
242
243
244
248
249
250
251
253}
254
255
256
257
258
259
260
261void
263{
265
266
267
268
270 return;
271
272
273
274
276
277
278
279
281}
282
283
284
285
286
287
288
289void
291{
293
294
295
296
298 return;
299
300
301
302
304}
305
306
307
308
309
310
311
312void
314{
316
318
319 if (node->eflags != 0)
320 {
321
322
323
324
325
327 return;
328
329
330
331
332
333
334
335
336
337
338
339 if (outerPlan->chgParam != NULL ||
341 {
347 }
348 else
350 }
351 else
352 {
353
354
355
356
357
358
362 }
363}
#define PG_USED_FOR_ASSERTS_ONLY
void ExecReScan(PlanState *node)
void ExecEndNode(PlanState *node)
PlanState * ExecInitNode(Plan *node, EState *estate, int eflags)
void ExecInitResultTupleSlotTL(PlanState *planstate, const TupleTableSlotOps *tts_ops)
const TupleTableSlotOps TTSOpsMinimalTuple
void ExecCreateScanSlotFromOuterPlan(EState *estate, ScanState *scanstate, const TupleTableSlotOps *tts_ops)
#define outerPlanState(node)
#define EXEC_FLAG_BACKWARD
static TupleTableSlot * ExecProcNode(PlanState *node)
Assert(PointerIsAligned(start, uint64))
#define CHECK_FOR_INTERRUPTS()
static TupleTableSlot * ExecMaterial(PlanState *pstate)
void ExecReScanMaterial(MaterialState *node)
void ExecMaterialMarkPos(MaterialState *node)
MaterialState * ExecInitMaterial(Material *node, EState *estate, int eflags)
void ExecEndMaterial(MaterialState *node)
void ExecMaterialRestrPos(MaterialState *node)
#define castNode(_type_, nodeptr)
#define ScanDirectionIsForward(direction)
ScanDirection es_direction
Tuplestorestate * tuplestorestate
TupleTableSlot * ps_ResultTupleSlot
ProjectionInfo * ps_ProjInfo
ExecProcNodeMtd ExecProcNode
bool tuplestore_gettupleslot(Tuplestorestate *state, bool forward, bool copy, TupleTableSlot *slot)
void tuplestore_puttupleslot(Tuplestorestate *state, TupleTableSlot *slot)
void tuplestore_rescan(Tuplestorestate *state)
int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags)
Tuplestorestate * tuplestore_begin_heap(bool randomAccess, bool interXact, int maxKBytes)
void tuplestore_trim(Tuplestorestate *state)
void tuplestore_copy_read_pointer(Tuplestorestate *state, int srcptr, int destptr)
bool tuplestore_advance(Tuplestorestate *state, bool forward)
void tuplestore_end(Tuplestorestate *state)
bool tuplestore_ateof(Tuplestorestate *state)
void tuplestore_set_eflags(Tuplestorestate *state, int eflags)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
static TupleTableSlot * ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot)