aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaoyuan Wang <daoyuan.wang@intel.com>2014-12-02 14:25:12 -0800
committerMichael Armbrust <michael@databricks.com>2014-12-02 14:26:30 -0800
commitadc5d6f09edfc366f2ae151c2c3c13e07821d386 (patch)
tree3d767ed8e41ff22ce77416b7087be343f637fadb
parent97dc2384ad4cb555200bbe994b5470f81fe4671f (diff)
downloadspark-adc5d6f09edfc366f2ae151c2c3c13e07821d386.tar.gz
spark-adc5d6f09edfc366f2ae151c2c3c13e07821d386.tar.bz2
spark-adc5d6f09edfc366f2ae151c2c3c13e07821d386.zip
[SPARK-4670] [SQL] wrong symbol for bitwise not
We should use `~` instead of `-` for bitwise NOT. Author: Daoyuan Wang <daoyuan.wang@intel.com> Closes #3528 from adrian-wang/symbol and squashes the following commits: affd4ad [Daoyuan Wang] fix code gen test case 56efb79 [Daoyuan Wang] ensure bitwise NOT over byte and short persist data type f55fbae [Daoyuan Wang] wrong symbol for bitwise not (cherry picked from commit 1f5ddf17e831ad9717f0f4b60a727a3381fad4f9) Signed-off-by: Michael Armbrust <michael@databricks.com>
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala20
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvaluationSuite.scala15
2 files changed, 25 insertions, 10 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
index 7ec18b8419..61c26c50a6 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala
@@ -42,7 +42,7 @@ case class Sqrt(child: Expression) extends UnaryExpression {
override def toString = s"SQRT($child)"
override def eval(input: Row): Any = {
- n1(child, input, ((na,a) => math.sqrt(na.toDouble(a))))
+ n1(child, input, (na,a) => math.sqrt(na.toDouble(a)))
}
}
@@ -138,7 +138,7 @@ case class BitwiseAnd(left: Expression, right: Expression) extends BinaryArithme
case ShortType => (evalE1.asInstanceOf[Short] & evalE2.asInstanceOf[Short]).toShort
case IntegerType => evalE1.asInstanceOf[Int] & evalE2.asInstanceOf[Int]
case LongType => evalE1.asInstanceOf[Long] & evalE2.asInstanceOf[Long]
- case other => sys.error(s"Unsupported bitwise & operation on ${other}")
+ case other => sys.error(s"Unsupported bitwise & operation on $other")
}
}
@@ -153,7 +153,7 @@ case class BitwiseOr(left: Expression, right: Expression) extends BinaryArithmet
case ShortType => (evalE1.asInstanceOf[Short] | evalE2.asInstanceOf[Short]).toShort
case IntegerType => evalE1.asInstanceOf[Int] | evalE2.asInstanceOf[Int]
case LongType => evalE1.asInstanceOf[Long] | evalE2.asInstanceOf[Long]
- case other => sys.error(s"Unsupported bitwise | operation on ${other}")
+ case other => sys.error(s"Unsupported bitwise | operation on $other")
}
}
@@ -168,7 +168,7 @@ case class BitwiseXor(left: Expression, right: Expression) extends BinaryArithme
case ShortType => (evalE1.asInstanceOf[Short] ^ evalE2.asInstanceOf[Short]).toShort
case IntegerType => evalE1.asInstanceOf[Int] ^ evalE2.asInstanceOf[Int]
case LongType => evalE1.asInstanceOf[Long] ^ evalE2.asInstanceOf[Long]
- case other => sys.error(s"Unsupported bitwise ^ operation on ${other}")
+ case other => sys.error(s"Unsupported bitwise ^ operation on $other")
}
}
@@ -181,7 +181,7 @@ case class BitwiseNot(child: Expression) extends UnaryExpression {
def dataType = child.dataType
override def foldable = child.foldable
def nullable = child.nullable
- override def toString = s"-$child"
+ override def toString = s"~$child"
override def eval(input: Row): Any = {
val evalE = child.eval(input)
@@ -189,11 +189,11 @@ case class BitwiseNot(child: Expression) extends UnaryExpression {
null
} else {
dataType match {
- case ByteType => (~(evalE.asInstanceOf[Byte])).toByte
- case ShortType => (~(evalE.asInstanceOf[Short])).toShort
- case IntegerType => ~(evalE.asInstanceOf[Int])
- case LongType => ~(evalE.asInstanceOf[Long])
- case other => sys.error(s"Unsupported bitwise ~ operation on ${other}")
+ case ByteType => (~evalE.asInstanceOf[Byte]).toByte
+ case ShortType => (~evalE.asInstanceOf[Short]).toShort
+ case IntegerType => ~evalE.asInstanceOf[Int]
+ case LongType => ~evalE.asInstanceOf[Long]
+ case other => sys.error(s"Unsupported bitwise ~ operation on $other")
}
}
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvaluationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvaluationSuite.scala
index 25f5642488..cd2f67f448 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvaluationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvaluationSuite.scala
@@ -42,6 +42,21 @@ class ExpressionEvaluationSuite extends FunSuite {
checkEvaluation(Literal(1) + Literal(1), 2)
}
+ test("unary BitwiseNOT") {
+ checkEvaluation(BitwiseNot(1), -2)
+ assert(BitwiseNot(1).dataType === IntegerType)
+ assert(BitwiseNot(1).eval(EmptyRow).isInstanceOf[Int])
+ checkEvaluation(BitwiseNot(1.toLong), -2.toLong)
+ assert(BitwiseNot(1.toLong).dataType === LongType)
+ assert(BitwiseNot(1.toLong).eval(EmptyRow).isInstanceOf[Long])
+ checkEvaluation(BitwiseNot(1.toShort), -2.toShort)
+ assert(BitwiseNot(1.toShort).dataType === ShortType)
+ assert(BitwiseNot(1.toShort).eval(EmptyRow).isInstanceOf[Short])
+ checkEvaluation(BitwiseNot(1.toByte), -2.toByte)
+ assert(BitwiseNot(1.toByte).dataType === ByteType)
+ assert(BitwiseNot(1.toByte).eval(EmptyRow).isInstanceOf[Byte])
+ }
+
/**
* Checks for three-valued-logic. Based on:
* http://en.wikipedia.org/wiki/Null_(SQL)#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29