]> granicus.if.org Git - postgresql/commitdiff
Tweak use of ExecContextForcesOids by Gather (Merge).
authorRobert Haas <rhaas@postgresql.org>
Mon, 20 Nov 2017 17:34:06 +0000 (12:34 -0500)
committerRobert Haas <rhaas@postgresql.org>
Mon, 20 Nov 2017 17:34:06 +0000 (12:34 -0500)
Specifically, pass the outer plan's PlanState instead of our own
PlanState.  At present, ExecContextForcesOids doesn't actually care
which PlanState we pass; it just looks through to the underlying
EState to find the result relation or top-level eflags.  However, in
the future it might care.  If that happens, and if our goal is to get
a tuple descriptor that matches that of the outer plan, then I think
what we care about is whether the outer plan's context forces OIDs,
rather than whether our own context forces OIDs, just as we use the
outer node's target list rather than our own.

Patch by me, reviewed by Amit Kapila.

Discussion: http://postgr.es/m/CA+TgmoZ0ZL=cesZFq8c9NnfK6bqy-wwUd3_74iYGodYrSoQ7Fw@mail.gmail.com

src/backend/executor/nodeGather.c
src/backend/executor/nodeGatherMerge.c

index 07c62d2feab9bc617caa65aac7102b91d4f9e08a..30885e6f5c2015f87e31d88a3021e6fd80445dfd 100644 (file)
@@ -112,7 +112,7 @@ ExecInitGather(Gather *node, EState *estate, int eflags)
        /*
         * Initialize funnel slot to same tuple descriptor as outer plan.
         */
-       if (!ExecContextForcesOids(&gatherstate->ps, &hasoid))
+       if (!ExecContextForcesOids(outerPlanState(gatherstate), &hasoid))
                hasoid = false;
        tupDesc = ExecTypeFromTL(outerNode->targetlist, hasoid);
        ExecSetSlotDescriptor(gatherstate->funnel_slot, tupDesc);
index 7dd655c4489358989e4a1d608368f9bfe2bc1b22..d81462e72b41efdd559269aff6c0ffc44058ea1a 100644 (file)
@@ -155,7 +155,7 @@ ExecInitGatherMerge(GatherMerge *node, EState *estate, int eflags)
         * Store the tuple descriptor into gather merge state, so we can use it
         * while initializing the gather merge slots.
         */
-       if (!ExecContextForcesOids(&gm_state->ps, &hasoid))
+       if (!ExecContextForcesOids(outerPlanState(gm_state), &hasoid))
                hasoid = false;
        tupDesc = ExecTypeFromTL(outerNode->targetlist, hasoid);
        gm_state->tupDesc = tupDesc;