aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/createplan.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-07-31 19:53:50 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-07-31 19:53:50 +0000
commit1be62b532b441aaff4b2d9c9dc028b96c4b7a8c7 (patch)
treef2a9ab9ff05c13f759bf58945166027c0f4bc030 /src/backend/optimizer/plan/createplan.c
parent5bd7b8342685a7d6d5ab134b321f8e4ccfdeaa16 (diff)
downloadpostgresql-1be62b532b441aaff4b2d9c9dc028b96c4b7a8c7.tar.gz
postgresql-1be62b532b441aaff4b2d9c9dc028b96c4b7a8c7.zip
Fix a bug in the original implementation of redundant-join-clause removal:
clauses in which one side or the other references both sides of the join cannot be removed as redundant, because that expression won't have been constrained below the join. Per report from Sergey Burladyan.
Diffstat (limited to 'src/backend/optimizer/plan/createplan.c')
-rw-r--r--src/backend/optimizer/plan/createplan.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 14f1f1a10f4..75b67e8879f 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.217 2006/10/04 00:29:54 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.217.2.1 2007/07/31 19:53:49 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1398,7 +1398,9 @@ create_nestloop_plan(PlannerInfo *root,
select_nonredundant_join_clauses(root,
joinrestrictclauses,
innerpath->indexclauses,
- IS_OUTER_JOIN(best_path->jointype));
+ best_path->outerjoinpath->parent->relids,
+ best_path->innerjoinpath->parent->relids,
+ IS_OUTER_JOIN(best_path->jointype));
}
}
else if (IsA(best_path->innerjoinpath, BitmapHeapPath))
@@ -1430,7 +1432,9 @@ create_nestloop_plan(PlannerInfo *root,
select_nonredundant_join_clauses(root,
joinrestrictclauses,
bitmapclauses,
- IS_OUTER_JOIN(best_path->jointype));
+ best_path->outerjoinpath->parent->relids,
+ best_path->innerjoinpath->parent->relids,
+ IS_OUTER_JOIN(best_path->jointype));
}
}