247 lines
3.2 KiB
SQL
247 lines
3.2 KiB
SQL
# 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
|