From 39f0309195eb162f8e276bf758600e70ba39ad49 Mon Sep 17 00:00:00 2001 From: bomeng Date: Wed, 20 Aug 2014 11:35:48 -0700 Subject: [PATCH] Modify the code of POWER and ABS. Move them to the file arithmetic --- .../apache/spark/sql/catalyst/SqlParser.scala | 5 ++ .../org/apache/spark/sql/SQLQuerySuite.scala | 56 ++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala index 0eff1614c3c95..c10445c0f691a 100755 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala @@ -126,6 +126,8 @@ class SqlParser extends StandardTokenParsers with PackratParsers { protected val SUBSTRING = Keyword("SUBSTRING") protected val SQRT = Keyword("SQRT") protected val ABS = Keyword("ABS") + protected val POW = Keyword("POW") + protected val POWER = Keyword("POWER") // Use reflection to find the reserved words defined in this class. protected val reservedWords = @@ -330,6 +332,9 @@ class SqlParser extends StandardTokenParsers with PackratParsers { } | SQRT ~> "(" ~> expression <~ ")" ^^ { case exp => Sqrt(exp) } | ABS ~> "(" ~> expression <~ ")" ^^ { case exp => Abs(exp) } | + (POW | POWER) ~> "(" ~> expression ~ "," ~ expression <~ ")" ^^ { + case s ~ "," ~ p => Power(s,p) + } | ident ~ "(" ~ repsep(expression, ",") <~ ")" ^^ { case udfName ~ _ ~ exprs => UnresolvedFunction(udfName, exprs) } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index 1ac205937714c..4a6842c66ebd7 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -41,6 +41,58 @@ class SQLQuerySuite extends QueryTest with BeforeAndAfterAll { } + test("SPARK-3176 Added Parser of SQL ABS()") { + checkAnswer( + sql("SELECT ABS(-1.3)"), + 1.3) + checkAnswer( + sql("SELECT ABS(0.0)"), + 0.0) + checkAnswer( + sql("SELECT ABS(2.5)"), + 2.5) + } + + test("SPARK-3176 Added Parser of SQL POWER()") { + checkAnswer( + sql("SELECT POWER(0, 512.0)"), + 0.0) + checkAnswer( + sql("SELECT POW(1.0, 256.0)"), + 1.0) + checkAnswer( + sql("SELECT POWER(1, -128)"), + 1.0) + checkAnswer( + sql("SELECT POW(-1.0, -63)"), + -1.0) + checkAnswer( + sql("SELECT POWER(-1, 32.0)"), + 1.0) + checkAnswer( + sql("SELECT POW(2, 8)"), + 256.0) + checkAnswer( + sql("SELECT POWER(0.5, 2)"), + 0.25) + checkAnswer( + sql("SELECT POW(2, -2)"), + 0.25) + checkAnswer( + sql("SELECT POWER(8, 1)"), + 8.0) + checkAnswer( + sql("SELECT POW(16, 0.5)"), + 4.0) + } + + test("SPARK-3176 Added Parser of SQL LAST()") { + checkAnswer( + sql("SELECT LAST(n) FROM lowerCaseData"), + 4) + } + + test("SPARK-2041 column name equals tablename") { checkAnswer( sql("SELECT tableName FROM tableName"), @@ -53,14 +105,14 @@ class SQLQuerySuite extends QueryTest with BeforeAndAfterAll { (1 to 100).map(x => Row(math.sqrt(x.toDouble))).toSeq ) } - + test("SQRT with automatic string casts") { checkAnswer( sql("SELECT SQRT(CAST(key AS STRING)) FROM testData"), (1 to 100).map(x => Row(math.sqrt(x.toDouble))).toSeq ) } - + test("SPARK-2407 Added Parser of SQL SUBSTR()") { checkAnswer( sql("SELECT substr(tableName, 1, 2) FROM tableName"),