MCPcopy Create free account
hub / github.com/apache/cloudberry / ExecInitSequence

Function ExecInitSequence

src/backend/executor/nodeSequence.c:26–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24#include "miscadmin.h"
25
26SequenceState *
27ExecInitSequence(Sequence *node, EState *estate, int eflags)
28{
29 SequenceState *sequenceState;
30 PlanState *lastPlanState;
31
32 /* Check for unsupported flags */
33 Assert(!(eflags & EXEC_FLAG_MARK));
34
35 /* Sequence should not contain 'qual'. */
36 Assert(node->plan.qual == NIL);
37
38 sequenceState = makeNode(SequenceState);
39 sequenceState->ps.plan = (Plan *)node;
40 sequenceState->ps.state = estate;
41 sequenceState->ps.ExecProcNode = ExecSequence;
42
43 int numSubplans = list_length(node->subplans);
44 Assert(numSubplans >= 1);
45 sequenceState->subplans = (PlanState **)palloc0(numSubplans * sizeof(PlanState *));
46 sequenceState->numSubplans = numSubplans;
47
48 /* Initialize subplans */
49 ListCell *lc;
50 int no = 0;
51 foreach (lc, node->subplans)
52 {
53 Plan *subplan = (Plan *)lfirst(lc);
54 Assert(subplan != NULL);
55 Assert(no < numSubplans);
56
57 sequenceState->subplans[no] = ExecInitNode(subplan, estate, eflags);
58 no++;
59 }
60
61 sequenceState->initState = true;
62
63 /* Sequence does not need projection. */
64 sequenceState->ps.ps_ProjInfo = NULL;
65
66 /*
67 * Initialize result type. We will pass through the last child slot.
68 */
69 lastPlanState = sequenceState->subplans[numSubplans - 1];
70 ExecInitResultTypeTL(&sequenceState->ps);
71 sequenceState->ps.resultopsset = true;
72 sequenceState->ps.resultops = ExecGetResultSlotOps(lastPlanState,
73 &lastPlanState->resultopsfixed);
74
75 return sequenceState;
76}
77
78/*
79 * completeSubplan

Callers 1

ExecInitNodeFunction · 0.85

Calls 6

list_lengthFunction · 0.85
ExecInitNodeFunction · 0.85
ExecInitResultTypeTLFunction · 0.85
ExecGetResultSlotOpsFunction · 0.85
palloc0Function · 0.50
foreachFunction · 0.50

Tested by

no test coverage detected