Skip to content

Commit 30c0de7

Browse files
andygroveclaude
andcommitted
fix merge artifacts and expand array_position test coverage
Remove stray array_repeat references from merge conflict resolution. Add NULL val row to test data and add tests for all supported array element types: boolean, tinyint, smallint, bigint, float, double, decimal, date, and timestamp. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b716584 commit 30c0de7

3 files changed

Lines changed: 133 additions & 8 deletions

File tree

native/spark-expr/src/array_funcs/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717

1818
mod array_insert;
1919
mod array_position;
20-
mod array_repeat;
2120
mod get_array_struct_fields;
2221
mod list_extract;
2322
mod size;
2423

2524
pub use array_insert::ArrayInsert;
2625
pub use array_position::{spark_array_position, SparkArrayPositionFunc};
27-
pub use array_repeat::spark_array_repeat;
2826
pub use get_array_struct_fields::GetArrayStructFields;
2927
pub use list_extract::ListExtract;
3028
pub use size::{spark_size, SparkSizeFunc};

native/spark-expr/src/comet_scalar_funcs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ use crate::math_funcs::abs::abs;
2020
use crate::math_funcs::checked_arithmetic::{checked_add, checked_div, checked_mul, checked_sub};
2121
use crate::math_funcs::modulo_expr::spark_modulo;
2222
use crate::{
23-
spark_array_repeat, spark_ceil, spark_decimal_div, spark_decimal_integral_div, spark_floor,
24-
spark_isnan, spark_lpad, spark_make_decimal, spark_read_side_padding, spark_round, spark_rpad,
25-
spark_unhex, spark_unscaled_value, EvalMode, SparkArrayPositionFunc, SparkBitwiseCount,
23+
spark_ceil, spark_decimal_div, spark_decimal_integral_div, spark_floor, spark_isnan,
24+
spark_lpad, spark_make_decimal, spark_read_side_padding, spark_round, spark_rpad, spark_unhex,
25+
spark_unscaled_value, EvalMode, SparkArrayPositionFunc, SparkBitwiseCount,
2626
SparkContains, SparkDateDiff, SparkDateTrunc, SparkMakeDate, SparkSizeFunc, SparkStringSpace,
2727
};
2828
use arrow::datatypes::DataType;

spark/src/test/resources/sql-tests/expressions/array/array_position.sql

Lines changed: 130 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3334
query spark_answer_only
@@ -54,7 +55,7 @@ SELECT array_position(array(), 1)
5455
query spark_answer_only
5556
SELECT array_position(array(1, 2, 1, 3), 1)
5657

57-
-- column array + column value
58+
-- column array + column value (includes NULL val row)
5859
query
5960
SELECT array_position(int_arr, val) FROM test_array_position
6061

@@ -66,7 +67,7 @@ SELECT array_position(int_arr, 3) FROM test_array_position
6667
query
6768
SELECT 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)
7071
query
7172
SELECT 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
7879
query
7980
SELECT 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

Comments
 (0)