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

mbutrovich 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 3f204fc04 feat: support array_max (#1892)
3f204fc04 is described below

commit 3f204fc046395961e6d23b9055203d11bd6858e7
Author: drexler-sky <evan12...@gmail.com>
AuthorDate: Fri Jun 20 06:59:16 2025 -0700

    feat: support array_max (#1892)
---
 .../org/apache/comet/serde/QueryPlanSerde.scala     |  1 +
 .../main/scala/org/apache/comet/serde/arrays.scala  | 13 +++++++++++++
 .../apache/comet/CometArrayExpressionSuite.scala    | 21 +++++++++++++++++++++
 3 files changed, 35 insertions(+)

diff --git a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala 
b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
index 462edf91b..0caae441c 100644
--- a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
+++ b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
@@ -1955,6 +1955,7 @@ object QueryPlanSerde extends Logging with CometExprShim {
         }
       case _: ArrayRemove => convert(CometArrayRemove)
       case _: ArrayContains => convert(CometArrayContains)
+      case _: ArrayMax => convert(CometArrayMax)
       case _: ArrayAppend => convert(CometArrayAppend)
       case _: ArrayIntersect => convert(CometArrayIntersect)
       case _: ArrayJoin => convert(CometArrayJoin)
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 d6c6b086c..5496c0422 100644
--- a/spark/src/main/scala/org/apache/comet/serde/arrays.scala
+++ b/spark/src/main/scala/org/apache/comet/serde/arrays.scala
@@ -164,6 +164,19 @@ object CometArrayIntersect extends CometExpressionSerde 
with IncompatExpr {
   }
 }
 
+object CometArrayMax extends CometExpressionSerde {
+  override def convert(
+      expr: Expression,
+      inputs: Seq[Attribute],
+      binding: Boolean): Option[ExprOuterClass.Expr] = {
+    val arrayExprProto = exprToProto(expr.children.head, inputs, binding)
+
+    val arrayContainsScalarExpr =
+      scalarFunctionExprToProto("array_max", arrayExprProto)
+    optExprWithInfo(arrayContainsScalarExpr, expr)
+  }
+}
+
 object CometArraysOverlap extends CometExpressionSerde with IncompatExpr {
   override def convert(
       expr: Expression,
diff --git 
a/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala 
b/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
index 1461525b2..88f96e57c 100644
--- a/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/CometArrayExpressionSuite.scala
@@ -232,6 +232,27 @@ class CometArrayExpressionSuite extends CometTestBase with 
AdaptiveSparkPlanHelp
     }
   }
 
+  test("array_max") {
+    withTempDir { dir =>
+      val path = new Path(dir.toURI.toString, "test.parquet")
+      makeParquetFileAllTypes(path, dictionaryEnabled = false, n = 10000)
+      spark.read.parquet(path.toString).createOrReplaceTempView("t1");
+      checkSparkAnswerAndOperator(spark.sql("SELECT array_max(array(_2, _3, 
_4)) FROM t1"))
+      checkSparkAnswerAndOperator(
+        spark.sql("SELECT array_max((CASE WHEN _2 =_3 THEN array(_4) END)) 
FROM t1"));
+      checkSparkAnswerAndOperator(
+        spark.sql("SELECT array_max((CASE WHEN _2 =_3 THEN array(_2, _4) END)) 
FROM t1"));
+      checkSparkAnswerAndOperator(
+        spark.sql("SELECT array_max(array(CAST(NULL AS INT), CAST(NULL AS 
INT))) FROM t1"))
+      checkSparkAnswerAndOperator(
+        spark.sql("SELECT array_max(array(_2, CAST(NULL AS INT))) FROM t1"))
+      checkSparkAnswerAndOperator(spark.sql("SELECT array_max(array()) FROM 
t1"))
+      checkSparkAnswerAndOperator(
+        spark.sql(
+          "SELECT array_max(array(double('-Infinity'), 0.0, 
double('Infinity'))) FROM t1"))
+    }
+  }
+
   test("array_intersect") {
     // https://github.com/apache/datafusion-comet/issues/1441
     assume(!usingDataSourceExec)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org
For additional commands, e-mail: commits-h...@datafusion.apache.org

Reply via email to