[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pgsql-bugs
Subject:    Re: [BUGS] BUG #3459: Query Error : plan should not reference subplan's variable
From:       Tom Lane <tgl () sss ! pgh ! pa ! us>
Date:       2007-07-18 21:44:21
Message-ID: 10497.1184795061 () sss ! pgh ! pa ! us
[Download RAW message or body]

"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;
  
  	/*

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic