From 73e3edf2e64925a5a012c4155ab453a7a864895a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 26 Aug 2003 22:56:51 +0000 Subject: [PATCH] Push subplan clauses to the back in qual lists for join plans, not only scan plans. Per observation from Rod Taylor. --- src/backend/optimizer/plan/createplan.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 634cfb3a57..fb5040c94c 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -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.