From d07f550189c885ab7e6d44a1528908a1a52cba43 Mon Sep 17 00:00:00 2001 From: caoxuewen Date: Wed, 17 May 2017 18:35:44 +0800 Subject: [PATCH 1/3] fix:add unit test cases --- .../spark/sql/catalyst/expressions/mathExpressions.scala | 3 ++- .../scala/org/apache/spark/sql/MathFunctionsSuite.scala | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala index a7bf81e98be8..f038f83e1eec 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala @@ -232,9 +232,10 @@ case class Ceil(child: Expression) extends UnaryMathExpression(math.ceil, "CEIL" } override def inputTypes: Seq[AbstractDataType] = - Seq(TypeCollection(DoubleType, DecimalType)) + Seq(TypeCollection(LongType, DoubleType, DecimalType)) protected override def nullSafeEval(input: Any): Any = child.dataType match { + case LongType => input.asInstanceOf[Long] case DoubleType => f(input.asInstanceOf[Double]).toLong case DecimalType.Fixed(precision, scale) => input.asInstanceOf[Decimal].ceil } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala index c2d08a06569b..975882f12177 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala @@ -173,6 +173,14 @@ class MathFunctionsSuite extends QueryTest with SharedSQLContext { checkAnswer( sql("SELECT ceiling(0), ceiling(1), ceiling(1.5)"), Row(0L, 1L, 2L)) + + checkAnswer( + sql("SELECT ceil(1234567890123456), ceil(12345678901234567)"), + Row(1234567890123456L, 12345678901234567L)) + + checkAnswer( + sql("SELECT ceiling(1234567890123456), ceiling(12345678901234567)"), + Row(1234567890123456L, 12345678901234567L)) } test("conv") { From 842842f724f074c45b64fb6a40bae23fefbc6703 Mon Sep 17 00:00:00 2001 From: caoxuewen Date: Thu, 18 May 2017 11:14:36 +0800 Subject: [PATCH 2/3] Improve floor handle the value which is not expected --- .../spark/sql/catalyst/expressions/mathExpressions.scala | 3 ++- .../scala/org/apache/spark/sql/MathFunctionsSuite.scala | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala index f038f83e1eec..bf46a3986213 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala @@ -348,9 +348,10 @@ case class Floor(child: Expression) extends UnaryMathExpression(math.floor, "FLO } override def inputTypes: Seq[AbstractDataType] = - Seq(TypeCollection(DoubleType, DecimalType)) + Seq(TypeCollection(LongType, DoubleType, DecimalType)) protected override def nullSafeEval(input: Any): Any = child.dataType match { + case LongType => input.asInstanceOf[Long] case DoubleType => f(input.asInstanceOf[Double]).toLong case DecimalType.Fixed(precision, scale) => input.asInstanceOf[Decimal].floor } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala index 975882f12177..499ddd5b5641 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala @@ -173,7 +173,7 @@ class MathFunctionsSuite extends QueryTest with SharedSQLContext { checkAnswer( sql("SELECT ceiling(0), ceiling(1), ceiling(1.5)"), Row(0L, 1L, 2L)) - + checkAnswer( sql("SELECT ceil(1234567890123456), ceil(12345678901234567)"), Row(1234567890123456L, 12345678901234567L)) @@ -197,6 +197,13 @@ class MathFunctionsSuite extends QueryTest with SharedSQLContext { test("floor") { testOneToOneMathFunction(floor, (d: Double) => math.floor(d).toLong) + checkAnswer( + sql("SELECT floor(0), floor(1), floor(1.5)"), + Row(0L, 1L, 1L)) + + checkAnswer( + sql("SELECT floor(1234567890123456), floor(12345678901234567)"), + Row(1234567890123456L, 12345678901234567L)) } test("factorial") { From f7afebf941e326409cad46e46917f0684418dacc Mon Sep 17 00:00:00 2001 From: caoxuewen Date: Fri, 19 May 2017 11:24:18 +0800 Subject: [PATCH 3/3] Adds operators.sql test case --- .../sql/catalyst/analysis/AnalysisSuite.scala | 2 +- .../resources/sql-tests/inputs/operators.sql | 14 ++++ .../sql-tests/results/operators.sql.out | 80 +++++++++++++++++++ .../apache/spark/sql/MathFunctionsSuite.scala | 15 ---- 4 files changed, 95 insertions(+), 16 deletions(-) diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala index 31047f688600..0896caeab8d7 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala @@ -262,7 +262,7 @@ class AnalysisSuite extends AnalysisTest with ShouldMatchers { val plan = testRelation2.select('c).orderBy(Floor('a).asc) val expected = testRelation2.select(c, a) - .orderBy(Floor(Cast(a, DoubleType, Option(TimeZone.getDefault().getID))).asc).select(c) + .orderBy(Floor(Cast(a, LongType, Option(TimeZone.getDefault().getID))).asc).select(c) checkAnalysis(plan, expected) } diff --git a/sql/core/src/test/resources/sql-tests/inputs/operators.sql b/sql/core/src/test/resources/sql-tests/inputs/operators.sql index 1920a108c658..f7167472b05c 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/operators.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/operators.sql @@ -59,3 +59,17 @@ select cot(1); select cot(null); select cot(0); select cot(-1); + +-- ceil and ceiling +select ceiling(0); +select ceiling(1); +select ceil(1234567890123456); +select ceil(12345678901234567); +select ceiling(1234567890123456); +select ceiling(12345678901234567); + +-- floor +select floor(0); +select floor(1); +select floor(1234567890123456); +select floor(12345678901234567); diff --git a/sql/core/src/test/resources/sql-tests/results/operators.sql.out b/sql/core/src/test/resources/sql-tests/results/operators.sql.out index abd18211c70d..fe52005aa91d 100644 --- a/sql/core/src/test/resources/sql-tests/results/operators.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/operators.sql.out @@ -316,3 +316,83 @@ select cot(-1) struct -- !query 37 output -0.6420926159343306 + + +-- !query 38 +select ceiling(0) +-- !query 38 schema +struct +-- !query 38 output +0 + + +-- !query 39 +select ceiling(1) +-- !query 39 schema +struct +-- !query 39 output +1 + + +-- !query 40 +select ceil(1234567890123456) +-- !query 40 schema +struct +-- !query 40 output +1234567890123456 + + +-- !query 41 +select ceil(12345678901234567) +-- !query 41 schema +struct +-- !query 41 output +12345678901234567 + + +-- !query 42 +select ceiling(1234567890123456) +-- !query 42 schema +struct +-- !query 42 output +1234567890123456 + + +-- !query 43 +select ceiling(12345678901234567) +-- !query 43 schema +struct +-- !query 43 output +12345678901234567 + + +-- !query 44 +select floor(0) +-- !query 44 schema +struct +-- !query 44 output +0 + + +-- !query 45 +select floor(1) +-- !query 45 schema +struct +-- !query 45 output +1 + + +-- !query 46 +select floor(1234567890123456) +-- !query 46 schema +struct +-- !query 46 output +1234567890123456 + + +-- !query 47 +select floor(12345678901234567) +-- !query 47 schema +struct +-- !query 47 output +12345678901234567 diff --git a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala index 499ddd5b5641..c2d08a06569b 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/MathFunctionsSuite.scala @@ -173,14 +173,6 @@ class MathFunctionsSuite extends QueryTest with SharedSQLContext { checkAnswer( sql("SELECT ceiling(0), ceiling(1), ceiling(1.5)"), Row(0L, 1L, 2L)) - - checkAnswer( - sql("SELECT ceil(1234567890123456), ceil(12345678901234567)"), - Row(1234567890123456L, 12345678901234567L)) - - checkAnswer( - sql("SELECT ceiling(1234567890123456), ceiling(12345678901234567)"), - Row(1234567890123456L, 12345678901234567L)) } test("conv") { @@ -197,13 +189,6 @@ class MathFunctionsSuite extends QueryTest with SharedSQLContext { test("floor") { testOneToOneMathFunction(floor, (d: Double) => math.floor(d).toLong) - checkAnswer( - sql("SELECT floor(0), floor(1), floor(1.5)"), - Row(0L, 1L, 1L)) - - checkAnswer( - sql("SELECT floor(1234567890123456), floor(12345678901234567)"), - Row(1234567890123456L, 12345678901234567L)) } test("factorial") {