mgaido91 commented on a change in pull request #25016: [SPARK-28200][SQL]
Decimal overflow handling in ExpressionEncoder
URL: https://github.com/apache/spark/pull/25016#discussion_r298819201
##########
File path:
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/encoders/ExpressionEncoderSuite.scala
##########
@@ -379,6 +380,80 @@ class ExpressionEncoderSuite extends
CodegenInterpretedPlanTest with AnalysisTes
assert(e.getMessage.contains("tuple with more than 22 elements are not
supported"))
}
+ // Scala / Java big decimals
----------------------------------------------------------
+
+ encodeDecodeTest(BigDecimal(("9" * 20) + "." + "9" * 18),
+ "scala decimal within precision/scale limit")
+ encodeDecodeTest(new java.math.BigDecimal(("9" * 20) + "." + "9" * 18),
+ "java decimal within precision/scale limit")
+
+ encodeDecodeTest(BigDecimal(("9" * 20) + "." + "9" * 18).unary_-,
+ "negative scala decimal within precision/scale limit")
+ encodeDecodeTest(new java.math.BigDecimal(("9" * 20) + "." + "9" *
18).negate,
+ "negative java decimal within precision/scale limit")
+
+ testOverflowingBigNumeric(BigDecimal("1" * 21), "scala big decimal")
+ testOverflowingBigNumeric(new java.math.BigDecimal("1" * 21), "java big
decimal")
+
+ testOverflowingBigNumeric(-BigDecimal("1" * 21), "negative scala big
decimal")
+ testOverflowingBigNumeric(new java.math.BigDecimal("1" * 21).negate,
"negative java big decimal")
+
+ testOverflowingBigNumeric(BigDecimal(("1" * 21) + ".123"),
+ "scala big decimal with fractional part")
+ testOverflowingBigNumeric(new java.math.BigDecimal(("1" * 21) + ".123"),
+ "java big decimal with fractional part")
+
+ testOverflowingBigNumeric(BigDecimal(("1" * 21) + "." + "9999" * 100),
+ "scala big decimal with long fractional part")
+ testOverflowingBigNumeric(new java.math.BigDecimal(("1" * 21) + "." +
"9999" * 100),
+ "java big decimal with long fractional part")
+
+ // Scala / Java big integers
----------------------------------------------------------
+
+ encodeDecodeTest(BigInt("9" * 38), "scala big integer within precision
limit")
+ encodeDecodeTest(new BigInteger("9" * 38), "java big integer within
precision limit")
+
+ encodeDecodeTest(-BigInt("9" * 38),
+ "negative scala big integer within precision limit")
+ encodeDecodeTest(new BigInteger("9" * 38).negate(),
+ "negative java big integer within precision limit")
+
+ testOverflowingBigNumeric(BigInt("1" * 39), "scala big int")
+ testOverflowingBigNumeric(new BigInteger("1" * 39), "java big integer")
+
+ testOverflowingBigNumeric(-BigInt("1" * 39), "negative scala big int")
+ testOverflowingBigNumeric(new BigInteger("1" * 39).negate, "negative java
big integer")
+
+ testOverflowingBigNumeric(BigInt("9" * 100), "scala very large big int")
+ testOverflowingBigNumeric(new BigInteger("9" * 100), "java very big int")
+
+ private def testOverflowingBigNumeric[T: TypeTag](bigDecimal: T, testName:
String): Unit = {
+ for {
Review comment:
`Seq("true", "false").foreach`
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]