diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-05-18 18:49:41 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-05-18 18:49:41 +0000 |
commit | a5b370943e1a7936e0118641f16acf6dbcc829cc (patch) | |
tree | 3c133b3fd1134cc9fb2ca711b58dda6bc3c7e5f0 /src/backend/optimizer/util/clauses.c | |
parent | 2c50f6344b4160dc8748b9a12db64fa2e94b46e0 (diff) | |
download | postgresql-a5b370943e1a7936e0118641f16acf6dbcc829cc.tar.gz postgresql-a5b370943e1a7936e0118641f16acf6dbcc829cc.zip |
Teach query_tree_walker, query_tree_mutator, and SS_finalize_plan to
process function RTE expressions, which they were previously missing.
This allows outer-Var references and subselects to work correctly in
the arguments of a function RTE. Install check to prevent function RTEs
from cross-referencing Vars of sibling FROM-items, which doesn't make
any sense (if you want to join, write a JOIN or WHERE clause).
Diffstat (limited to 'src/backend/optimizer/util/clauses.c')
-rw-r--r-- | src/backend/optimizer/util/clauses.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 972c7f94633..9f059521f4d 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.99 2002/05/12 23:43:03 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.100 2002/05/18 18:49:41 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -1915,7 +1915,6 @@ query_tree_walker(Query *query, { case RTE_RELATION: case RTE_SPECIAL: - case RTE_FUNCTION: /* nothing to do */ break; case RTE_SUBQUERY: @@ -1927,6 +1926,10 @@ query_tree_walker(Query *query, if (walker(rte->joinaliasvars, context)) return true; break; + case RTE_FUNCTION: + if (walker(rte->funcexpr, context)) + return true; + break; } } return false; @@ -2293,7 +2296,6 @@ query_tree_mutator(Query *query, { case RTE_RELATION: case RTE_SPECIAL: - case RTE_FUNCTION: /* nothing to do, don't bother to make a copy */ break; case RTE_SUBQUERY: @@ -2310,6 +2312,11 @@ query_tree_mutator(Query *query, MUTATE(newrte->joinaliasvars, rte->joinaliasvars, List *); rte = newrte; break; + case RTE_FUNCTION: + FLATCOPY(newrte, rte, RangeTblEntry); + MUTATE(newrte->funcexpr, rte->funcexpr, Node *); + rte = newrte; + break; } newrt = lappend(newrt, rte); } |