Skip to content

Commit 278c26b

Browse files
committed
add type param to IncompatExpr
1 parent e4bcd9d commit 278c26b

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,19 @@ object Unsupported extends SupportLevel
4040
object CometCast
4141
extends CometExpressionSerde[Cast]
4242
with CometExprShim
43-
with IncompatExpr
43+
with IncompatExpr[Cast]
4444
with IncompatAnsiExpr[Cast] {
4545

4646
override def isAnsiMode(expr: Cast): Boolean = expr.ansiEnabled
4747

48+
override def isIncompat(expr: Cast): Boolean = {
49+
isSupported(expr.child.dataType, expr.dataType, expr.timeZoneId, evalMode(expr)) match {
50+
case _: Compatible => true
51+
case _: Incompatible => false
52+
case Unsupported => false
53+
}
54+
}
55+
4856
override def convert(
4957
expr: Cast,
5058
inputs: Seq[Attribute],

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,8 @@ object QueryPlanSerde extends Logging with CometExprShim {
655655
s"${CometConf.COMET_ANSI_EXPR_ALLOW_INCOMPATIBLE.key}=true. ${CometConf.COMPAT_GUIDE}.")
656656
None
657657

658-
case _: IncompatExpr if !CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.get() =>
658+
case incompat: IncompatExpr[T]
659+
if incompat.isIncompat(expr) && !CometConf.COMET_EXPR_ALLOW_INCOMPATIBLE.get() =>
659660
withInfo(
660661
expr,
661662
s"$expr is not fully compatible with Spark. To enable it anyway, set " +
@@ -2445,7 +2446,9 @@ trait CometAggregateExpressionSerde {
24452446
}
24462447

24472448
/** Marker trait for an expression that is not guaranteed to be 100% compatible with Spark */
2448-
trait IncompatExpr {}
2449+
trait IncompatExpr[T] {
2450+
def isIncompat(expr: T): Boolean = true
2451+
}
24492452

24502453
trait IncompatAnsiExpr[T] {
24512454
def isAnsiMode(expr: T): Boolean

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ object CometArrayRemove extends CometExpressionSerde[ArrayRemove] with CometExpr
9393
}
9494
}
9595

96-
object CometArrayAppend extends CometExpressionSerde[ArrayAppend] with IncompatExpr {
96+
object CometArrayAppend extends CometExpressionSerde[ArrayAppend] with IncompatExpr[ArrayAppend] {
9797
override def convert(
9898
expr: ArrayAppend,
9999
inputs: Seq[Attribute],
@@ -149,7 +149,9 @@ object CometArrayContains extends CometExpressionSerde[ArrayContains] {
149149
}
150150
}
151151

152-
object CometArrayDistinct extends CometExpressionSerde[ArrayDistinct] with IncompatExpr {
152+
object CometArrayDistinct
153+
extends CometExpressionSerde[ArrayDistinct]
154+
with IncompatExpr[ArrayDistinct] {
153155
override def convert(
154156
expr: ArrayDistinct,
155157
inputs: Seq[Attribute],
@@ -162,7 +164,9 @@ object CometArrayDistinct extends CometExpressionSerde[ArrayDistinct] with Incom
162164
}
163165
}
164166

165-
object CometArrayIntersect extends CometExpressionSerde[ArrayIntersect] with IncompatExpr {
167+
object CometArrayIntersect
168+
extends CometExpressionSerde[ArrayIntersect]
169+
with IncompatExpr[ArrayIntersect] {
166170
override def convert(
167171
expr: ArrayIntersect,
168172
inputs: Seq[Attribute],
@@ -201,7 +205,9 @@ object CometArrayMin extends CometExpressionSerde[ArrayMin] {
201205
}
202206
}
203207

204-
object CometArraysOverlap extends CometExpressionSerde[ArraysOverlap] with IncompatExpr {
208+
object CometArraysOverlap
209+
extends CometExpressionSerde[ArraysOverlap]
210+
with IncompatExpr[ArraysOverlap] {
205211
override def convert(
206212
expr: ArraysOverlap,
207213
inputs: Seq[Attribute],
@@ -218,7 +224,7 @@ object CometArraysOverlap extends CometExpressionSerde[ArraysOverlap] with Incom
218224
}
219225
}
220226

221-
object CometArrayRepeat extends CometExpressionSerde[ArrayRepeat] with IncompatExpr {
227+
object CometArrayRepeat extends CometExpressionSerde[ArrayRepeat] with IncompatExpr[ArrayRepeat] {
222228
override def convert(
223229
expr: ArrayRepeat,
224230
inputs: Seq[Attribute],
@@ -232,7 +238,7 @@ object CometArrayRepeat extends CometExpressionSerde[ArrayRepeat] with IncompatE
232238
}
233239
}
234240

235-
object CometArrayCompact extends CometExpressionSerde[Expression] with IncompatExpr {
241+
object CometArrayCompact extends CometExpressionSerde[Expression] with IncompatExpr[Expression] {
236242
override def convert(
237243
expr: Expression,
238244
inputs: Seq[Attribute],
@@ -255,7 +261,7 @@ object CometArrayCompact extends CometExpressionSerde[Expression] with IncompatE
255261
object CometArrayExcept
256262
extends CometExpressionSerde[ArrayExcept]
257263
with CometExprShim
258-
with IncompatExpr {
264+
with IncompatExpr[ArrayExcept] {
259265

260266
@tailrec
261267
def isTypeSupported(dt: DataType): Boolean = {
@@ -292,7 +298,7 @@ object CometArrayExcept
292298
}
293299
}
294300

295-
object CometArrayJoin extends CometExpressionSerde[ArrayJoin] with IncompatExpr {
301+
object CometArrayJoin extends CometExpressionSerde[ArrayJoin] with IncompatExpr[ArrayJoin] {
296302
override def convert(
297303
expr: ArrayJoin,
298304
inputs: Seq[Attribute],
@@ -326,7 +332,7 @@ object CometArrayJoin extends CometExpressionSerde[ArrayJoin] with IncompatExpr
326332
}
327333
}
328334

329-
object CometArrayInsert extends CometExpressionSerde[ArrayInsert] with IncompatExpr {
335+
object CometArrayInsert extends CometExpressionSerde[ArrayInsert] with IncompatExpr[ArrayInsert] {
330336
override def convert(
331337
expr: ArrayInsert,
332338
inputs: Seq[Attribute],
@@ -361,7 +367,7 @@ object CometArrayInsert extends CometExpressionSerde[ArrayInsert] with IncompatE
361367
}
362368
}
363369

364-
object CometArrayUnion extends CometExpressionSerde[ArrayUnion] with IncompatExpr {
370+
object CometArrayUnion extends CometExpressionSerde[ArrayUnion] with IncompatExpr[ArrayUnion] {
365371
override def convert(
366372
expr: ArrayUnion,
367373
inputs: Seq[Attribute],

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ import org.apache.comet.serde.QueryPlanSerde.{exprToProtoInternal, optExprWithIn
2727

2828
// TODO: DataFusion supports only -8334601211038 <= sec <= 8210266876799
2929
// https://github.com/apache/datafusion/issues/16594
30-
object CometFromUnixTime extends CometExpressionSerde[FromUnixTime] with IncompatExpr {
30+
object CometFromUnixTime
31+
extends CometExpressionSerde[FromUnixTime]
32+
with IncompatExpr[FromUnixTime] {
3133
override def convert(
3234
expr: FromUnixTime,
3335
inputs: Seq[Attribute],

0 commit comments

Comments
 (0)