should be it
This commit is contained in:
257
external/duckdb/test/sql/join/natural/natural_join.test
vendored
Normal file
257
external/duckdb/test/sql/join/natural/natural_join.test
vendored
Normal file
@@ -0,0 +1,257 @@
|
||||
# name: test/sql/join/natural/natural_join.test
|
||||
# description: Test natural joins
|
||||
# group: [natural]
|
||||
|
||||
# create tables
|
||||
statement ok
|
||||
CREATE TABLE t1 (a INTEGER, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO t1 VALUES (1, 2)
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t2 (a INTEGER, c INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO t2 VALUES (1, 3), (2, 4)
|
||||
|
||||
# NATURAL join with one column
|
||||
query III
|
||||
SELECT * FROM t1 NATURAL JOIN t2
|
||||
----
|
||||
1 2 3
|
||||
|
||||
query III
|
||||
SELECT t1.a, t1.b, t2.c FROM t1 NATURAL JOIN t2
|
||||
----
|
||||
1 2 3
|
||||
|
||||
query III
|
||||
SELECT t1.a, t1.b, t2.c FROM t1 NATURAL JOIN t2 ORDER BY t2.a
|
||||
----
|
||||
1 2 3
|
||||
|
||||
# natural join with multiple matching columns
|
||||
statement ok
|
||||
CREATE TABLE t3 (a INTEGER, b INTEGER, c INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO t3 VALUES (1, 2, 3)
|
||||
|
||||
query III
|
||||
SELECT * FROM t1 NATURAL JOIN t3
|
||||
----
|
||||
1 2 3
|
||||
|
||||
query III
|
||||
SELECT * FROM t3 NATURAL JOIN t2
|
||||
----
|
||||
1 2 3
|
||||
|
||||
# natural join chain
|
||||
query III
|
||||
SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3
|
||||
----
|
||||
1 2 3
|
||||
|
||||
# no matching columns
|
||||
statement error
|
||||
select * from (values (1)) tbl(a) natural join (values (1), (2)) tbl2(b) order by 1, 2
|
||||
----
|
||||
<REGEX>:.*Binder Error.*No columns found to join.*
|
||||
|
||||
# long join chain
|
||||
query I
|
||||
select * from (values (1)) tbl(a) natural join (values (1)) tbl2(a) natural join (values (1)) tbl3(a)
|
||||
natural join (values (1)) tbl4(a) natural join (values (1)) tbl5(a)
|
||||
----
|
||||
1
|
||||
|
||||
# natural join with subqueries
|
||||
query I
|
||||
select * from (select 42) tbl(a) natural join (select 42) tbl2(a)
|
||||
----
|
||||
42
|
||||
|
||||
# uncorrelated scalar subquery
|
||||
query I
|
||||
select (select * from (select 42) tbl(a) natural join (select 42) tbl2(a))
|
||||
----
|
||||
42
|
||||
|
||||
# Multiple 8-bit bitmasks
|
||||
query IIIIIIIIIII
|
||||
select *
|
||||
from
|
||||
(select 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) tbl1(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
|
||||
natural join
|
||||
(select 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) tbl2(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
|
||||
----
|
||||
42 43 44 45 46 47 48 49 50 51 52
|
||||
|
||||
# JoinHashTable::ScanFullOuter coverage
|
||||
statement ok
|
||||
CREATE TABLE sqlancer_t0(c0 DOUBLE, c1 DOUBLE);
|
||||
|
||||
statement ok
|
||||
INSERT INTO sqlancer_t0 VALUES
|
||||
(0.000000, -1570504255.000000),
|
||||
(0.000000, -1570504255.000000),
|
||||
(0.000000, -1570504255.000000),
|
||||
(0.000000, -1570504255.000000),
|
||||
(0.000000, 1.000000),
|
||||
(0.000000, 0.543647),
|
||||
(0.000000, NULL),
|
||||
(0.000000, 1.000000),
|
||||
(0.000000, 1.000000),
|
||||
(0.000000, 0.000000),
|
||||
(0.000000, 1617540830.000000),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, 0.497659),
|
||||
(0.000000, -1367407567.000000),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, -547966124.000000),
|
||||
(0.000000, NULL),
|
||||
(0.000000, -1417028911.000000),
|
||||
(0.000000, 277394703.000000),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL),
|
||||
(0.000000, NULL)
|
||||
;
|
||||
|
||||
statement ok
|
||||
CREATE VIEW sqlancer_v0(c0, c1) AS SELECT sqlancer_t0.c0, ((sqlancer_t0.rowid)//(-1694294358))
|
||||
FROM sqlancer_t0
|
||||
ORDER BY TIMESTAMP '1970-01-08 16:19:01' ASC;
|
||||
|
||||
query II
|
||||
SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid
|
||||
FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0
|
||||
ORDER BY 2 ASC;
|
||||
----
|
||||
NULL 0
|
||||
NULL 1
|
||||
NULL 2
|
||||
NULL 3
|
||||
NULL 4
|
||||
NULL 5
|
||||
NULL 6
|
||||
NULL 7
|
||||
NULL 8
|
||||
0 9
|
||||
NULL 10
|
||||
NULL 11
|
||||
NULL 12
|
||||
NULL 13
|
||||
NULL 14
|
||||
NULL 15
|
||||
NULL 16
|
||||
NULL 17
|
||||
NULL 18
|
||||
NULL 19
|
||||
NULL 20
|
||||
NULL 21
|
||||
NULL 22
|
||||
NULL 23
|
||||
NULL 24
|
||||
NULL 25
|
||||
NULL 26
|
||||
NULL 27
|
||||
NULL 28
|
||||
NULL 29
|
||||
|
||||
query II
|
||||
SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid
|
||||
FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0 WHERE sqlancer_t0.c0
|
||||
UNION
|
||||
SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid
|
||||
FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0
|
||||
WHERE (NOT sqlancer_t0.c0)
|
||||
UNION
|
||||
SELECT DISTINCT sqlancer_v0.c1, sqlancer_t0.rowid
|
||||
FROM sqlancer_v0 NATURAL FULL JOIN sqlancer_t0
|
||||
WHERE ((sqlancer_t0.c0) IS NULL)
|
||||
ORDER BY 2 ASC;
|
||||
----
|
||||
NULL 0
|
||||
NULL 1
|
||||
NULL 2
|
||||
NULL 3
|
||||
NULL 4
|
||||
NULL 5
|
||||
NULL 6
|
||||
NULL 7
|
||||
NULL 8
|
||||
0 9
|
||||
NULL 10
|
||||
NULL 11
|
||||
NULL 12
|
||||
NULL 13
|
||||
NULL 14
|
||||
NULL 15
|
||||
NULL 16
|
||||
NULL 17
|
||||
NULL 18
|
||||
NULL 19
|
||||
NULL 20
|
||||
NULL 21
|
||||
NULL 22
|
||||
NULL 23
|
||||
NULL 24
|
||||
NULL 25
|
||||
NULL 26
|
||||
NULL 27
|
||||
NULL 28
|
||||
NULL 29
|
||||
|
||||
# error: duplicate table alias on both sides
|
||||
statement error
|
||||
select (select * from (select 42) tbl(a) natural join (select 42) tbl(a))
|
||||
----
|
||||
<REGEX>:.*Binder Error.*Ambiguous reference to table.*
|
||||
|
||||
statement ok
|
||||
DROP TABLE t1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t0(c0 DATE, c1 DATE DEFAULT('0.5868720116119102'), c2 INT1, PRIMARY KEY(c1, c2, c0));
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t1(c0 DATETIME, c1 DATE DEFAULT(TIMESTAMP '1970-01-11 02:37:59'), PRIMARY KEY(c0));
|
||||
|
||||
statement ok
|
||||
CREATE VIEW v0(c0) AS SELECT false FROM t1, t0 HAVING 1689380428;
|
||||
|
||||
statement ok
|
||||
SELECT COUNT(t1.rowid) FROM t1, v0 NATURAL RIGHT JOIN t0;
|
||||
|
||||
statement ok
|
||||
SELECT COUNT(t1.rowid) FROM t1, v0 RIGHT JOIN t0 ON v0.c0=t0.c0;
|
||||
|
||||
statement error
|
||||
SELECT COUNT(t1.rowid) FROM t1, v0 RIGHT JOIN t0 ON t1.c1=t0.c1 AND v0.c0=t0.c0;
|
||||
----
|
||||
<REGEX>:.*Not implemented Error.*Non-inner join on correlated columns.*
|
||||
|
||||
# column name appears more than once on left side of the natural join
|
||||
statement error
|
||||
select * from (values (1)) t1(i) join (values (1)) t2(i) on (t1.i=t2.i) natural join (values (1)) t3(i);
|
||||
----
|
||||
<REGEX>:.*Binder Error.*Ambiguous reference to column name.*
|
||||
|
||||
statement ok
|
||||
PRAGMA disable_verification
|
||||
|
||||
# column name appears more than once on right side of the natural join
|
||||
statement error
|
||||
select * from (values (1)) t1(i) natural join ((values (1)) t2(i) join (values (1)) t3(i) on (t2.i=t3.i))
|
||||
----
|
||||
<REGEX>:.*Binder Error.*exists more than once on right side of join.*
|
||||
Reference in New Issue
Block a user