@@ -90,7 +90,8 @@ object CometAdd extends CometExpressionSerde[Add] with MathBase {
9090 override def convert (
9191 expr : Add ,
9292 inputs : Seq [Attribute ],
93- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
93+ binding : Boolean ,
94+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
9495 if (! supportedDataType(expr.left.dataType)) {
9596 withInfo(expr, s " Unsupported datatype ${expr.left.dataType}" )
9697 return None
@@ -112,7 +113,8 @@ object CometSubtract extends CometExpressionSerde[Subtract] with MathBase {
112113 override def convert (
113114 expr : Subtract ,
114115 inputs : Seq [Attribute ],
115- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
116+ binding : Boolean ,
117+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
116118 if (! supportedDataType(expr.left.dataType)) {
117119 withInfo(expr, s " Unsupported datatype ${expr.left.dataType}" )
118120 return None
@@ -134,7 +136,8 @@ object CometMultiply extends CometExpressionSerde[Multiply] with MathBase {
134136 override def convert (
135137 expr : Multiply ,
136138 inputs : Seq [Attribute ],
137- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
139+ binding : Boolean ,
140+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
138141 if (! supportedDataType(expr.left.dataType)) {
139142 withInfo(expr, s " Unsupported datatype ${expr.left.dataType}" )
140143 return None
@@ -156,7 +159,8 @@ object CometDivide extends CometExpressionSerde[Divide] with MathBase {
156159 override def convert (
157160 expr : Divide ,
158161 inputs : Seq [Attribute ],
159- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
162+ binding : Boolean ,
163+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
160164 // Datafusion now throws an exception for dividing by zero
161165 // See https://github.com/apache/arrow-datafusion/pull/6792
162166 // For now, use NullIf to swap zeros with nulls.
@@ -191,7 +195,8 @@ object CometIntegralDivide extends CometExpressionSerde[IntegralDivide] with Mat
191195 override def convert (
192196 expr : IntegralDivide ,
193197 inputs : Seq [Attribute ],
194- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
198+ binding : Boolean ,
199+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
195200 if (! supportedDataType(expr.left.dataType)) {
196201 withInfo(expr, s " Unsupported datatype ${expr.left.dataType}" )
197202 return None
@@ -263,7 +268,8 @@ object CometRemainder extends CometExpressionSerde[Remainder] with MathBase {
263268 override def convert (
264269 expr : Remainder ,
265270 inputs : Seq [Attribute ],
266- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
271+ binding : Boolean ,
272+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
267273 if (! supportedDataType(expr.left.dataType)) {
268274 withInfo(expr, s " Unsupported datatype ${expr.left.dataType}" )
269275 return None
@@ -287,21 +293,15 @@ object CometRemainder extends CometExpressionSerde[Remainder] with MathBase {
287293
288294object CometRound extends CometExpressionSerde [Round ] {
289295
290- override def getSupportLevel (expr : Round ): SupportLevel = {
291- if (expr.ansiEnabled) {
292- Incompatible (Some (" ANSI mode is not supported" ))
293- } else {
294- Compatible (None )
295- }
296- }
297-
298296 override def convert (
299297 r : Round ,
300298 inputs : Seq [Attribute ],
301- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
299+ binding : Boolean ,
300+ failOnError: Boolean ): Option [ExprOuterClass .Expr ] = {
302301 // _scale s a constant, copied from Spark's RoundBase because it is a protected val
303302 val scaleV : Any = r.scale.eval(EmptyRow )
304303 val _scale : Int = scaleV.asInstanceOf [Int ]
304+ val isAnsiEnabled = r.ansiEnabled
305305
306306 lazy val childExpr = exprToProtoInternal(r.child, inputs, binding)
307307 r.child.dataType match {
@@ -331,7 +331,7 @@ object CometRound extends CometExpressionSerde[Round] {
331331 None
332332 case _ =>
333333 // `scale` must be Int64 type in DataFusion
334- val scaleExpr = exprToProtoInternal(Literal (_scale.toLong, LongType ), inputs, binding)
334+ val scaleExpr = exprToProtoInternal(Literal (_scale.toLong, LongType ), inputs, binding,isAnsiEnabled )
335335 val optExpr =
336336 scalarFunctionExprToProtoWithReturnType(" round" , r.dataType, childExpr, scaleExpr)
337337 optExprWithInfo(optExpr, r, r.child)
@@ -344,7 +344,8 @@ object CometUnaryMinus extends CometExpressionSerde[UnaryMinus] {
344344 override def convert (
345345 expr : UnaryMinus ,
346346 inputs : Seq [Attribute ],
347- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
347+ binding : Boolean ,
348+ failOnError : Boolean ): Option [ExprOuterClass .Expr ] = {
348349 val childExpr = exprToProtoInternal(expr.child, inputs, binding)
349350 if (childExpr.isDefined) {
350351 val builder = ExprOuterClass .UnaryMinus .newBuilder()
0 commit comments