Tweak use of ExecContextForcesOids by Gather (Merge).
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
This commit is contained in:
parent
f455e1125e
commit
0510421ee0
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user