77 lines
1.1 KiB
SQL
77 lines
1.1 KiB
SQL
# name: test/sql/cte/recursive_array_slice.test
|
|
# description: Issue #3005: array_slice prevents row values to be used more than once
|
|
# group: [cte]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
CREATE TABLE p(loc int8);
|
|
|
|
statement ok
|
|
INSERT INTO p VALUES (1);
|
|
|
|
query II
|
|
WITH RECURSIVE t(y, arr) AS
|
|
(
|
|
SELECT 1, array[1,2,3,4,5,6]
|
|
UNION ALL
|
|
SELECT y+1, arr[:loc]
|
|
FROM t, p
|
|
WHERE y < 10
|
|
) SELECT * FROM t;
|
|
----
|
|
1 [1, 2, 3, 4, 5, 6]
|
|
2 [1]
|
|
3 [1]
|
|
4 [1]
|
|
5 [1]
|
|
6 [1]
|
|
7 [1]
|
|
8 [1]
|
|
9 [1]
|
|
10 [1]
|
|
|
|
query II
|
|
WITH RECURSIVE t(y, arr) AS
|
|
(
|
|
SELECT 1, array[1,2,3,4,5,6]
|
|
UNION ALL
|
|
SELECT y+1, arr
|
|
FROM t, p
|
|
WHERE y < 10
|
|
AND y = loc
|
|
) SELECT * FROM t;
|
|
----
|
|
1 [1, 2, 3, 4, 5, 6]
|
|
2 [1, 2, 3, 4, 5, 6]
|
|
|
|
query II
|
|
WITH RECURSIVE t(y, arr) AS
|
|
(
|
|
SELECT 1, array[1,2,3,4,5,6]
|
|
UNION ALL
|
|
SELECT y+1, arr[:loc]
|
|
FROM t, p
|
|
WHERE y < 10
|
|
AND y = loc
|
|
) SELECT * FROM t;
|
|
----
|
|
1 [1, 2, 3, 4, 5, 6]
|
|
2 [1]
|
|
|
|
query I
|
|
WITH RECURSIVE t(arr) AS
|
|
(
|
|
SELECT array[1,2,3,4,5,6]
|
|
UNION ALL
|
|
SELECT arr[arr[1]+1:6]
|
|
FROM t
|
|
WHERE arr[1] < 6
|
|
) SELECT * FROM t;
|
|
----
|
|
[1, 2, 3, 4, 5, 6]
|
|
[2, 3, 4, 5, 6]
|
|
[4, 5, 6]
|
|
[]
|