diff options
author | Tom Lane | 2003-01-16 18:26:02 +0000 |
---|---|---|
committer | Tom Lane | 2003-01-16 18:26:02 +0000 |
commit | 136828c699edd11594c84b363e5d9abb10a5bc8d (patch) | |
tree | cd8c054e5f82c545807de783668d4c96b1478b7f | |
parent | 57ce0f84f28f8a70d9f854513832f8f1a3ccca3c (diff) |
Ooops, didn't cut-and-paste quite enough code from ResolveNew;
with result that flatten_join_alias_vars failed to descend into subselects.
-rw-r--r-- | src/backend/optimizer/util/var.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c index 11267428d7a..47db90ad8a0 100644 --- a/src/backend/optimizer/util/var.c +++ b/src/backend/optimizer/util/var.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.44 2003/01/15 19:35:44 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.45 2003/01/16 18:26:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -360,6 +360,23 @@ flatten_join_alias_vars_mutator(Node *node, /* expand it; recurse in case join input is itself a join */ return flatten_join_alias_vars_mutator(newvar, context); } + + /* + * Since expression_tree_mutator won't touch subselects, we have to + * handle them specially. + */ + if (IsA(node, SubLink)) + { + SubLink *sublink = (SubLink *) node; + SubLink *newnode; + + FLATCOPY(newnode, sublink, SubLink); + MUTATE(newnode->lefthand, sublink->lefthand, List *, + flatten_join_alias_vars_mutator, context); + MUTATE(newnode->subselect, sublink->subselect, Node *, + flatten_join_alias_vars_mutator, context); + return (Node *) newnode; + } if (IsA(node, Query)) { /* Recurse into RTE subquery or not-yet-planned sublink subquery */ @@ -375,6 +392,7 @@ flatten_join_alias_vars_mutator(Node *node, } /* Already-planned tree not supported */ Assert(!is_subplan(node)); + return expression_tree_mutator(node, flatten_join_alias_vars_mutator, (void *) context); } |