96 lines
1.5 KiB
SQL
96 lines
1.5 KiB
SQL
# name: test/sql/subquery/scalar/array_subquery.test
|
|
# description: Test ARRAY subquery
|
|
# group: [scalar]
|
|
|
|
statement ok
|
|
SET default_null_order='nulls_first';
|
|
|
|
statement ok
|
|
CREATE TABLE integers(i INTEGER);
|
|
|
|
statement ok
|
|
INSERT INTO integers VALUES (1), (2), (3), (NULL);
|
|
|
|
# uncorrelated
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT 42
|
|
) top
|
|
FROM integers i1
|
|
ORDER BY i
|
|
----
|
|
NULL [42]
|
|
1 [42]
|
|
2 [42]
|
|
3 [42]
|
|
|
|
# single element
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT i FROM integers WHERE i1.i=i
|
|
) top
|
|
FROM integers i1
|
|
ORDER BY i
|
|
----
|
|
NULL []
|
|
1 [1]
|
|
2 [2]
|
|
3 [3]
|
|
|
|
# multiple elements
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT i FROM integers WHERE i>i1.i ORDER BY i ASC NULLS FIRST
|
|
) top
|
|
FROM integers i1
|
|
ORDER BY i
|
|
----
|
|
NULL []
|
|
1 [2, 3]
|
|
2 [3]
|
|
3 []
|
|
|
|
# array with limit
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4 WHERE i1.i=integers.i LIMIT 3
|
|
) top
|
|
FROM integers
|
|
ORDER BY i
|
|
----
|
|
NULL []
|
|
1 [1, 1, 1]
|
|
2 [2, 2, 2]
|
|
3 [3, 3, 3]
|
|
|
|
# array with limit and offset
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4 WHERE i1.i=integers.i LIMIT 3 OFFSET 3
|
|
) top
|
|
FROM integers
|
|
ORDER BY i
|
|
----
|
|
NULL []
|
|
1 [1, 1, 1]
|
|
2 [2, 2, 2]
|
|
3 [3, 3, 3]
|
|
|
|
# offset on the edge
|
|
query II
|
|
SELECT i, ARRAY(
|
|
SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4 WHERE i1.i=integers.i LIMIT 3 OFFSET 62
|
|
) top
|
|
FROM integers
|
|
ORDER BY i
|
|
----
|
|
NULL []
|
|
1 [1, 1]
|
|
2 [2, 2]
|
|
3 [3, 3]
|
|
|
|
# should only allow one column in array subquery
|
|
statement error
|
|
select array(select 1,2)
|
|
----
|
|
<REGEX>:.*inder Error.*Subquery returns 2 columns.* |