[SPARK-2050 - 2][SQL] DIV and BETWEEN should not be case sensitive.

Followup: #989

Author: Michael Armbrust <michael@databricks.com>

Closes #994 from marmbrus/caseSensitiveFunctions2 and squashes the following commits:

9d9c8ed [Michael Armbrust] Fix DIV and BETWEEN.
This commit is contained in:
Michael Armbrust 2014-06-06 11:31:37 -07:00
parent 8d85359f84
commit 8d210560be
4 changed files with 10 additions and 4 deletions

View file

@ -795,6 +795,8 @@ private[hive] object HiveQl {
val RLIKE = "(?i)RLIKE".r
val REGEXP = "(?i)REGEXP".r
val IN = "(?i)IN".r
val DIV = "(?i)DIV".r
val BETWEEN = "(?i)BETWEEN".r
protected def nodeToExpr(node: Node): Expression = node match {
/* Attribute References */
@ -864,7 +866,7 @@ private[hive] object HiveQl {
case Token("-", left :: right:: Nil) => Subtract(nodeToExpr(left), nodeToExpr(right))
case Token("*", left :: right:: Nil) => Multiply(nodeToExpr(left), nodeToExpr(right))
case Token("/", left :: right:: Nil) => Divide(nodeToExpr(left), nodeToExpr(right))
case Token("DIV", left :: right:: Nil) => Divide(nodeToExpr(left), nodeToExpr(right))
case Token(DIV(), left :: right:: Nil) => Divide(nodeToExpr(left), nodeToExpr(right))
case Token("%", left :: right:: Nil) => Remainder(nodeToExpr(left), nodeToExpr(right))
/* Comparisons */
@ -885,7 +887,7 @@ private[hive] object HiveQl {
case Token("TOK_FUNCTION", Token(IN(), Nil) :: value :: list) =>
In(nodeToExpr(value), list.map(nodeToExpr))
case Token("TOK_FUNCTION",
Token("between", Nil) ::
Token(BETWEEN(), Nil) ::
Token("KW_FALSE", Nil) ::
target ::
minValue ::

View file

@ -25,8 +25,10 @@ import org.apache.spark.sql.hive.test.TestHive._
class HiveQuerySuite extends HiveComparisonTest {
createQueryTest("between",
"SELECT * FROM src WHERE key between 1 and 2"
)
"SELECT * FROM src WHERE key Between 1 and 2")
createQueryTest("div",
"SELECT 1 DIV 2, 1 div 2, 1 dIv 2 FROM src LIMIT 1")
test("Query expressed in SQL") {
assert(sql("SELECT 1").collect() === Array(Seq(1)))