aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-12-14 16:28:49 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-12-14 16:28:49 +0000
commit599e225c114d74eaf4b5d24190abbb4962948073 (patch)
tree258586c359e10c14965a9748b0139f1d3d7bc044
parentf23e9f7a54f101066667b8ddfedb644a6accfb81 (diff)
downloadpostgresql-599e225c114d74eaf4b5d24190abbb4962948073.tar.gz
postgresql-599e225c114d74eaf4b5d24190abbb4962948073.zip
Fix problem with whole-row Vars referencing sub-select outputs, per
example from Jim Dew. Add some simple regression tests, since this is an area we seem to break regularly :-(
-rw-r--r--src/backend/executor/execQual.c4
-rw-r--r--src/test/regress/expected/select.out21
-rw-r--r--src/test/regress/sql/select.sql6
3 files changed, 29 insertions, 2 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 37e4d704ce4..796c65d1143 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.183.2.1 2005/11/22 18:23:08 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.183.2.2 2005/12/14 16:28:48 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -541,7 +541,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;
/*
diff --git a/src/test/regress/expected/select.out b/src/test/regress/expected/select.out
index b51aea8fb5c..f1facdc8e9d 100644
--- a/src/test/regress/expected/select.out
+++ b/src/test/regress/expected/select.out
@@ -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)
+
diff --git a/src/test/regress/sql/select.sql b/src/test/regress/sql/select.sql
index 02aac6c5068..223ccb58271 100644
--- a/src/test/regress/sql/select.sql
+++ b/src/test/regress/sql/select.sql
@@ -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;