Skip to content

Commit 949de34

Browse files
kazuyukitanimuradongjoon-hyun
authored andcommitted
[SPARK-45786][SQL][FOLLOWUP][TEST] Fix Decimal random number tests with ANSI enabled
### What changes were proposed in this pull request? This follow-up PR fixes the test for SPARK-45786 that is failing in GHA with SPARK_ANSI_SQL_MODE=true ### Why are the changes needed? The issue discovered in #43678 (comment) ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? Test updated ### Was this patch authored or co-authored using generative AI tooling? No Closes #43853 from kazuyukitanimura/SPARK-45786-FollowUp. Authored-by: Kazuyuki Tanimura <[email protected]> Signed-off-by: Dongjoon Hyun <[email protected]>
1 parent 2814293 commit 949de34

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ArithmeticExpressionSuite.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,27 +308,35 @@ class ArithmeticExpressionSuite extends SparkFunSuite with ExpressionEvalHelper
308308
val mulResult = Decimal(mulExact.setScale(mulType.scale, RoundingMode.HALF_UP))
309309
val mulExpected =
310310
if (mulResult.precision > DecimalType.MAX_PRECISION) null else mulResult
311-
checkEvaluation(mulActual, mulExpected)
311+
checkEvaluationOrException(mulActual, mulExpected)
312312

313313
val divType = Divide(null, null).resultDecimalType(p1, s1, p2, s2)
314314
val divResult = Decimal(divExact.setScale(divType.scale, RoundingMode.HALF_UP))
315315
val divExpected =
316316
if (divResult.precision > DecimalType.MAX_PRECISION) null else divResult
317-
checkEvaluation(divActual, divExpected)
317+
checkEvaluationOrException(divActual, divExpected)
318318

319319
val remType = Remainder(null, null).resultDecimalType(p1, s1, p2, s2)
320320
val remResult = Decimal(remExact.setScale(remType.scale, RoundingMode.HALF_UP))
321321
val remExpected =
322322
if (remResult.precision > DecimalType.MAX_PRECISION) null else remResult
323-
checkEvaluation(remActual, remExpected)
323+
checkEvaluationOrException(remActual, remExpected)
324324

325325
val quotType = IntegralDivide(null, null).resultDecimalType(p1, s1, p2, s2)
326326
val quotResult = Decimal(quotExact.setScale(quotType.scale, RoundingMode.HALF_UP))
327327
val quotExpected =
328328
if (quotResult.precision > DecimalType.MAX_PRECISION) null else quotResult
329-
checkEvaluation(quotActual, quotExpected.toLong)
329+
checkEvaluationOrException(quotActual, quotExpected.toLong)
330330
}
331331
}
332+
333+
def checkEvaluationOrException(actual: BinaryArithmetic, expected: Any): Unit =
334+
if (SQLConf.get.ansiEnabled && expected == null) {
335+
checkExceptionInExpression[SparkArithmeticException](actual,
336+
"NUMERIC_VALUE_OUT_OF_RANGE")
337+
} else {
338+
checkEvaluation(actual, expected)
339+
}
332340
}
333341
}
334342

0 commit comments

Comments
 (0)