cloud-fan commented on a change in pull request #34729:
URL: https://github.com/apache/spark/pull/34729#discussion_r783114281
##########
File path:
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MathExpressionsSuite.scala
##########
@@ -705,6 +818,42 @@ class MathExpressionsSuite extends SparkFunSuite with
ExpressionEvalHelper {
checkEvaluation(BRound(-3.5, 0), -4.0)
checkEvaluation(BRound(-0.35, 1), -0.4)
checkEvaluation(BRound(-35, -1), -40)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(2.5), Literal(0)))), 2L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(3.5), Literal(0)))), 3L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(-2.5), Literal(0)))), -3L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(-3.5), Literal(0)))), -4L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(-0.35), Literal(1)))), -0.4)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(-35), Literal(-1)))), -40L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(2.5), Literal(0)))), 3L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(3.5), Literal(0)))), 4L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(-2.5), Literal(0)))), -2L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(-3.5), Literal(0)))), -3L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(-0.35), Literal(1)))), -0.3)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(-35), Literal(-1)))), -30L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(-0.1), Literal(0)))), -1L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(5), Literal(0)))), 5L)
+ checkEvaluation(checkDataTypeAndCast(
+ FloorExpressionBuilder.build(Seq(Literal(3.1411), Literal(-3)))), 0L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(-0.1), Literal(0)))), 0L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(5), Literal(0)))), 5L)
+ checkEvaluation(checkDataTypeAndCast(
+ CeilExpressionBuilder.build(Seq(Literal(3.1411), Literal(-3)))), 1000L)
Review comment:
I'm a bit concerned about this case. It means the result can be
arbitrarily big, if the `scale` is a very large negative number.
Since we return long for negative scale, I think the scale can't be smaller
than `-18`. However, this can be weird if the input is decimal, e.g. there is a
column `col` of type `decimal(38, 0)`, it's weird if we fail `ceil(col, -30)`.
It seems to be that, `RoundCeil` should only accept decimal inputs if the
scale is not 0. Then return type should consider both the input decimal type
and the scale value.
--
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]