This is an automated email from the ASF dual-hosted git repository.

comphead pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/main by this push:
     new 042f27672 chore: Fallback to Spark for `array_reverse` for 
`array<binary>` (#2759)
042f27672 is described below

commit 042f276722ff0415d1be0e3ad0dd163827e29480
Author: Oleks V <[email protected]>
AuthorDate: Tue Nov 11 11:45:02 2025 -0800

    chore: Fallback to Spark for `array_reverse` for `array<binary>` (#2759)
    
    * chore: Fallback to Spark for `array_reverse` for binary
---
 .../main/scala/org/apache/comet/serde/arrays.scala | 21 +++++++++++++++-
 .../apache/comet/CometArrayExpressionSuite.scala   | 29 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/spark/src/main/scala/org/apache/comet/serde/arrays.scala 
b/spark/src/main/scala/org/apache/comet/serde/arrays.scala
index e8a4ce76f..f59234d40 100644
--- a/spark/src/main/scala/org/apache/comet/serde/arrays.scala
+++ b/spark/src/main/scala/org/apache/comet/serde/arrays.scala
@@ -435,6 +435,25 @@ object CometGetArrayItem extends 
CometExpressionSerde[GetArrayItem] {
 }
 
 object CometArrayReverse extends CometExpressionSerde[Reverse] with ArraysBase 
{
+  val unsupportedReason = "reverse on array containing binary is not supported"
+
+  @tailrec
+  private def containsBinary(dt: DataType): Boolean = {
+    dt match {
+      case BinaryType => true
+      case ArrayType(elementType, _) => containsBinary(elementType)
+      case _ => false
+    }
+  }
+
+  override def getSupportLevel(expr: Reverse): SupportLevel = {
+    if (containsBinary(expr.child.dataType)) {
+      Incompatible(Some(unsupportedReason))
+    } else {
+      Compatible(None)
+    }
+  }
+
   override def convert(
       expr: Reverse,
       inputs: Seq[Attribute],
@@ -474,7 +493,7 @@ object CometElementAt extends 
CometExpressionSerde[ElementAt] {
         .setOneBased(true)
         .setFailOnError(expr.failOnError)
 
-      defaultExpr.foreach(arrayExtractBuilder.setDefaultValue(_))
+      defaultExpr.foreach(arrayExtractBuilder.setDefaultValue)
 
       Some(
         ExprOuterClass.Expr
diff --git 
a/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala 
b/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
index 758311f1f..a8f5c66dd 100644
--- a/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
@@ -773,4 +773,33 @@ class CometArrayExpressionSuite extends CometTestBase with 
AdaptiveSparkPlanHelp
       }
     }
   }
+
+  // https://github.com/apache/datafusion-comet/issues/2612
+  test("array_reverse - fallback for binary array") {
+    val fallbackReason =
+      if (CometConf.COMET_NATIVE_SCAN_IMPL.key == CometConf.SCAN_NATIVE_COMET 
|| sys.env
+          .getOrElse("COMET_PARQUET_SCAN_IMPL", "") == 
CometConf.SCAN_NATIVE_COMET) {
+        "Unsupported schema"
+      } else {
+        CometArrayReverse.unsupportedReason
+      }
+    withTable("t1") {
+      sql("""create table t1 using parquet as
+          select cast(null as array<binary>) c1, cast(array() as 
array<binary>) c2
+          from range(10)
+        """)
+
+      checkSparkAnswerAndFallbackReason(
+        "select reverse(array(c1, c2)) AS x FROM t1",
+        fallbackReason)
+
+      checkSparkAnswerAndFallbackReason(
+        "select reverse(array(c1, c1)) AS x FROM t1",
+        fallbackReason)
+
+      checkSparkAnswerAndFallbackReason(
+        "select reverse(array(array(c1), array(c2))) AS x FROM t1",
+        fallbackReason)
+    }
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to