]> granicus.if.org Git - postgresql/commitdiff
Push subplan clauses to the back in qual lists for join plans, not
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Aug 2003 22:56:51 +0000 (22:56 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Aug 2003 22:56:51 +0000 (22:56 +0000)
only scan plans.  Per observation from Rod Taylor.

src/backend/optimizer/plan/createplan.c

index 634cfb3a57c4f5709f4ed6bb220ce009b49a04cb..fb5040c94ce603d49c340210edee55e1e36280b1 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.155 2003/08/17 19:58:05 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.156 2003/08/26 22:56:51 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -944,6 +944,10 @@ create_nestloop_plan(Query *root,
                otherclauses = NIL;
        }
 
+       /* Sort clauses into best execution order */
+       joinclauses = order_qual_clauses(root, joinclauses);
+       otherclauses = order_qual_clauses(root, otherclauses);
+
        join_plan = make_nestloop(tlist,
                                                          joinclauses,
                                                          otherclauses,
@@ -995,6 +999,11 @@ create_mergejoin_plan(Query *root,
        mergeclauses = get_switched_clauses(best_path->path_mergeclauses,
                                                 best_path->jpath.outerjoinpath->parent->relids);
 
+       /* Sort clauses into best execution order */
+       joinclauses = order_qual_clauses(root, joinclauses);
+       otherclauses = order_qual_clauses(root, otherclauses);
+       mergeclauses = order_qual_clauses(root, mergeclauses);
+
        /*
         * Create explicit sort nodes for the outer and inner join paths if
         * necessary.  The sort cost was already accounted for in the path.
@@ -1078,6 +1087,11 @@ create_hashjoin_plan(Query *root,
        hashclauses = get_switched_clauses(best_path->path_hashclauses,
                                                 best_path->jpath.outerjoinpath->parent->relids);
 
+       /* Sort clauses into best execution order */
+       joinclauses = order_qual_clauses(root, joinclauses);
+       otherclauses = order_qual_clauses(root, otherclauses);
+       hashclauses = order_qual_clauses(root, hashclauses);
+
        /*
         * Extract the inner hash keys (right-hand operands of the
         * hashclauses) to put in the Hash node.