"David Sanchez i Gregori" <delkos_2000@yahoo.es> writes:
> Description: Query Error : plan should not reference subplan's
> variable
If it helps, I've applied the attached patch to fix this.
> I found these error in all 8.x on Windows XP SP 2 (32 bits) , Linux 32 bits,
> and Linux AMD64.
AFAICT the bug is new in 8.1. If you can reproduce something of the
sort in 8.0.x, please submit a test case.
regards, tom lane
Index: src/backend/optimizer/plan/subselect.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/optimizer/plan/subselect.c,v
retrieving revision 1.112.2.1
diff -c -r1.112.2.1 subselect.c
*** src/backend/optimizer/plan/subselect.c 6 Dec 2006 19:40:08 -0000 1.112.2.1
--- src/backend/optimizer/plan/subselect.c 18 Jul 2007 21:23:41 -0000
***************
*** 1306,1315 ****
Param *prm;
/*
! * Set up for a new level of subquery. This is just to keep
! * SS_finalize_plan from becoming confused.
*/
- PlannerQueryLevel++;
PlannerInitPlan = NIL;
/*
--- 1306,1319 ----
Param *prm;
/*
! * 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.)
*/
PlannerInitPlan = NIL;
/*
***************
*** 1317,1324 ****
*/
SS_finalize_plan(plan, root->parse->rtable);
! /* Return to outer subquery context */
! PlannerQueryLevel--;
PlannerInitPlan = saved_initplan;
/*
--- 1321,1327 ----
*/
SS_finalize_plan(plan, root->parse->rtable);
! /* Restore outer initplan list */
PlannerInitPlan = saved_initplan;
/*