diff options
Diffstat (limited to 'src/backend/optimizer/plan/planner.c')
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 500297f2155..a3eeced7bb1 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.117 2002/05/12 23:43:03 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.118 2002/05/18 02:25:49 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -101,7 +101,7 @@ planner(Query *parse) result_plan->nParamExec = length(PlannerParamVar); /* final cleanup of the plan */ - set_plan_references(parse, result_plan); + set_plan_references(result_plan, parse->rtable); /* restore state for outer planner, if any */ PlannerQueryLevel = save_PlannerQueryLevel; @@ -175,6 +175,17 @@ subquery_planner(Query *parse, double tuple_fraction) parse->havingQual = preprocess_expression(parse, parse->havingQual, EXPRKIND_HAVING); + /* Also need to preprocess expressions for function RTEs */ + foreach(lst, parse->rtable) + { + RangeTblEntry *rte = (RangeTblEntry *) lfirst(lst); + + if (rte->rtekind == RTE_FUNCTION) + rte->funcexpr = preprocess_expression(parse, rte->funcexpr, + EXPRKIND_TARGET); + /* These are not targetlist items, but close enough... */ + } + /* * Check for ungrouped variables passed to subplans in targetlist and * HAVING clause (but not in WHERE or JOIN/ON clauses, since those are @@ -737,7 +748,7 @@ preprocess_expression(Query *parse, Node *expr, int kind) } } if (has_join_rtes) - expr = flatten_join_alias_vars(expr, parse, false); + expr = flatten_join_alias_vars(expr, parse->rtable, false); return expr; } |