aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/util/clauses.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-05-18 18:49:41 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-05-18 18:49:41 +0000
commita5b370943e1a7936e0118641f16acf6dbcc829cc (patch)
tree3c133b3fd1134cc9fb2ca711b58dda6bc3c7e5f0 /src/backend/optimizer/util/clauses.c
parent2c50f6344b4160dc8748b9a12db64fa2e94b46e0 (diff)
downloadpostgresql-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.c13
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);
}