]> granicus.if.org Git - postgresql/commitdiff
Fix problem with whole-row Vars referencing sub-select outputs, per
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Dec 2005 16:28:32 +0000 (16:28 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Dec 2005 16:28:32 +0000 (16:28 +0000)
example from Jim Dew.  Add some simple regression tests, since this is
an area we seem to break regularly :-(

src/backend/executor/execQual.c
src/test/regress/expected/select.out
src/test/regress/sql/select.sql

index 9f1c26e01516c66e8950d2b6c41ecf699296b3e4..2df9f1685cb81cfb5e507a9f15ff4496c20f3004 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.185 2005/11/22 18:17:10 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.186 2005/12/14 16:28:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -523,7 +523,7 @@ ExecEvalWholeRowVar(ExprState *exprstate, ExprContext *econtext,
        Assert(variable->varno != OUTER);
        slot = econtext->ecxt_scantuple;
 
-       tuple = slot->tts_tuple;
+       tuple = ExecFetchSlotTuple(slot);
        tupleDesc = slot->tts_tupleDescriptor;
 
        /*
index b51aea8fb5c0639842cd59fca443b7aa37144736..f1facdc8e9d21829208442d224778f9423947003 100644 (file)
@@ -431,3 +431,24 @@ SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
  mary    |   8
 (58 rows)
 
+--
+-- Test some cases involving whole-row Var referencing a subquery
+--
+select foo from (select 1) as foo;
+ foo 
+-----
+ (1)
+(1 row)
+
+select foo from (select null) as foo;
+ foo 
+-----
+ ()
+(1 row)
+
+select foo from (select 'xyzzy',1,null) as foo;
+    foo     
+------------
+ (xyzzy,1,)
+(1 row)
+
index 02aac6c50687901e7197a044d503ec62b8fc1741..223ccb582719e95fe52f1038372f47d2cf3333fa 100644 (file)
@@ -104,3 +104,9 @@ SELECT p.name, p.age FROM person* p;
 --
 SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
 
+--
+-- Test some cases involving whole-row Var referencing a subquery
+--
+select foo from (select 1) as foo;
+select foo from (select null) as foo;
+select foo from (select 'xyzzy',1,null) as foo;