From d6bc7e9bd4176c229df09b37121388462a750a97 Mon Sep 17 00:00:00 2001 From: Marco Gaido Date: Fri, 20 Apr 2018 18:18:14 +0200 Subject: [PATCH] address comment --- .../expressions/decimalExpressions.scala | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/decimalExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/decimalExpressions.scala index 2db610c7d560e..e30bd0d8231ee 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/decimalExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/decimalExpressions.scala @@ -99,20 +99,10 @@ case class CheckOverflow( override protected def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { nullSafeCodeGen(ctx, ev, eval => { - val tmp = ctx.freshName("tmp") - val onOverflow = if (nullOnOverflow) { - s"${ev.isNull} = true" - } else { - s"""throw new ArithmeticException($tmp.toDebugString() + " cannot be represented as " + - | "Decimal(${dataType.precision}, ${dataType.scale}).")""".stripMargin - } s""" - | Decimal $tmp = $eval.clone(); - | if ($tmp.changePrecision(${dataType.precision}, ${dataType.scale})) { - | ${ev.value} = $tmp; - | } else { - | $onOverflow; - | } + |${ev.value} = $eval.toPrecision( + | ${dataType.precision}, ${dataType.scale}, Decimal.ROUND_HALF_UP, $nullOnOverflow); + |${ev.isNull} = ${ev.value} == null; """.stripMargin }) }