diff options
author | Michael Armbrust <michael@databricks.com> | 2014-05-16 11:47:00 -0700 |
---|---|---|
committer | Reynold Xin <rxin@apache.org> | 2014-05-16 11:47:07 -0700 |
commit | 386b31cbc5dd9ef1e9d989a3c6a3ac587c3684c1 (patch) | |
tree | da8fc4bca240889c71a799bb7d6fc7021b1cac7d /sql/hive/src/main | |
parent | ff47cdc0cefed7c40da0f4be39770adfa7b4371f (diff) | |
download | spark-386b31cbc5dd9ef1e9d989a3c6a3ac587c3684c1.tar.gz spark-386b31cbc5dd9ef1e9d989a3c6a3ac587c3684c1.tar.bz2 spark-386b31cbc5dd9ef1e9d989a3c6a3ac587c3684c1.zip |
[SQL] Implement between in hql
Author: Michael Armbrust <michael@databricks.com>
Closes #804 from marmbrus/between and squashes the following commits:
ae24672 [Michael Armbrust] add golden answer.
d9997ef [Michael Armbrust] Implement between in hql.
9bd4433 [Michael Armbrust] Better error on parse failures.
(cherry picked from commit 032d6632ad4ab88c97c9e568b63169a114220a02)
Signed-off-by: Reynold Xin <rxin@apache.org>
Diffstat (limited to 'sql/hive/src/main')
-rw-r--r-- | sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala index 1f688fe111..93b9057a23 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala @@ -233,6 +233,11 @@ private[hive] object HiveQl { } } catch { case e: Exception => throw new ParseException(sql, e) + case e: NotImplementedError => sys.error( + s""" + |Unsupported language features in query: $sql + |${dumpTree(getAst(sql))} + """.stripMargin) } } @@ -865,6 +870,17 @@ private[hive] object HiveQl { IsNull(nodeToExpr(child)) case Token("TOK_FUNCTION", Token("IN", Nil) :: value :: list) => In(nodeToExpr(value), list.map(nodeToExpr)) + case Token("TOK_FUNCTION", + Token("between", Nil) :: + Token("KW_FALSE", Nil) :: + target :: + minValue :: + maxValue :: Nil) => + + val targetExpression = nodeToExpr(target) + And( + GreaterThanOrEqual(targetExpression, nodeToExpr(minValue)), + LessThanOrEqual(targetExpression, nodeToExpr(maxValue))) /* Boolean Logic */ case Token(AND(), left :: right:: Nil) => And(nodeToExpr(left), nodeToExpr(right)) |