aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/nodeAppend.c25
-rw-r--r--src/backend/executor/nodeMergeAppend.c14
2 files changed, 15 insertions, 24 deletions
diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c
index f3be2429dbe..5ff986ac7d3 100644
--- a/src/backend/executor/nodeAppend.c
+++ b/src/backend/executor/nodeAppend.c
@@ -107,7 +107,6 @@ ExecInitAppend(Append *node, EState *estate, int eflags)
int firstvalid;
int i,
j;
- ListCell *lc;
/* check for unsupported flags */
Assert(!(eflags & EXEC_FLAG_MARK));
@@ -211,24 +210,20 @@ ExecInitAppend(Append *node, EState *estate, int eflags)
*
* While at it, find out the first valid partial plan.
*/
- j = i = 0;
+ j = 0;
firstvalid = nplans;
- foreach(lc, node->appendplans)
+ i = -1;
+ while ((i = bms_next_member(validsubplans, i)) >= 0)
{
- if (bms_is_member(i, validsubplans))
- {
- Plan *initNode = (Plan *) lfirst(lc);
+ Plan *initNode = (Plan *) list_nth(node->appendplans, i);
- /*
- * Record the lowest appendplans index which is a valid partial
- * plan.
- */
- if (i >= node->first_partial_plan && j < firstvalid)
- firstvalid = j;
+ /*
+ * Record the lowest appendplans index which is a valid partial plan.
+ */
+ if (i >= node->first_partial_plan && j < firstvalid)
+ firstvalid = j;
- appendplanstates[j++] = ExecInitNode(initNode, estate, eflags);
- }
- i++;
+ appendplanstates[j++] = ExecInitNode(initNode, estate, eflags);
}
appendstate->as_first_partial_plan = firstvalid;
diff --git a/src/backend/executor/nodeMergeAppend.c b/src/backend/executor/nodeMergeAppend.c
index 7ba53ba1859..18d13377dc3 100644
--- a/src/backend/executor/nodeMergeAppend.c
+++ b/src/backend/executor/nodeMergeAppend.c
@@ -70,7 +70,6 @@ ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags)
int nplans;
int i,
j;
- ListCell *lc;
/* check for unsupported flags */
Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
@@ -177,16 +176,13 @@ ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags)
* call ExecInitNode on each of the valid plans to be executed and save
* the results into the mergeplanstates array.
*/
- j = i = 0;
- foreach(lc, node->mergeplans)
+ j = 0;
+ i = -1;
+ while ((i = bms_next_member(validsubplans, i)) >= 0)
{
- if (bms_is_member(i, validsubplans))
- {
- Plan *initNode = (Plan *) lfirst(lc);
+ Plan *initNode = (Plan *) list_nth(node->mergeplans, i);
- mergeplanstates[j++] = ExecInitNode(initNode, estate, eflags);
- }
- i++;
+ mergeplanstates[j++] = ExecInitNode(initNode, estate, eflags);
}
mergestate->ps.ps_ProjInfo = NULL;