From 3ef18797b83b9b274218009802a5994b7f41c818 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 24 Oct 2007 20:54:27 +0000
Subject: [PATCH] Fix an error in make_outerjoininfo introduced by my patch of
 30-Aug: the code neglected to test whether an outer join's join-condition
 actually refers to the lower outer join it is looking at.  (The comment
 correctly described what was supposed to happen, but the code didn't do
 it...)  This often resulted in adding an unnecessary constraint on the join
 order of the two outer joins, which was bad enough.  However, it also seems
 to expose a performance problem in an older patch (from 15-Feb): once we've
 decided that there is a join ordering constraint, we will start trying
 clauseless joins between every combination of rels within the constraint,
 which pointlessly eats up lots of time and space if there are numerous rels
 below the outer join.  That probably needs to be revisited :-(.  Per gripe
 from Jakub Ouhrabka.

---
 src/backend/optimizer/plan/initsplan.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index 70543613fe..bacd875abf 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.134 2007/10/04 20:44:47 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.135 2007/10/24 20:54:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -623,6 +623,7 @@ make_outerjoininfo(PlannerInfo *root,
 		 * rel in the lower OJ's min_righthand, not its whole syn_righthand.
 		 */
 		if (bms_overlap(left_rels, otherinfo->syn_righthand) &&
+			bms_overlap(clause_relids, otherinfo->syn_righthand) &&
 			!bms_overlap(strict_relids, otherinfo->min_righthand))
 		{
 			min_lefthand = bms_add_members(min_lefthand,
-- 
2.49.0