Skip to content
Draft
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
8 changes: 4 additions & 4 deletions native/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 1 addition & 34 deletions spark/src/main/scala/org/apache/comet/serde/arrays.scala
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,6 @@ object CometArrayRemove
with CometExprShim
with ArraysBase {

override def getSupportLevel(expr: ArrayRemove): SupportLevel =
Incompatible(
Some(
"Returns null when element is null instead of removing null elements" +
" (https://github.com/apache/datafusion-comet/issues/3173)"))

override def convert(
expr: ArrayRemove,
inputs: Seq[Attribute],
Expand All @@ -55,34 +49,7 @@ object CometArrayRemove
val arrayExprProto = exprToProto(expr.left, inputs, binding)
val keyExprProto = exprToProto(expr.right, inputs, binding)

val arrayRemoveScalarExpr =
scalarFunctionExprToProto("array_remove_all", arrayExprProto, keyExprProto)

val isNotNullExpr = createUnaryExpr(
expr,
expr.right,
inputs,
binding,
(builder, unaryExpr) => builder.setIsNotNull(unaryExpr))

val nullLiteralProto = exprToProto(Literal(null, expr.right.dataType), Seq.empty)

if (arrayRemoveScalarExpr.isDefined && isNotNullExpr.isDefined && nullLiteralProto.isDefined) {
val caseWhenExpr = ExprOuterClass.CaseWhen
.newBuilder()
.addWhen(isNotNullExpr.get)
.addThen(arrayRemoveScalarExpr.get)
.setElseExpr(nullLiteralProto.get)
.build()
Some(
ExprOuterClass.Expr
.newBuilder()
.setCaseWhen(caseWhenExpr)
.build())
} else {
withInfo(expr, expr.children: _*)
None
}
scalarFunctionExprToProto("array_remove_all", arrayExprProto, keyExprProto)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ CREATE TABLE test_array_remove(arr array<int>, val int) USING parquet
statement
INSERT INTO test_array_remove VALUES (array(1, 2, 3, 2), 2), (array(1, 2, 3), 4), (array(), 1), (NULL, 1), (array(1, NULL, 3), NULL)

query spark_answer_only
query
SELECT array_remove(arr, val) FROM test_array_remove

-- column + literal
query spark_answer_only
query
SELECT array_remove(arr, 2) FROM test_array_remove

-- literal + column
query spark_answer_only
query
SELECT array_remove(array(1, 2, 3, 2), val) FROM test_array_remove

-- literal + literal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class CometSqlFileTestSuite extends CometTestBase with AdaptiveSparkPlanHelper {
}
} catch {
case e: Exception =>
throw new RuntimeException(s"Error executing SQL '$sql'", e)
throw new RuntimeException(s"Error executing SQL '$sql' ${e.getMessage}", e)
}
case SqlQuery(sql, mode, line) =>
try {
Expand Down Expand Up @@ -126,7 +126,7 @@ class CometSqlFileTestSuite extends CometTestBase with AdaptiveSparkPlanHelper {

} catch {
case e: Exception =>
throw new RuntimeException(s"Error executing SQL '$sql'", e)
throw new RuntimeException(s"Error executing SQL '$sql' ${e.getMessage}", e)
}
}
}
Expand Down
Loading