aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_target.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-10-06 15:15:22 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-10-06 15:15:22 +0000
commite64bb65aff3f53b4f56b4a1ee549930b568cec99 (patch)
tree805774acaf6a9bb8b10b0d2abc483aeba4a989d4 /src/backend/parser/parse_target.c
parent5f853c655663bf829c02895de2b445a5f3caa24b (diff)
downloadpostgresql-e64bb65aff3f53b4f56b4a1ee549930b568cec99.tar.gz
postgresql-e64bb65aff3f53b4f56b4a1ee549930b568cec99.zip
Fix GetCTEForRTE() to deal with the possibility that the RTE it's given came
from a query level above the current ParseState.
Diffstat (limited to 'src/backend/parser/parse_target.c')
-rw-r--r--src/backend/parser/parse_target.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index ed54abe7039..d83caab7e8c 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.166 2008/10/05 22:20:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.167 2008/10/06 15:15:22 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -308,7 +308,7 @@ markTargetListOrigin(ParseState *pstate, TargetEntry *tle,
*/
if (attnum != InvalidAttrNumber && !rte->self_reference)
{
- CommonTableExpr *cte = GetCTEForRTE(pstate, rte);
+ CommonTableExpr *cte = GetCTEForRTE(pstate, rte, netlevelsup);
TargetEntry *ste;
/* should be analyzed by now */
@@ -1206,7 +1206,7 @@ expandRecordVariable(ParseState *pstate, Var *var, int levelsup)
/* CTE reference: examine subquery's output expr */
if (!rte->self_reference)
{
- CommonTableExpr *cte = GetCTEForRTE(pstate, rte);
+ CommonTableExpr *cte = GetCTEForRTE(pstate, rte, netlevelsup);
TargetEntry *ste;
/* should be analyzed by now */
@@ -1230,7 +1230,9 @@ expandRecordVariable(ParseState *pstate, Var *var, int levelsup)
MemSet(&mypstate, 0, sizeof(mypstate));
/* this loop must work, since GetCTEForRTE did */
- for (levelsup = 0; levelsup < rte->ctelevelsup; levelsup++)
+ for (levelsup = 0;
+ levelsup < rte->ctelevelsup + netlevelsup;
+ levelsup++)
pstate = pstate->parentParseState;
mypstate.parentParseState = pstate;
mypstate.p_rtable = ((Query *) cte->ctequery)->rtable;