From ca4541285339912ee8b69dc28f433cb5f9450a1a Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Wed, 18 Feb 1998 07:32:17 +0000 Subject: [PATCH] Add new subselect test. --- src/test/regress/expected/subselect.out | 142 ++++++++++++++++++++++++ src/test/regress/sql/subselect.sql | 71 ++++++++++++ src/test/regress/sql/tests | 1 + 3 files changed, 214 insertions(+) create mode 100644 src/test/regress/expected/subselect.out create mode 100644 src/test/regress/sql/subselect.sql diff --git a/src/test/regress/expected/subselect.out b/src/test/regress/expected/subselect.out new file mode 100644 index 0000000000..03d7a54aba --- /dev/null +++ b/src/test/regress/expected/subselect.out @@ -0,0 +1,142 @@ +QUERY: SELECT 1 AS one WHERE 1 IN (SELECT 1); +one +--- + 1 +(1 row) + +QUERY: SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1); +zero +---- +(0 rows) + +QUERY: SELECT 1 AS zero WHERE 1 IN (SELECT 2); +zero +---- +(0 rows) + +QUERY: CREATE TABLE SUBSELECT_TBL ( + f1 integer, + f2 integer, + f3 float +); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (1, 2, 3); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (2, 3, 4); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (3, 4, 5); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (1, 1, 1); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (2, 2, 2); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (3, 3, 3); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (6, 7, 8); +QUERY: INSERT INTO SUBSELECT_TBL VALUES (8, 9, NULL); +QUERY: SELECT '' AS eight, * FROM SUBSELECT_TBL; +eight|f1|f2|f3 +-----+--+--+-- + | 1| 2| 3 + | 2| 3| 4 + | 3| 4| 5 + | 1| 1| 1 + | 2| 2| 2 + | 3| 3| 3 + | 6| 7| 8 + | 8| 9| +(8 rows) + +QUERY: SELECT '' AS two, f1 AS "Constant Select" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT 1); +two|Constant Select +---+--------------- + | 1 + | 1 +(2 rows) + +QUERY: SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL); +six|Uncorrelated Field +---+------------------ + | 1 + | 2 + | 3 + | 1 + | 2 + | 3 +(6 rows) + +QUERY: SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE + f2 IN (SELECT f1 FROM SUBSELECT_TBL)); +six|Uncorrelated Field +---+------------------ + | 1 + | 2 + | 3 + | 1 + | 2 + | 3 +(6 rows) + +QUERY: SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE f2 = f1); +six|Correlated Field|Second Field +---+----------------+------------ + | 1| 3 + | 2| 4 + | 3| 5 + | 1| 1 + | 2| 2 + | 3| 3 +(6 rows) + +QUERY: SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE CAST(f2 AS float) = f3); +six|Correlated Field|Second Field +---+----------------+------------ + | 1| 3 + | 2| 4 + | 3| 5 + | 1| 1 + | 2| 2 + | 3| 3 +(6 rows) + +QUERY: SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE f2 = CAST(f3 AS integer)); +ERROR: dtoi4: unable to convert null +QUERY: SELECT '' AS five, f1 AS "Correlated Field" + FROM SUBSELECT_TBL + WHERE (f1, f2) IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL WHERE f3 IS NOT NULL); +five|Correlated Field +----+---------------- + | 2 + | 3 + | 1 + | 2 + | 3 +(5 rows) + +QUERY: SELECT '' AS three, f1 AS "Correlated Field" + FROM SUBSELECT_TBL + WHERE (f1, f2) NOT IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL WHERE f3 IS NOT NULL); +three|Correlated Field +-----+---------------- + | 1 + | 6 + | 8 +(3 rows) + +QUERY: SELECT '' AS eight, ss.f1 AS "Correlated Field", ss.f3 AS "Second Field" + FROM SUBSELECT_TBL ss + WHERE f1 NOT IN (SELECT f1 FROM INT4_TBL WHERE f1 != ss.f1); +eight|Correlated Field|Second Field +-----+----------------+------------ + | 1| 3 + | 2| 4 + | 3| 5 + | 1| 1 + | 2| 2 + | 3| 3 + | 6| 8 + | 8| +(8 rows) + diff --git a/src/test/regress/sql/subselect.sql b/src/test/regress/sql/subselect.sql new file mode 100644 index 0000000000..a227c048ac --- /dev/null +++ b/src/test/regress/sql/subselect.sql @@ -0,0 +1,71 @@ +-- +-- Subselects +-- + +SELECT 1 AS one WHERE 1 IN (SELECT 1); + +SELECT 1 AS zero WHERE 1 NOT IN (SELECT 1); + +SELECT 1 AS zero WHERE 1 IN (SELECT 2); + +-- Set up some simple test tables + +CREATE TABLE SUBSELECT_TBL ( + f1 integer, + f2 integer, + f3 float +); + +INSERT INTO SUBSELECT_TBL VALUES (1, 2, 3); +INSERT INTO SUBSELECT_TBL VALUES (2, 3, 4); +INSERT INTO SUBSELECT_TBL VALUES (3, 4, 5); +INSERT INTO SUBSELECT_TBL VALUES (1, 1, 1); +INSERT INTO SUBSELECT_TBL VALUES (2, 2, 2); +INSERT INTO SUBSELECT_TBL VALUES (3, 3, 3); +INSERT INTO SUBSELECT_TBL VALUES (6, 7, 8); +INSERT INTO SUBSELECT_TBL VALUES (8, 9, NULL); + +SELECT '' AS eight, * FROM SUBSELECT_TBL; + +-- Uncorrelated subselects + +SELECT '' AS two, f1 AS "Constant Select" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT 1); + +SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL); + +SELECT '' AS six, f1 AS "Uncorrelated Field" FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE + f2 IN (SELECT f1 FROM SUBSELECT_TBL)); + +-- Correlated subselects + +SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE f2 = f1); + +SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE CAST(f2 AS float) = f3); + +SELECT '' AS six, f1 AS "Correlated Field", f3 AS "Second Field" + FROM SUBSELECT_TBL + WHERE f1 IN (SELECT f2 FROM SUBSELECT_TBL WHERE f2 = CAST(f3 AS integer)); + +SELECT '' AS five, f1 AS "Correlated Field" + FROM SUBSELECT_TBL + WHERE (f1, f2) IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL WHERE f3 IS NOT NULL); + +SELECT '' AS three, f1 AS "Correlated Field" + FROM SUBSELECT_TBL + WHERE (f1, f2) NOT IN (SELECT f2, CAST(f3 AS int4) FROM SUBSELECT_TBL WHERE f3 IS NOT NULL); + +-- +-- Use some existing tables in the regression test +-- + +SELECT '' AS eight, ss.f1 AS "Correlated Field", ss.f3 AS "Second Field" + FROM SUBSELECT_TBL ss + WHERE f1 NOT IN (SELECT f1 FROM INT4_TBL WHERE f1 != ss.f1); + diff --git a/src/test/regress/sql/tests b/src/test/regress/sql/tests index f9bd529aa2..79513431f1 100644 --- a/src/test/regress/sql/tests +++ b/src/test/regress/sql/tests @@ -48,6 +48,7 @@ select select_into select_distinct select_distinct_on +subselect aggregates transactions random