markTargetListOrigin neglected to handle outer-scope Vars properly;
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 31 May 2003 19:03:34 +0000 (19:03 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 31 May 2003 19:03:34 +0000 (19:03 +0000)
per report from Joe Conway.

src/backend/parser/parse_target.c

index 10892bc292d73014c9645a36e2b2b25ad30150d9..0b36e6b5e58e9a738cc6c0406a85b928588fd036 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.101 2003/05/06 00:20:32 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.102 2003/05/31 19:03:34 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -236,11 +236,18 @@ markTargetListOrigins(ParseState *pstate, List *targetlist)
 static void
 markTargetListOrigin(ParseState *pstate, Resdom *res, Var *var)
 {
+   Index       levelsup;
    RangeTblEntry *rte;
    AttrNumber  attnum;
 
    if (var == NULL || !IsA(var, Var))
        return;
+   levelsup = var->varlevelsup;
+   while (levelsup-- > 0)
+   {
+       pstate = pstate->parentParseState;
+       Assert(pstate != NULL);
+   }
    Assert(var->varno > 0 &&
           (int) var->varno <= length(pstate->p_rtable));
    rte = rt_fetch(var->varno, pstate->p_rtable);