should be it
This commit is contained in:
246
external/duckdb/test/issues/general/test_2743.test
vendored
Normal file
246
external/duckdb/test/issues/general/test_2743.test
vendored
Normal file
@@ -0,0 +1,246 @@
|
||||
# name: test/issues/general/test_2743.test
|
||||
# description: Issue 2743: RuntimeError: Not implemented Error: UNIONS are not supported in recursive CTEs yet
|
||||
# group: [general]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
query II
|
||||
WITH RECURSIVE t(x, y) AS
|
||||
(
|
||||
SELECT 1, 1
|
||||
UNION ALL
|
||||
SELECT 1, 2
|
||||
UNION ALL
|
||||
(SELECT x+1, 1
|
||||
FROM t
|
||||
WHERE x < 10 AND y = 1
|
||||
UNION ALL
|
||||
SELECT x+1, 2
|
||||
FROM t
|
||||
WHERE x < 10 AND y = 2)
|
||||
)
|
||||
SELECT * FROM t ORDER BY x, y;
|
||||
----
|
||||
1 1
|
||||
1 2
|
||||
2 1
|
||||
2 2
|
||||
3 1
|
||||
3 2
|
||||
4 1
|
||||
4 2
|
||||
5 1
|
||||
5 2
|
||||
6 1
|
||||
6 2
|
||||
7 1
|
||||
7 2
|
||||
8 1
|
||||
8 2
|
||||
9 1
|
||||
9 2
|
||||
10 1
|
||||
10 2
|
||||
|
||||
query II
|
||||
WITH RECURSIVE t(x, y) AS
|
||||
(
|
||||
SELECT 1, 1
|
||||
UNION ALL
|
||||
SELECT 1, 2
|
||||
UNION ALL
|
||||
SELECT t, z
|
||||
FROM t, LATERAL
|
||||
(SELECT x+1, 2
|
||||
WHERE t.y = 1
|
||||
UNION ALL
|
||||
SELECT x+1, 1
|
||||
WHERE t.y = 2) AS _(t, z)
|
||||
WHERE t.x < 10
|
||||
)
|
||||
SELECT * FROM t ORDER BY x, y;
|
||||
----
|
||||
1 1
|
||||
1 2
|
||||
2 1
|
||||
2 2
|
||||
3 1
|
||||
3 2
|
||||
4 1
|
||||
4 2
|
||||
5 1
|
||||
5 2
|
||||
6 1
|
||||
6 2
|
||||
7 1
|
||||
7 2
|
||||
8 1
|
||||
8 2
|
||||
9 1
|
||||
9 2
|
||||
10 1
|
||||
10 2
|
||||
|
||||
query II
|
||||
WITH RECURSIVE t(x, y) AS
|
||||
(
|
||||
SELECT 1, 1
|
||||
UNION
|
||||
SELECT 1, 2
|
||||
UNION
|
||||
(SELECT x+1, 1
|
||||
FROM t
|
||||
WHERE x < 10 AND y = 1
|
||||
UNION ALL
|
||||
SELECT x+1, 1
|
||||
FROM t
|
||||
WHERE x < 10 AND y = 2)
|
||||
)
|
||||
SELECT * FROM t ORDER BY x, y;
|
||||
----
|
||||
1 1
|
||||
1 2
|
||||
2 1
|
||||
3 1
|
||||
4 1
|
||||
5 1
|
||||
6 1
|
||||
7 1
|
||||
8 1
|
||||
9 1
|
||||
10 1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE flights (
|
||||
source TEXT,
|
||||
dest TEXT,
|
||||
carrier TEXT
|
||||
);
|
||||
|
||||
statement ok
|
||||
INSERT INTO flights VALUES
|
||||
('A', 'B', 'C1'),
|
||||
('A', 'C', 'C2'),
|
||||
('A', 'D', 'C1'),
|
||||
('B', 'D', 'C3'),
|
||||
('C', 'E', 'C3')
|
||||
;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE trains (
|
||||
source TEXT,
|
||||
dest TEXT
|
||||
);
|
||||
|
||||
statement ok
|
||||
INSERT INTO trains VALUES
|
||||
('B', 'C'),
|
||||
('A', 'E'),
|
||||
('C', 'E')
|
||||
;
|
||||
|
||||
query III
|
||||
WITH RECURSIVE connections(source, dest, carrier) AS (
|
||||
(SELECT f.source, f.dest, f.carrier
|
||||
FROM flights f
|
||||
WHERE f.source = 'A'
|
||||
UNION ALL
|
||||
SELECT r.source, r.dest, 'Rail' AS carrier
|
||||
FROM trains r
|
||||
WHERE r.source = 'A')
|
||||
UNION ALL -- two recursive terms below
|
||||
(SELECT c.source, f.dest, f.carrier
|
||||
FROM connections c, flights f
|
||||
WHERE c.dest = f.source
|
||||
UNION ALL
|
||||
SELECT c.source, r.dest, 'Rail' AS carrier
|
||||
FROM connections c, trains r
|
||||
WHERE c.dest = r.source)
|
||||
)
|
||||
SELECT * FROM connections ORDER BY source, dest, carrier;
|
||||
----
|
||||
A B C1
|
||||
A C C2
|
||||
A C Rail
|
||||
A D C1
|
||||
A D C3
|
||||
A E C3
|
||||
A E C3
|
||||
A E Rail
|
||||
A E Rail
|
||||
A E Rail
|
||||
|
||||
query I
|
||||
WITH RECURSIVE t(x) AS
|
||||
(
|
||||
(SELECT 2
|
||||
UNION
|
||||
SELECT 1)
|
||||
UNION ALL
|
||||
(SELECT x+1
|
||||
FROM t
|
||||
WHERE x < 4
|
||||
UNION
|
||||
SELECT x*2
|
||||
FROM t
|
||||
WHERE x >= 4 AND x < 8
|
||||
UNION ALL
|
||||
SELECT x+1
|
||||
FROM t
|
||||
WHERE x >= 4 AND x < 8)
|
||||
) SELECT * FROM t ORDER BY x;
|
||||
----
|
||||
1
|
||||
2
|
||||
2
|
||||
3
|
||||
3
|
||||
4
|
||||
4
|
||||
5
|
||||
5
|
||||
6
|
||||
6
|
||||
7
|
||||
7
|
||||
8
|
||||
8
|
||||
8
|
||||
8
|
||||
10
|
||||
10
|
||||
12
|
||||
12
|
||||
14
|
||||
14
|
||||
|
||||
query I
|
||||
WITH RECURSIVE foo(i) AS
|
||||
(values (1)
|
||||
UNION
|
||||
(SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION ALL
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION ALL
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION ALL
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION ALL
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION ALL
|
||||
SELECT i+1 FROM foo WHERE i < 2
|
||||
UNION
|
||||
SELECT i+1 FROM foo WHERE i < 2)
|
||||
) SELECT * FROM foo ORDER BY i;
|
||||
----
|
||||
1
|
||||
2
|
||||
Reference in New Issue
Block a user