should be it
This commit is contained in:
482
external/duckdb/test/sql/setops/test_pg_union.test
vendored
Normal file
482
external/duckdb/test/sql/setops/test_pg_union.test
vendored
Normal file
@@ -0,0 +1,482 @@
|
||||
# name: test/sql/setops/test_pg_union.test
|
||||
# description: Postgres' 'union' tests, taken from src/test/regress/sql/union.sql
|
||||
# group: [setops]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
|
||||
#--
|
||||
#-- UNION (also INTERSECT, EXCEPT)
|
||||
#--
|
||||
|
||||
#-- Simple UNION constructs
|
||||
query I
|
||||
SELECT 1 AS two UNION SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1 AS one UNION SELECT 1 ORDER BY 1;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT 1 AS two UNION ALL SELECT 2;
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1 AS two UNION ALL SELECT 1;
|
||||
----
|
||||
1
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT 1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1;
|
||||
----
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT 1 AS two UNION SELECT 2 UNION SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1
|
||||
2
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS two UNION SELECT 2.2 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.2
|
||||
|
||||
#-- Mixed types
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS two UNION SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
|
||||
query I
|
||||
SELECT 1 AS two UNION SELECT 2.2 ORDER BY 1;
|
||||
----
|
||||
1.0
|
||||
2.2
|
||||
|
||||
query I
|
||||
SELECT 1 AS one UNION SELECT 1.0::float8 ORDER BY 1;
|
||||
----
|
||||
1.0
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS two UNION ALL SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
|
||||
query I
|
||||
SELECT 1.0::float8 AS two UNION ALL SELECT 1 ORDER BY 1;
|
||||
----
|
||||
1.0
|
||||
1.0
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
3.0
|
||||
|
||||
query I
|
||||
SELECT 1.1::float8 AS two UNION SELECT 2 UNION SELECT 2.0::float8 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
2.0
|
||||
|
||||
query I
|
||||
SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2) ORDER BY 1;
|
||||
----
|
||||
1.1
|
||||
2.0
|
||||
|
||||
#--
|
||||
#-- Try testing from tables...
|
||||
#--
|
||||
|
||||
statement ok
|
||||
CREATE TABLE FLOAT8_TBL(f1 float8);
|
||||
|
||||
statement ok
|
||||
INSERT INTO FLOAT8_TBL(f1) VALUES
|
||||
('0.0'),
|
||||
('-34.84'),
|
||||
('-1004.30'),
|
||||
('-1.2345678901234e+200'),
|
||||
('-1.2345678901234e-200');
|
||||
|
||||
statement ok
|
||||
CREATE TABLE INT4_TBL(f1 int4);
|
||||
|
||||
statement ok
|
||||
INSERT INTO INT4_TBL(f1) VALUES
|
||||
(' 0 '),
|
||||
('123456 '),
|
||||
(' -123456'),
|
||||
('2147483647'), -- largest and smallest values
|
||||
('-2147483647');
|
||||
|
||||
statement ok
|
||||
CREATE TABLE INT8_TBL(q1 int8, q2 int8);
|
||||
|
||||
statement ok
|
||||
INSERT INTO INT8_TBL VALUES
|
||||
(' 123 ',' 456'),
|
||||
('123 ','4567890123456789'),
|
||||
('4567890123456789','123'),
|
||||
(+4567890123456789,'4567890123456789'),
|
||||
('+4567890123456789','-4567890123456789');
|
||||
|
||||
statement ok
|
||||
CREATE TABLE CHAR_TBL(f1 char(4));
|
||||
|
||||
statement ok
|
||||
INSERT INTO CHAR_TBL (f1) VALUES
|
||||
('a'),
|
||||
('ab'),
|
||||
('abcd'),
|
||||
('abcd ');
|
||||
|
||||
statement ok
|
||||
CREATE TABLE VARCHAR_TBL(f1 varchar(4));
|
||||
|
||||
statement ok
|
||||
INSERT INTO VARCHAR_TBL (f1) VALUES
|
||||
('a'),
|
||||
('ab'),
|
||||
('abcd'),
|
||||
('abcd ');
|
||||
|
||||
query I
|
||||
SELECT f1 AS five FROM FLOAT8_TBL
|
||||
UNION
|
||||
SELECT f1 FROM FLOAT8_TBL
|
||||
ORDER BY 1;
|
||||
----
|
||||
-1.2345678901234e+200
|
||||
-1004.3
|
||||
-34.84
|
||||
-1.2345678901234e-200
|
||||
0.0
|
||||
|
||||
query I
|
||||
SELECT f1 AS ten FROM FLOAT8_TBL
|
||||
UNION ALL
|
||||
SELECT f1 FROM FLOAT8_TBL;
|
||||
----
|
||||
0.0
|
||||
-34.84
|
||||
-1004.3
|
||||
-1.2345678901234e+200
|
||||
-1.2345678901234e-200
|
||||
0.0
|
||||
-34.84
|
||||
-1004.3
|
||||
-1.2345678901234e+200
|
||||
-1.2345678901234e-200
|
||||
|
||||
query I
|
||||
SELECT f1 AS nine FROM FLOAT8_TBL
|
||||
UNION
|
||||
SELECT f1 FROM INT4_TBL
|
||||
ORDER BY 1;
|
||||
----
|
||||
-1.2345678901234e+200
|
||||
-2147483647.0
|
||||
-123456.0
|
||||
-1004.3
|
||||
-34.84
|
||||
-1.2345678901234e-200
|
||||
0.0
|
||||
123456.0
|
||||
2147483647.0
|
||||
|
||||
query I
|
||||
SELECT f1 AS ten FROM FLOAT8_TBL
|
||||
UNION ALL
|
||||
SELECT f1 FROM INT4_TBL;
|
||||
----
|
||||
0.0
|
||||
-34.84
|
||||
-1004.3
|
||||
-1.2345678901234e+200
|
||||
-1.2345678901234e-200
|
||||
0.0
|
||||
123456.0
|
||||
-123456.0
|
||||
2147483647.0
|
||||
-2147483647.0
|
||||
|
||||
query I
|
||||
SELECT f1 AS five FROM FLOAT8_TBL
|
||||
WHERE f1 BETWEEN -1e6 AND 1e6
|
||||
UNION
|
||||
SELECT f1 FROM INT4_TBL
|
||||
WHERE f1 BETWEEN 0 AND 1000000
|
||||
ORDER BY 1;
|
||||
----
|
||||
-1004.3
|
||||
-34.84
|
||||
-1.2345678901234e-200
|
||||
0.0
|
||||
123456.0
|
||||
|
||||
# disabled due to the lack of CHAR() in DuckDB
|
||||
mode skip
|
||||
|
||||
query I
|
||||
SELECT CAST(f1 AS char(4)) AS three FROM VARCHAR_TBL
|
||||
UNION
|
||||
SELECT f1 FROM CHAR_TBL
|
||||
ORDER BY 1;
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT f1 AS three FROM VARCHAR_TBL
|
||||
UNION
|
||||
SELECT CAST(f1 AS varchar) FROM CHAR_TBL
|
||||
ORDER BY 1;
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT f1 AS eight FROM VARCHAR_TBL
|
||||
UNION ALL
|
||||
SELECT f1 FROM CHAR_TBL;
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT f1 AS five FROM TEXT_TBL
|
||||
UNION
|
||||
SELECT f1 FROM VARCHAR_TBL
|
||||
UNION
|
||||
SELECT TRIM(TRAILING FROM f1) FROM CHAR_TBL
|
||||
ORDER BY 1;
|
||||
----
|
||||
|
||||
mode unskip
|
||||
|
||||
#--
|
||||
#-- INTERSECT and EXCEPT
|
||||
#--
|
||||
|
||||
query I
|
||||
SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
456
|
||||
|
||||
query I
|
||||
SELECT q2 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
456
|
||||
|
||||
query I
|
||||
SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
456
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
|
||||
statement error
|
||||
SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl FOR NO KEY UPDATE;
|
||||
----
|
||||
<REGEX>:Parser Error.*SELECT locking clause is not supported.*
|
||||
|
||||
#-- nested cases
|
||||
query III
|
||||
(SELECT 1,2,3 UNION SELECT 4,5,6) INTERSECT SELECT 4,5,6;
|
||||
----
|
||||
4 5 6
|
||||
|
||||
query III
|
||||
(SELECT 1,2,3 UNION SELECT 4,5,6 ORDER BY 1,2) INTERSECT SELECT 4,5,6;
|
||||
----
|
||||
4 5 6
|
||||
|
||||
query III
|
||||
(SELECT 1,2,3 UNION SELECT 4,5,6) EXCEPT SELECT 4,5,6;
|
||||
----
|
||||
1 2 3
|
||||
|
||||
query III
|
||||
(SELECT 1,2,3 UNION SELECT 4,5,6 ORDER BY 1,2) EXCEPT SELECT 4,5,6;
|
||||
----
|
||||
1 2 3
|
||||
|
||||
#--
|
||||
#-- Mixed types
|
||||
#--
|
||||
|
||||
query I
|
||||
SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl ORDER BY 1;
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl ORDER BY 1;
|
||||
----
|
||||
-1.2345678901234e+200
|
||||
-1004.3
|
||||
-34.84
|
||||
-1.2345678901234e-200
|
||||
|
||||
#--
|
||||
#-- Operator precedence and (((((extra))))) parentheses
|
||||
#--
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
123
|
||||
123
|
||||
456
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
|
||||
query I
|
||||
(((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl ORDER BY 1))) UNION ALL SELECT q2 FROM int8_tbl;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
456
|
||||
4567890123456789
|
||||
123
|
||||
4567890123456789
|
||||
-4567890123456789
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
456
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl UNION ALL (((SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1)));
|
||||
----
|
||||
123
|
||||
123
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
4567890123456789
|
||||
-4567890123456789
|
||||
456
|
||||
|
||||
query I
|
||||
(((SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1;
|
||||
----
|
||||
-4567890123456789
|
||||
456
|
||||
|
||||
#--
|
||||
#-- Subqueries with ORDER BY & LIMIT clauses
|
||||
#--
|
||||
|
||||
#-- In this syntax, ORDER BY/LIMIT apply to the result of the EXCEPT
|
||||
|
||||
# Bug in DuckDB
|
||||
mode skip
|
||||
|
||||
query II
|
||||
SELECT q1,q2 FROM int8_tbl EXCEPT SELECT q2,q1 FROM int8_tbl
|
||||
ORDER BY q2,q1;
|
||||
----
|
||||
4567890123456789 -4567890123456789
|
||||
123 456
|
||||
|
||||
# this should fail but currently does not
|
||||
statement error
|
||||
SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1;
|
||||
----
|
||||
<REGEX>:Parser Error.*SELECT locking clause is not supported.*
|
||||
|
||||
mode unskip
|
||||
|
||||
|
||||
query I
|
||||
SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1))) ORDER BY 1;
|
||||
----
|
||||
123
|
||||
4567890123456789
|
||||
|
||||
|
||||
#--
|
||||
#-- New syntaxes (7.1) permit new tests
|
||||
#--
|
||||
|
||||
query II
|
||||
(((((select * from int8_tbl)))));
|
||||
----
|
||||
123 456
|
||||
123 4567890123456789
|
||||
4567890123456789 123
|
||||
4567890123456789 4567890123456789
|
||||
4567890123456789 -4567890123456789
|
||||
Reference in New Issue
Block a user