mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Un-break EXPLAIN for Append plans. I messed this up a few days ago while
adding the ModifyTable node type --- I had been thinking ModifyTable should replace Append as a special case in push_plan(), but actually both of them have to be special-cased.
This commit is contained in:
parent
be6899f139
commit
77c666fe42
@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.312 2009/10/28 17:36:50 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.313 2009/10/28 18:51:56 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -3370,11 +3370,16 @@ static void
|
||||
push_plan(deparse_namespace *dpns, Plan *subplan)
|
||||
{
|
||||
/*
|
||||
* We special-case ModifyTable to pretend that the first child plan is the
|
||||
* OUTER referent; otherwise normal. This is to support RETURNING lists
|
||||
* containing references to non-target relations.
|
||||
* We special-case Append to pretend that the first child plan is the
|
||||
* OUTER referent; we have to interpret OUTER Vars in the Append's tlist
|
||||
* according to one of the children, and the first one is the most
|
||||
* natural choice. Likewise special-case ModifyTable to pretend that the
|
||||
* first child plan is the OUTER referent; this is to support RETURNING
|
||||
* lists containing references to non-target relations.
|
||||
*/
|
||||
if (IsA(subplan, ModifyTable))
|
||||
if (IsA(subplan, Append))
|
||||
dpns->outer_plan = (Plan *) linitial(((Append *) subplan)->appendplans);
|
||||
else if (IsA(subplan, ModifyTable))
|
||||
dpns->outer_plan = (Plan *) linitial(((ModifyTable *) subplan)->plans);
|
||||
else
|
||||
dpns->outer_plan = outerPlan(subplan);
|
||||
|
Loading…
Reference in New Issue
Block a user