diff --git a/spark/src/test/resources/sql-tests/expressions/array/element_at_ansi.sql b/spark/src/test/resources/sql-tests/expressions/array/element_at_ansi.sql index 30ab1bba587..89293ccefd9 100644 --- a/spark/src/test/resources/sql-tests/expressions/array/element_at_ansi.sql +++ b/spark/src/test/resources/sql-tests/expressions/array/element_at_ansi.sql @@ -31,47 +31,58 @@ CREATE TABLE ansi_element_at_oob(arr array) USING parquet statement INSERT INTO ansi_element_at_oob VALUES (array(1, 2, 3)) +-- Valid positive and negative boundary indices must run natively and match Spark. +query +SELECT element_at(arr, 1), element_at(arr, 3), element_at(arr, -1), element_at(arr, -3) +FROM ansi_element_at_oob + +-- A NULL index returns NULL even in ANSI mode. +query +SELECT element_at(arr, CAST(NULL AS INT)) FROM ansi_element_at_oob + -- ============================================================================ -- element_at index out of bounds (positive index) --- Spark throws: [INVALID_ARRAY_INDEX_IN_ELEMENT_AT] ... --- Comet throws: Index out of bounds for array --- See https://github.com/apache/datafusion-comet/issues/3375 +-- Spark and Comet throw INVALID_ARRAY_INDEX_IN_ELEMENT_AT in ANSI mode. -- ============================================================================ -- index beyond array length should throw (1-based indexing) -query ignore(https://github.com/apache/datafusion-comet/issues/3375) +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) +SELECT element_at(arr, 4) FROM ansi_element_at_oob + +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) SELECT element_at(arr, 10) FROM ansi_element_at_oob -- literal array with out of bounds access -query ignore(https://github.com/apache/datafusion-comet/issues/3375) -SELECT element_at(array(1, 2, 3), 5) +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) +SELECT element_at(array(1, 2, 3), 5) FROM ansi_element_at_oob -- ============================================================================ -- element_at with index 0 (invalid) --- Spark throws: [INVALID_INDEX_OF_ZERO] The index 0 is invalid --- Comet throws: different error message --- See https://github.com/apache/datafusion-comet/issues/3375 +-- Spark and Comet throw INVALID_INDEX_OF_ZERO. -- ============================================================================ -- index 0 is not valid for element_at (1-based indexing) -query ignore(https://github.com/apache/datafusion-comet/issues/3375) +query expect_error([INVALID_INDEX_OF_ZERO]) SELECT element_at(arr, 0) FROM ansi_element_at_oob -- literal with index 0 -query ignore(https://github.com/apache/datafusion-comet/issues/3375) -SELECT element_at(array(1, 2, 3), 0) +query expect_error([INVALID_INDEX_OF_ZERO]) +SELECT element_at(array(1, 2, 3), 0) FROM ansi_element_at_oob -- ============================================================================ -- element_at index out of bounds (negative index beyond array) -- ============================================================================ -- negative index beyond array size should throw -query ignore(https://github.com/apache/datafusion-comet/issues/3375) +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) +SELECT element_at(arr, -4) FROM ansi_element_at_oob + +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) SELECT element_at(arr, -10) FROM ansi_element_at_oob -- literal with negative out of bounds -query ignore(https://github.com/apache/datafusion-comet/issues/3375) -SELECT element_at(array(1, 2, 3), -5) +query expect_error([INVALID_ARRAY_INDEX_IN_ELEMENT_AT]) +SELECT element_at(array(1, 2, 3), -5) FROM ansi_element_at_oob -- ============================================================================ -- ANSI short-circuit over a NULL array diff --git a/spark/src/test/resources/sql-tests/expressions/array/get_array_item_ansi.sql b/spark/src/test/resources/sql-tests/expressions/array/get_array_item_ansi.sql index 19d0cb2a634..c21d27426f6 100644 --- a/spark/src/test/resources/sql-tests/expressions/array/get_array_item_ansi.sql +++ b/spark/src/test/resources/sql-tests/expressions/array/get_array_item_ansi.sql @@ -25,34 +25,39 @@ -- ============================================================================ statement -CREATE TABLE ansi_array_oob(arr array) USING parquet +CREATE TABLE ansi_array_oob(arr array, positive_idx int, negative_idx int) USING parquet statement -INSERT INTO ansi_array_oob VALUES (array(1, 2, 3)) +INSERT INTO ansi_array_oob VALUES (array(1, 2, 3), 5, -1) + +-- Valid boundary indices must run natively as well as match Spark. +query +SELECT arr[0], arr[2] FROM ansi_array_oob -- ============================================================================ -- Array index out of bounds (positive index) --- Spark throws: [INVALID_ARRAY_INDEX] The index X is out of bounds --- Comet throws: Index out of bounds for array --- See https://github.com/apache/datafusion-comet/issues/3375 +-- Spark and Comet throw INVALID_ARRAY_INDEX in ANSI mode. -- ============================================================================ -- index beyond array length should throw (0-based indexing) -query ignore(https://github.com/apache/datafusion-comet/issues/3375) +query expect_error([INVALID_ARRAY_INDEX]) +SELECT arr[3] FROM ansi_array_oob + +query expect_error([INVALID_ARRAY_INDEX]) SELECT arr[10] FROM ansi_array_oob --- literal array with out of bounds access -query ignore(https://github.com/apache/datafusion-comet/issues/3375) -SELECT array(1, 2, 3)[5] +-- Use a column index so SimplifyExtractValueOps cannot replace the lookup with NULL. +query expect_error([INVALID_ARRAY_INDEX]) +SELECT array(1, 2, 3)[positive_idx] FROM ansi_array_oob -- ============================================================================ -- Array index out of bounds (negative index) -- ============================================================================ -- negative index should throw -query ignore(https://github.com/apache/datafusion-comet/issues/3375) +query expect_error([INVALID_ARRAY_INDEX]) SELECT arr[-1] FROM ansi_array_oob --- literal with negative index -query ignore(https://github.com/apache/datafusion-comet/issues/3375) -SELECT array(1, 2, 3)[-1] +-- literal array with a negative column index +query expect_error([INVALID_ARRAY_INDEX]) +SELECT array(1, 2, 3)[negative_idx] FROM ansi_array_oob