diff options
Diffstat (limited to 'src/backend/optimizer/plan/planmain.c')
-rw-r--r-- | src/backend/optimizer/plan/planmain.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index 7dcdaf250f9..171724983dc 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/plan/planmain.c,v 1.110 2008/08/14 18:47:59 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/plan/planmain.c,v 1.111 2008/10/21 20:42:53 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -23,6 +23,7 @@ #include "optimizer/cost.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" +#include "optimizer/placeholder.h" #include "optimizer/planmain.h" #include "optimizer/tlist.h" #include "utils/selfuncs.h" @@ -132,7 +133,7 @@ query_planner(PlannerInfo *root, List *tlist, * for "simple" rels. * * NOTE: append_rel_list was set up by subquery_planner, so do not touch - * here; eq_classes may contain data already, too. + * here; ditto placeholder_list; eq_classes may contain data already, too. */ root->simple_rel_array_size = list_length(parse->rtable) + 1; root->simple_rel_array = (RelOptInfo **) @@ -204,12 +205,6 @@ query_planner(PlannerInfo *root, List *tlist, * added to appropriate lists belonging to the mentioned relations. We * also build EquivalenceClasses for provably equivalent expressions, and * form a target joinlist for make_one_rel() to work from. - * - * Note: all subplan nodes will have "flat" (var-only) tlists. This - * implies that all expression evaluations are done at the root of the - * plan tree. Once upon a time there was code to try to push expensive - * function calls down to lower plan nodes, but that's dead code and has - * been for a long time... */ build_base_rel_tlists(root, tlist); @@ -241,6 +236,13 @@ query_planner(PlannerInfo *root, List *tlist, root->sort_pathkeys = canonicalize_pathkeys(root, root->sort_pathkeys); /* + * Examine any "placeholder" expressions generated during subquery pullup. + * Make sure that we know what level to evaluate them at, and that the + * Vars they need are marked as needed. + */ + fix_placeholder_eval_levels(root); + + /* * Ready to do the primary planning. */ final_rel = make_one_rel(root, joinlist); |