OSDN Git Service

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 9f1c26e..2df9f16 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 b51aea8..f1facdc 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 02aac6c..223ccb5 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;