257 lines
5.2 KiB
SQL
257 lines
5.2 KiB
SQL
# 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.* |