diff options
Diffstat (limited to 'src/backend/optimizer/plan/subselect.c')
-rw-r--r-- | src/backend/optimizer/plan/subselect.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index a1acda48ff0..194b41449e5 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/plan/subselect.c,v 1.100.2.3 2006/05/03 00:25:07 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/plan/subselect.c,v 1.100.2.4 2007/07/18 21:41:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1251,10 +1251,14 @@ SS_make_initplan_from_plan(PlannerInfo *root, Plan *plan, Param *prm; /* - * Set up for a new level of subquery. This is just to keep - * SS_finalize_plan from becoming confused. + * We must run SS_finalize_plan(), since that's normally done before a + * subplan gets put into the initplan list. However it will try to attach + * any pre-existing initplans to this one, which we don't want (they are + * siblings not children of this initplan). So, a quick kluge to hide + * them. (This is something else that could perhaps be cleaner if we did + * extParam/allParam processing in setrefs.c instead of here? See notes + * for materialize_finished_plan.) */ - PlannerQueryLevel++; PlannerInitPlan = NIL; /* @@ -1262,8 +1266,7 @@ SS_make_initplan_from_plan(PlannerInfo *root, Plan *plan, */ SS_finalize_plan(plan, root->parse->rtable); - /* Return to outer subquery context */ - PlannerQueryLevel--; + /* Restore outer initplan list */ PlannerInitPlan = saved_initplan; /* |