rui-mo commented on code in PR #5985:
URL: https://github.com/apache/incubator-gluten/pull/5985#discussion_r1628603742
##########
gluten-core/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala:
##########
@@ -563,18 +563,68 @@ object ExpressionConverter extends SQLConfHelper with
Logging {
arrayTransform
)
case tryEval @ TryEval(a: Add) =>
- BackendsApiManager.getSparkPlanExecApiInstance.genTryAddTransformer(
+
BackendsApiManager.getSparkPlanExecApiInstance.genTryArithmeticTransformer(
substraitExprName,
replaceWithExpressionTransformerInternal(a.left, attributeSeq,
expressionsMap),
replaceWithExpressionTransformerInternal(a.right, attributeSeq,
expressionsMap),
- tryEval
+ tryEval,
+ ExpressionNames.CHECK_ADD
+ )
Review Comment:
For this case, is the substraitExprName 'try', and are we generating a
try(check_add) function? I notice in Velox, try means returning null when
exception happens, which seems to be different with TryEval in Spark which
requires failing on error.
##########
backends-velox/src/main/scala/org/apache/gluten/backendsapi/velox/VeloxSparkPlanExecApi.scala:
##########
@@ -123,42 +123,50 @@ class VeloxSparkPlanExecApi extends SparkPlanExecApi {
original)
}
- override def genTryAddTransformer(
+ override def genTryArithmeticTransformer(
substraitExprName: String,
left: ExpressionTransformer,
right: ExpressionTransformer,
- original: TryEval): ExpressionTransformer = {
+ original: TryEval,
+ checkArithmeticExprName: String): ExpressionTransformer = {
if (SparkShimLoader.getSparkShims.withAnsiEvalMode(original.child)) {
- throw new GlutenNotSupportException(s"add with ansi mode is not
supported")
+ throw new GlutenNotSupportException(
+ s"${original.child.prettyName} with ansi mode is not supported")
}
original.child.dataType match {
case LongType | IntegerType | ShortType | ByteType =>
- case _ => throw new GlutenNotSupportException(s"try_add is not
supported")
+ case _ => throw new GlutenNotSupportException(s"$substraitExprName is
not supported")
}
// Offload to velox for only IntegralTypes.
GenericExpressionTransformer(
substraitExprName,
- Seq(GenericExpressionTransformer(ExpressionNames.TRY_ADD, Seq(left,
right), original)),
+ Seq(GenericExpressionTransformer(checkArithmeticExprName, Seq(left,
right), original)),
original)
}
- override def genAddTransformer(
+ /**
+ * Map arithmetic expr to different functions: substraitExprName or
try(checkArithmeticExprName)
+ * based on EvalMode.
+ */
+ override def genArithmeticTransformer(
Review Comment:
Could you explain the bit the difference of `genTryArithmeticTransformer`
and `genArithmeticTransformer`? I notice genTryArithmeticTransformer does not
gen a try function but genArithmeticTransformer does.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]