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