Search Postgresql Archives

Re: 9.0RC1 error variable not found in subplan target lists

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> "Andrus" <kobruleht2@xxxxxx> writes:
>> Should I try 9.0 release

> No, it's still busted in HEAD :-(.  Probably won't be too hard to fix,
> but I need to go find the bug.

Here's the patch if it helps.

			regards, tom lane

diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 5fc056e2a572db2299f2624f19e8988e671df034..1355c18317a7399e028c16f3b8edffc410687a27 100644
*** a/src/backend/optimizer/plan/analyzejoins.c
--- b/src/backend/optimizer/plan/analyzejoins.c
***************
*** 26,31 ****
--- 26,32 ----
  #include "optimizer/pathnode.h"
  #include "optimizer/paths.h"
  #include "optimizer/planmain.h"
+ #include "optimizer/var.h"
  
  /* local functions */
  static bool join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo);
*************** join_is_removable(PlannerInfo *root, Spe
*** 197,212 ****
  	}
  
  	/*
! 	 * Similarly check that the inner rel doesn't produce any PlaceHolderVars
! 	 * that will be used above the join.
  	 */
  	foreach(l, root->placeholder_list)
  	{
  		PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l);
  
! 		if (bms_is_subset(phinfo->ph_eval_at, innerrel->relids) &&
! 			!bms_is_subset(phinfo->ph_needed, joinrelids))
! 			return false;
  	}
  
  	/*
--- 198,220 ----
  	}
  
  	/*
! 	 * Similarly check that the inner rel isn't needed by any PlaceHolderVars
! 	 * that will be used above the join.  We only need to fail if such a PHV
! 	 * actually references some inner-rel attributes; but the correct check
! 	 * for that is relatively expensive, so we first check against ph_eval_at,
! 	 * which must mention the inner rel if the PHV uses any inner-rel attrs.
  	 */
  	foreach(l, root->placeholder_list)
  	{
  		PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l);
  
! 		if (bms_is_subset(phinfo->ph_needed, joinrelids))
! 			continue;			/* PHV is not used above the join */
! 		if (!bms_overlap(phinfo->ph_eval_at, innerrel->relids))
! 			continue;			/* it definitely doesn't reference innerrel */
! 		if (bms_overlap(pull_varnos((Node *) phinfo->ph_var),
! 						innerrel->relids))
! 			return false;		/* it does reference innerrel */
  	}
  
  	/*

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux