]> granicus.if.org Git - postgresql/commitdiff
Ensure that mergejoin plan will be considered for FULL OUTER JOIN even
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 23 Nov 2000 03:57:31 +0000 (03:57 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 23 Nov 2000 03:57:31 +0000 (03:57 +0000)
if enable_mergejoin = OFF.  Must do this, because we have no other
implementation method for full joins.

src/backend/optimizer/path/joinpath.c
src/backend/optimizer/plan/initsplan.c

index 0dbfef8b2fc949c08379ef4a15064427031615bf..6096f8c3f26e13cff486478b28479a78e8a8f47e 100644 (file)
@@ -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,
index 3bea06e2af6b296f53a5d6e24e8d3b3881ce318e..ee037c750b68ee8bb1593e0cdc60b5238d8dd957 100644 (file)
@@ -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);