You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ma...@apache.org on 2014/12/30 21:21:05 UTC
spark git commit: [SPARK-4928][SQL] Fix: Operator '>, <, >=,
<=' with decimal between different precision report error
Repository: spark
Updated Branches:
refs/heads/master 2deac748b -> a75dd83b7
[SPARK-4928][SQL] Fix: Operator '>,<,>=,<=' with decimal between different precision report error
case operator with decimal between different precision, we need change them to unlimited
Author: guowei2 <gu...@asiainfo.com>
Closes #3767 from guowei2/SPARK-4928 and squashes the following commits:
c6a6e3e [guowei2] fix code style
3214e0a [guowei2] add test case
b4985a2 [guowei2] fix code style
27adf42 [guowei2] Fix: Operation '>,<,>=,<=' with Decimal report error
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/a75dd83b
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/a75dd83b
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/a75dd83b
Branch: refs/heads/master
Commit: a75dd83b72586695768c89ed32b240aa8f48f32c
Parents: 2deac74
Author: guowei2 <gu...@asiainfo.com>
Authored: Tue Dec 30 12:21:00 2014 -0800
Committer: Michael Armbrust <mi...@databricks.com>
Committed: Tue Dec 30 12:21:00 2014 -0800
----------------------------------------------------------------------
.../sql/catalyst/analysis/HiveTypeCoercion.scala | 16 ++++++++++++++++
.../catalyst/analysis/DecimalPrecisionSuite.scala | 17 +++++++++++++++++
2 files changed, 33 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/a75dd83b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/HiveTypeCoercion.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/HiveTypeCoercion.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/HiveTypeCoercion.scala
index e38114a..242f28f 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/HiveTypeCoercion.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/HiveTypeCoercion.scala
@@ -361,6 +361,22 @@ trait HiveTypeCoercion {
DecimalType(min(p1 - s1, p2 - s2) + max(s1, s2), max(s1, s2))
)
+ case LessThan(e1 @ DecimalType.Expression(p1, s1),
+ e2 @ DecimalType.Expression(p2, s2)) if p1 != p2 || s1 != s2 =>
+ LessThan(Cast(e1, DecimalType.Unlimited), Cast(e2, DecimalType.Unlimited))
+
+ case LessThanOrEqual(e1 @ DecimalType.Expression(p1, s1),
+ e2 @ DecimalType.Expression(p2, s2)) if p1 != p2 || s1 != s2 =>
+ LessThanOrEqual(Cast(e1, DecimalType.Unlimited), Cast(e2, DecimalType.Unlimited))
+
+ case GreaterThan(e1 @ DecimalType.Expression(p1, s1),
+ e2 @ DecimalType.Expression(p2, s2)) if p1 != p2 || s1 != s2 =>
+ GreaterThan(Cast(e1, DecimalType.Unlimited), Cast(e2, DecimalType.Unlimited))
+
+ case GreaterThanOrEqual(e1 @ DecimalType.Expression(p1, s1),
+ e2 @ DecimalType.Expression(p2, s2)) if p1 != p2 || s1 != s2 =>
+ GreaterThanOrEqual(Cast(e1, DecimalType.Unlimited), Cast(e2, DecimalType.Unlimited))
+
// Promote integers inside a binary expression with fixed-precision decimals to decimals,
// and fixed-precision decimals in an expression with floats / doubles to doubles
case b: BinaryExpression if b.left.dataType != b.right.dataType =>
http://git-wip-us.apache.org/repos/asf/spark/blob/a75dd83b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecisionSuite.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecisionSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecisionSuite.scala
index d5b7d27..3677a6e 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecisionSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/DecimalPrecisionSuite.scala
@@ -49,6 +49,15 @@ class DecimalPrecisionSuite extends FunSuite with BeforeAndAfter {
assert(analyzer(plan).schema.fields(0).dataType === expectedType)
}
+ private def checkComparison(expression: Expression, expectedType: DataType): Unit = {
+ val plan = Project(Alias(expression, "c")() :: Nil, relation)
+ val comparison = analyzer(plan).collect {
+ case Project(Alias(e: BinaryComparison, _) :: Nil, _) => e
+ }.head
+ assert(comparison.left.dataType === expectedType)
+ assert(comparison.right.dataType === expectedType)
+ }
+
test("basic operations") {
checkType(Add(d1, d2), DecimalType(6, 2))
checkType(Subtract(d1, d2), DecimalType(6, 2))
@@ -65,6 +74,14 @@ class DecimalPrecisionSuite extends FunSuite with BeforeAndAfter {
checkType(Add(Add(d1, d2), Add(d1, d2)), DecimalType(7, 2))
}
+ test("Comparison operations") {
+ checkComparison(LessThan(i, d1), DecimalType.Unlimited)
+ checkComparison(LessThanOrEqual(d1, d2), DecimalType.Unlimited)
+ checkComparison(GreaterThan(d2, u), DecimalType.Unlimited)
+ checkComparison(GreaterThanOrEqual(d1, f), DoubleType)
+ checkComparison(GreaterThan(d2, d2), DecimalType(5, 2))
+ }
+
test("bringing in primitive types") {
checkType(Add(d1, i), DecimalType(12, 1))
checkType(Add(d1, f), DoubleType)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org