# LogicTest: default distsql

# array construction

query error cannot determine type of empty array
SELECT ARRAY[]

query T
SELECT ARRAY[1, 2, 3]
----
{1,2,3}

query error expected 1 to be of type bool, found type int
SELECT ARRAY['a', true, 1]

query T
SELECT ARRAY['a,', 'b{', 'c}', 'd']
----
{'a,','b{','c}',d}

# array construction from subqueries

query T
SELECT ARRAY(SELECT 3)
----
{3}

query T
SELECT ARRAY(VALUES (1),(2),(1))
----
{1,2,1}

query T
SELECT ARRAY(VALUES ('a'),('b'),('c'))
----
{a,b,c}

query error subquery must return only one column, found 2
SELECT ARRAY(SELECT 1, 2)

query T
SELECT ARRAY[]:::int[]
----
{}

# decimal arrays are unsupported

query error unsupported result type: decimal\[\]
SELECT ARRAY[1.2]

query error unhandled parameterized array type parser.tDecimal
SELECT ARRAY(VALUES(1.2))

# array subscript access

query T
SELECT ARRAY['a', 'b', 'c'][-1]
----
NULL

query T
SELECT ARRAY['a', 'b', 'c'][0]
----
NULL

query T
SELECT (ARRAY['a', 'b', 'c'])[2]
----
b

query T
SELECT ARRAY['a', 'b', 'c'][2]
----
b

query T
SELECT ARRAY['a', 'b', 'c'][4]
----
NULL

query T
SELECT ARRAY['a', 'b', 'c'][1.5 + 1.5]
----
c

query I
SELECT ARRAY[1, 2, 3][-1]
----
NULL

query I
SELECT ARRAY[1, 2, 3][0]
----
NULL

query I
SELECT ARRAY[1, 2, 3][2]
----
2

query I
SELECT ARRAY[1, 2, 3][4]
----
NULL

query I
SELECT ARRAY[1, 2, 3][1.5 + 1.5]
----
3

query error unimplemented: multidimensional ARRAY
SELECT ARRAY['a', 'b', 'c'][4][2]

query error incompatible ARRAY subscript type: decimal
SELECT ARRAY['a', 'b', 'c'][3.5]

query error incompatible ARRAY subscript type: string
SELECT ARRAY['a', 'b', 'c']['abc']

query error cannot subscript type int because it is not an array
SELECT (123)[2]

# array slicing

query error unimplemented: ARRAY slicing
SELECT ARRAY['a', 'b', 'c'][:]

query error unimplemented: ARRAY slicing
SELECT ARRAY['a', 'b', 'c'][1:]

query error unimplemented: ARRAY slicing
SELECT ARRAY['a', 'b', 'c'][1:2]

query error unimplemented: ARRAY slicing
SELECT ARRAY['a', 'b', 'c'][:2]

query error unimplemented: ARRAY slicing
SELECT ARRAY['a', 'b', 'c'][2:1]

# other forms of indirection

# From a column name.
query T
SELECT a[1] FROM (SELECT ARRAY['a','b','c'] AS a)
----
a

# From a column ordinal.
query T
SELECT @1[1] FROM (SELECT ARRAY['a','b','c'] AS a)
----
a

# From a parenthetized expression.
query I
SELECT (ARRAY(VALUES (1),(2),(1)))[2]
----
2

# From an ArrayFlatten expression - ARRAY(subquery)[...]
query I
SELECT ARRAY(VALUES (1),(2),(1))[2]
----
2

# From a single-column subquery converted to a single datum.
query I
SELECT ((SELECT ARRAY[1, 2, 3]))[3]
----
3

# From a subquery.
query T
SELECT (SELECT ARRAY['a', 'b', 'c'])[3]
----
c

# From a function call expression.
query T
SELECT current_schemas(true)[1]
----
test

# From a CASE sub-expression.
query I
SELECT (CASE 1 = 1 WHEN true THEN ARRAY[1,2] ELSE ARRAY[2,3] END)[1]
----
1

# From a tuple.
query error cannot subscript type tuple{int, int, int} because it is not an array
SELECT (1,2,3)[1]

query error cannot subscript type tuple{int, int, int} because it is not an array
SELECT ROW (1,2,3)[1]

# Ensure grouping by an array column works

statement ok
SELECT conkey FROM pg_catalog.pg_constraint GROUP BY conkey

statement ok
SELECT indkey[0] FROM pg_catalog.pg_index

# Verify serialization of array in expression (with distsql).
statement ok
CREATE TABLE t (k INT)

statement ok
INSERT INTO t VALUES (1), (2), (3), (4), (5)

query I rowsort
SELECT k FROM t WHERE k = ANY ARRAY[2,4]
----
2
4
