Files
email-tracker/external/duckdb/test/issues/general/test_2743.test
2025-10-24 19:21:19 -05:00

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