aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_clause.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r--src/backend/parser/parse_clause.c31
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 */