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.