@@ -27,7 +27,8 @@ INSERT INTO test_array_position VALUES
2727 (array(10 , 20 , 30 ), array(' x' , ' y' , ' z' ), 99 , ' w' ),
2828 (array(), array(), 1 , ' a' ),
2929 (NULL , NULL , 1 , ' a' ),
30- (array(1 , 1 , 1 ), array(' a' , ' a' , ' a' ), 1 , ' a' )
30+ (array(1 , 1 , 1 ), array(' a' , ' a' , ' a' ), 1 , ' a' ),
31+ (array(5 , 6 , 7 ), array(' p' , ' q' , ' r' ), NULL , NULL )
3132
3233-- literal args fall back to Spark
3334query spark_answer_only
@@ -54,7 +55,7 @@ SELECT array_position(array(), 1)
5455query spark_answer_only
5556SELECT array_position(array(1 , 2 , 1 , 3 ), 1 )
5657
57- -- column array + column value
58+ -- column array + column value (includes NULL val row)
5859query
5960SELECT array_position(int_arr, val) FROM test_array_position
6061
@@ -66,7 +67,7 @@ SELECT array_position(int_arr, 3) FROM test_array_position
6667query
6768SELECT array_position(array(1 , 2 , 3 ), val) FROM test_array_position
6869
69- -- string column array + column value
70+ -- string column array + column value (includes NULL str_val row)
7071query
7172SELECT array_position(str_arr, str_val) FROM test_array_position
7273
@@ -77,3 +78,129 @@ SELECT array_position(str_arr, 'c') FROM test_array_position
7778-- expressions in array construction
7879query
7980SELECT array_position(array(val, val + 1 , val + 2 ), val) FROM test_array_position
81+
82+ -- boolean arrays
83+ statement
84+ CREATE TABLE test_ap_bool (arr array< boolean > , val boolean ) USING parquet
85+
86+ statement
87+ INSERT INTO test_ap_bool VALUES
88+ (array(true, false, true), false),
89+ (array(true, true), false),
90+ (array(false, false), true),
91+ (NULL , true),
92+ (array(true, false), NULL )
93+
94+ query
95+ SELECT array_position(arr, val) FROM test_ap_bool
96+
97+ -- tinyint arrays
98+ statement
99+ CREATE TABLE test_ap_byte (arr array< tinyint> , val tinyint) USING parquet
100+
101+ statement
102+ INSERT INTO test_ap_byte VALUES
103+ (array(cast(1 as tinyint), cast(2 as tinyint), cast(3 as tinyint)), cast(2 as tinyint)),
104+ (array(cast(- 128 as tinyint), cast(127 as tinyint)), cast(127 as tinyint)),
105+ (NULL , cast(1 as tinyint)),
106+ (array(cast(1 as tinyint)), NULL )
107+
108+ query
109+ SELECT array_position(arr, val) FROM test_ap_byte
110+
111+ -- smallint arrays
112+ statement
113+ CREATE TABLE test_ap_short (arr array< smallint > , val smallint ) USING parquet
114+
115+ statement
116+ INSERT INTO test_ap_short VALUES
117+ (array(cast(100 as smallint ), cast(200 as smallint ), cast(300 as smallint )), cast(200 as smallint )),
118+ (NULL , cast(1 as smallint )),
119+ (array(cast(1 as smallint )), NULL )
120+
121+ query
122+ SELECT array_position(arr, val) FROM test_ap_short
123+
124+ -- bigint arrays
125+ statement
126+ CREATE TABLE test_ap_long (arr array< bigint > , val bigint ) USING parquet
127+
128+ statement
129+ INSERT INTO test_ap_long VALUES
130+ (array(cast(1000000000000 as bigint ), cast(2000000000000 as bigint )), cast(2000000000000 as bigint )),
131+ (array(cast(- 1 as bigint ), cast(0 as bigint ), cast(1 as bigint )), cast(0 as bigint )),
132+ (NULL , cast(1 as bigint )),
133+ (array(cast(1 as bigint )), NULL )
134+
135+ query
136+ SELECT array_position(arr, val) FROM test_ap_long
137+
138+ -- float arrays
139+ statement
140+ CREATE TABLE test_ap_float (arr array< float> , val float) USING parquet
141+
142+ statement
143+ INSERT INTO test_ap_float VALUES
144+ (array(cast(1 .1 as float), cast(2 .2 as float), cast(3 .3 as float)), cast(2 .2 as float)),
145+ (array(cast(0 .0 as float), cast(- 1 .5 as float)), cast(- 1 .5 as float)),
146+ (NULL , cast(1 .0 as float)),
147+ (array(cast(1 .0 as float)), NULL )
148+
149+ query
150+ SELECT array_position(arr, val) FROM test_ap_float
151+
152+ -- double arrays
153+ statement
154+ CREATE TABLE test_ap_double (arr array< double> , val double) USING parquet
155+
156+ statement
157+ INSERT INTO test_ap_double VALUES
158+ (array(1 .1 , 2 .2 , 3 .3 ), 2 .2 ),
159+ (array(0 .0 , - 1 .5 ), - 1 .5 ),
160+ (NULL , 1 .0 ),
161+ (array(1 .0 ), NULL )
162+
163+ query
164+ SELECT array_position(arr, val) FROM test_ap_double
165+
166+ -- decimal arrays
167+ statement
168+ CREATE TABLE test_ap_decimal (arr array< decimal (10 ,2 )> , val decimal (10 ,2 )) USING parquet
169+
170+ statement
171+ INSERT INTO test_ap_decimal VALUES
172+ (array(cast(1 .10 as decimal (10 ,2 )), cast(2 .20 as decimal (10 ,2 )), cast(3 .30 as decimal (10 ,2 ))), cast(2 .20 as decimal (10 ,2 ))),
173+ (array(cast(0 .00 as decimal (10 ,2 ))), cast(0 .00 as decimal (10 ,2 ))),
174+ (NULL , cast(1 .00 as decimal (10 ,2 ))),
175+ (array(cast(1 .00 as decimal (10 ,2 ))), NULL )
176+
177+ query
178+ SELECT array_position(arr, val) FROM test_ap_decimal
179+
180+ -- date arrays
181+ statement
182+ CREATE TABLE test_ap_date (arr array< date > , val date ) USING parquet
183+
184+ statement
185+ INSERT INTO test_ap_date VALUES
186+ (array(date ' 2024-01-01' , date ' 2024-06-15' , date ' 2024-12-31' ), date ' 2024-06-15' ),
187+ (array(date ' 2000-01-01' ), date ' 1999-12-31' ),
188+ (NULL , date ' 2024-01-01' ),
189+ (array(date ' 2024-01-01' ), NULL )
190+
191+ query
192+ SELECT array_position(arr, val) FROM test_ap_date
193+
194+ -- timestamp arrays
195+ statement
196+ CREATE TABLE test_ap_ts (arr array< timestamp > , val timestamp ) USING parquet
197+
198+ statement
199+ INSERT INTO test_ap_ts VALUES
200+ (array(timestamp ' 2024-01-01 00:00:00' , timestamp ' 2024-06-15 12:30:00' ), timestamp ' 2024-06-15 12:30:00' ),
201+ (array(timestamp ' 2000-01-01 00:00:00' ), timestamp ' 1999-12-31 23:59:59' ),
202+ (NULL , timestamp ' 2024-01-01 00:00:00' ),
203+ (array(timestamp ' 2024-01-01 00:00:00' ), NULL )
204+
205+ query
206+ SELECT array_position(arr, val) FROM test_ap_ts
0 commit comments