Skip to content

Commit 54a83cb

Browse files
committed
fix_incorrect_compatiblity_msg_comet_sum
1 parent caccc6d commit 54a83cb

3 files changed

Lines changed: 27 additions & 5 deletions

File tree

spark/src/main/scala/org/apache/comet/serde/aggregates.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ object CometAverage extends CometAggregateExpressionSerde[Average] {
204204
}
205205

206206
object CometSum extends CometAggregateExpressionSerde[Sum] {
207-
207+
208208
override def convert(
209209
aggExpr: AggregateExpression,
210210
sum: Sum,

spark/src/main/scala/org/apache/comet/serde/strings.scala

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import org.apache.comet.serde.QueryPlanSerde.{createBinaryExpr, exprToProtoInter
3333

3434
object CometStringRepeat extends CometExpressionSerde[StringRepeat] {
3535

36-
override def getCompatibleNotes(): Seq[String] = Seq(
36+
override def getIncompatibleReasons(): Seq[String] = Seq(
3737
"A negative argument for the number of times to repeat throws an exception" +
3838
" instead of returning an empty string as Spark does")
3939

@@ -42,13 +42,27 @@ object CometStringRepeat extends CometExpressionSerde[StringRepeat] {
4242
inputs: Seq[Attribute],
4343
binding: Boolean): Option[ExprOuterClass.Expr] = {
4444
val children = expr.children
45+
46+
children(1) match {
47+
case Literal(count, _) if isNegativeNumber(count) =>
48+
withInfo(expr, "Negative repeat count is not supported")
49+
return None
50+
case _ =>
51+
}
52+
4553
val leftCast = Cast(children(0), StringType)
4654
val rightCast = Cast(children(1), LongType)
4755
val leftExpr = exprToProtoInternal(leftCast, inputs, binding)
4856
val rightExpr = exprToProtoInternal(rightCast, inputs, binding)
4957
val optExpr = scalarFunctionExprToProto("repeat", leftExpr, rightExpr)
5058
optExprWithInfo(optExpr, expr, leftCast, rightCast)
5159
}
60+
61+
private def isNegativeNumber(value: Any): Boolean = value match {
62+
case i: Int => i < 0
63+
case l: Long => l < 0
64+
case _ => false
65+
}
5266
}
5367

5468
class CometCaseConversionBase[T <: Expression](function: String)

spark/src/main/scala/org/apache/comet/serde/unixtime.scala

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,20 @@ import org.apache.comet.serde.QueryPlanSerde.{exprToProtoInternal, optExprWithIn
2929
// https://github.com/apache/datafusion/issues/16594
3030
object CometFromUnixTime extends CometExpressionSerde[FromUnixTime] {
3131

32+
override def getUnsupportedReasons(): Seq[String] = Seq(
33+
"Only supports the default datetime format pattern `yyyy-MM-dd HH:mm:ss`")
34+
3235
override def getIncompatibleReasons(): Seq[String] = Seq(
33-
"Only supports the default datetime format pattern `yyyy-MM-dd HH:mm:ss`." +
34-
" DataFusion's valid timestamp range differs from Spark" +
36+
"DataFusion's valid timestamp range differs from Spark" +
3537
" (https://github.com/apache/datafusion/issues/16594)")
3638

37-
override def getSupportLevel(expr: FromUnixTime): SupportLevel = Incompatible(None)
39+
override def getSupportLevel(expr: FromUnixTime): SupportLevel = {
40+
if (expr.format == Literal(TimestampFormatter.defaultPattern)) {
41+
Incompatible(None)
42+
} else {
43+
Unsupported(None)
44+
}
45+
}
3846

3947
override def convert(
4048
expr: FromUnixTime,

0 commit comments

Comments
 (0)