Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 4 additions & 13 deletions spark/src/main/scala/org/apache/comet/serde/arrays.scala
Original file line number Diff line number Diff line change
Expand Up @@ -120,22 +120,13 @@ object CometSortArray extends CometExpressionSerde[SortArray] with CodegenDispat
"When `" + CometConf.COMET_EXEC_STRICT_FLOATING_POINT.key + "=true`, sorting on" +
" floating-point types is not 100% compatible with Spark")

override def getUnsupportedReasons(): Seq[String] = Seq(
"Nested arrays with `Struct` or `Null` child values are not supported natively and will" +
" fall back to Spark.")

private def supportedSortArrayElementType(
dt: DataType,
nestedInArray: Boolean = false): Boolean = {
private def supportedSortArrayElementType(dt: DataType): Boolean = {
dt match {
// DataFusion's array_sort compares nested arrays through Arrow's rank kernel.
// That kernel does not support Struct or Null child values,
// so array<array<struct<...>>> and array<array<null>> would fail at runtime.
case _: NullType if !nestedInArray =>
case _: NullType =>
true
case ArrayType(elementType, _) =>
supportedSortArrayElementType(elementType, nestedInArray = true)
case StructType(fields) if !nestedInArray =>
supportedSortArrayElementType(elementType)
case StructType(fields) =>
fields.forall(f => supportedSortArrayElementType(f.dataType))
case _ =>
supportedScalarSortElementType(dt)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,10 +295,10 @@ INSERT INTO test_sort_array_nested_struct VALUES
(array()),
(NULL)

query expect_fallback(Sort on array element type ArrayType(StructType(StructField(a,IntegerType)
query
SELECT sort_array(arr) FROM test_sort_array_nested_struct

query expect_fallback(Sort on array element type ArrayType(StructType(StructField(a,IntegerType)
query
SELECT sort_array(arr, false) FROM test_sort_array_nested_struct

-- literal arguments
Expand Down Expand Up @@ -391,7 +391,7 @@ SELECT
sort_array(array(NULL, NULL)),
sort_array(cast(NULL as array<int>))

query expect_fallback(Sort on array element type ArrayType(StructType(StructField(a,IntegerType)
query
SELECT sort_array(
array(
array(named_struct('a', 2)),
Expand Down