summaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeGather.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/nodeGather.c')
-rw-r--r--src/backend/executor/nodeGather.c31
1 files changed, 11 insertions, 20 deletions
diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c
index 58eadd45b83..eaf7d2d5632 100644
--- a/src/backend/executor/nodeGather.c
+++ b/src/backend/executor/nodeGather.c
@@ -59,7 +59,6 @@ ExecInitGather(Gather *node, EState *estate, int eflags)
{
GatherState *gatherstate;
Plan *outerNode;
- bool hasoid;
TupleDesc tupDesc;
/* Gather node doesn't have innerPlan node. */
@@ -86,36 +85,28 @@ ExecInitGather(Gather *node, EState *estate, int eflags)
ExecAssignExprContext(estate, &gatherstate->ps);
/*
- * Gather doesn't support checking a qual (it's always more efficient to
- * do it in the child node).
- */
- Assert(!node->plan.qual);
-
- /*
- * tuple table initialization
- */
- gatherstate->funnel_slot = ExecInitExtraTupleSlot(estate);
- ExecInitResultTupleSlot(estate, &gatherstate->ps);
-
- /*
* now initialize outer plan
*/
outerNode = outerPlan(node);
outerPlanState(gatherstate) = ExecInitNode(outerNode, estate, eflags);
+ tupDesc = ExecGetResultType(outerPlanState(gatherstate));
+
+ /*
+ * Initialize result slot, type and projection.
+ */
+ ExecInitResultTupleSlotTL(estate, &gatherstate->ps);
+ ExecConditionalAssignProjectionInfo(&gatherstate->ps, tupDesc, OUTER_VAR);
/*
* Initialize funnel slot to same tuple descriptor as outer plan.
*/
- if (!ExecContextForcesOids(outerPlanState(gatherstate), &hasoid))
- hasoid = false;
- tupDesc = ExecTypeFromTL(outerNode->targetlist, hasoid);
- ExecSetSlotDescriptor(gatherstate->funnel_slot, tupDesc);
+ gatherstate->funnel_slot = ExecInitExtraTupleSlot(estate, tupDesc);
/*
- * Initialize result tuple type and projection info.
+ * Gather doesn't support checking a qual (it's always more efficient to
+ * do it in the child node).
*/
- ExecAssignResultTypeFromTL(&gatherstate->ps);
- ExecConditionalAssignProjectionInfo(&gatherstate->ps, tupDesc, OUTER_VAR);
+ Assert(!node->plan.qual);
return gatherstate;
}