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

Function ExecInitMergeAppend

src/backend/executor/nodeMergeAppend.c:64–206  ·  view source on GitHub ↗

---------------------------------------------------------------- * ExecInitMergeAppend * * Begin all of the subscans of the MergeAppend node. * ---------------------------------------------------------------- */

Source from the content-addressed store, hash-verified

62 * ----------------------------------------------------------------
63 */
64MergeAppendState *
65ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags)
66{
67 MergeAppendState *mergestate = makeNode(MergeAppendState);
68 PlanState **mergeplanstates;
69 Bitmapset *validsubplans;
70 int nplans;
71 int i,
72 j;
73
74 /* check for unsupported flags */
75 Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
76
77 /*
78 * create new MergeAppendState for our node
79 */
80 mergestate->ps.plan = (Plan *) node;
81 mergestate->ps.state = estate;
82 mergestate->ps.ExecProcNode = ExecMergeAppend;
83
84 /* If run-time partition pruning is enabled, then set that up now */
85 if (node->part_prune_info != NULL)
86 {
87 PartitionPruneState *prunestate;
88
89 /* We may need an expression context to evaluate partition exprs */
90 ExecAssignExprContext(estate, &mergestate->ps);
91
92 prunestate = ExecCreatePartitionPruneState(&mergestate->ps,
93 node->part_prune_info);
94 mergestate->ms_prune_state = prunestate;
95
96 /* Perform an initial partition prune, if required. */
97 if (prunestate->do_initial_prune)
98 {
99 /* Determine which subplans survive initial pruning */
100 validsubplans = ExecFindInitialMatchingSubPlans(prunestate,
101 list_length(node->mergeplans));
102
103 nplans = bms_num_members(validsubplans);
104 }
105 else
106 {
107 /* We'll need to initialize all subplans */
108 nplans = list_length(node->mergeplans);
109 Assert(nplans > 0);
110 validsubplans = bms_add_range(NULL, 0, nplans - 1);
111 }
112
113 /*
114 * When no run-time pruning is required and there's at least one
115 * subplan, we can fill as_valid_subplans immediately, preventing
116 * later calls to ExecFindMatchingSubPlans.
117 */
118 if (!prunestate->do_exec_prune && nplans > 0)
119 mergestate->ms_valid_subplans = bms_add_range(NULL, 0, nplans - 1);
120 }
121 else

Callers 1

ExecInitNodeFunction · 0.85

Calls 14

ExecAssignExprContextFunction · 0.85
list_lengthFunction · 0.85
bms_num_membersFunction · 0.85
bms_add_rangeFunction · 0.85
binaryheap_allocateFunction · 0.85
bms_next_memberFunction · 0.85
list_nthFunction · 0.85
ExecInitNodeFunction · 0.85

Tested by

no test coverage detected