diff options
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r-- | src/backend/parser/parse_clause.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index dbf17759617..0e5fbfd28ac 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.180 2008/10/04 21:56:54 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.181 2008/10/06 02:12:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -631,34 +631,15 @@ transformFromClauseItem(ParseState *pstate, Node *n, RangeTblEntry *rte = NULL; int rtindex; - /* - * If it is an unqualified name, it might be a reference to some - * CTE visible in this or a parent query. - */ + /* if it is an unqualified name, it might be a CTE reference */ if (!rv->schemaname) { - ParseState *ps; + CommonTableExpr *cte; Index levelsup; - for (ps = pstate, levelsup = 0; - ps != NULL; - ps = ps->parentParseState, levelsup++) - { - ListCell *lc; - - foreach(lc, ps->p_ctenamespace) - { - CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); - - if (strcmp(rv->relname, cte->ctename) == 0) - { - rte = transformCTEReference(pstate, rv, cte, levelsup); - break; - } - } - if (rte) - break; - } + cte = scanNameSpaceForCTE(pstate, rv->relname, &levelsup); + if (cte) + rte = transformCTEReference(pstate, rv, cte, levelsup); } /* if not found as a CTE, must be a table reference */ |