aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-11-23 03:57:31 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-11-23 03:57:31 +0000
commit48437f5c3af2c6a64ef468a3cdd15f674b7e219f (patch)
tree405247bb5e6162c65cd30ce04bb5c083319c63af /src
parent5479c11bfa3be21afca44ef59e2e14204bc0a142 (diff)
downloadpostgresql-48437f5c3af2c6a64ef468a3cdd15f674b7e219f.tar.gz
postgresql-48437f5c3af2c6a64ef468a3cdd15f674b7e219f.zip
Ensure that mergejoin plan will be considered for FULL OUTER JOIN even
if enable_mergejoin = OFF. Must do this, because we have no other implementation method for full joins.
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/path/joinpath.c9
-rw-r--r--src/backend/optimizer/plan/initsplan.c10
2 files changed, 13 insertions, 6 deletions
diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c
index 0dbfef8b2fc..6096f8c3f26 100644
--- a/src/backend/optimizer/path/joinpath.c
+++ b/src/backend/optimizer/path/joinpath.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.58 2000/10/05 19:48:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.59 2000/11/23 03:57:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -75,9 +75,12 @@ add_paths_to_joinrel(Query *root,
List *mergeclause_list = NIL;
/*
- * Find potential mergejoin clauses.
+ * Find potential mergejoin clauses. We can skip this if we are not
+ * interested in doing a mergejoin. However, mergejoin is currently
+ * our only way of implementing full outer joins, so override
+ * mergejoin disable if it's a full join.
*/
- if (enable_mergejoin)
+ if (enable_mergejoin || jointype == JOIN_FULL)
mergeclause_list = select_mergejoin_clauses(joinrel,
outerrel,
innerrel,
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index 3bea06e2af6..ee037c750b6 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.52 2000/11/16 22:30:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.53 2000/11/23 03:57:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -454,9 +454,13 @@ distribute_qual_to_rels(Query *root, Node *clause,
* joining.
*
* We don't bother setting the merge/hashjoin info if we're not
- * going to need it.
+ * going to need it. We do want to know about mergejoinable ops
+ * in any potential equijoin clause (see later in this routine),
+ * and we ignore enable_mergejoin if isouterjoin is true, because
+ * mergejoin is the only implementation we have for full and right
+ * outer joins.
*/
- if (enable_mergejoin || can_be_equijoin)
+ if (enable_mergejoin || isouterjoin || can_be_equijoin)
check_mergejoinable(restrictinfo);
if (enable_hashjoin)
check_hashjoinable(restrictinfo);