aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorYin Huai <yhuai@databricks.com>2015-07-15 21:08:30 -0700
committerYin Huai <yhuai@databricks.com>2015-07-15 21:08:30 -0700
commit9c64a75bfc5e2566d1b4cd0d9b4585a818086ca6 (patch)
tree428e6fcfcc8559df009de72aa00b401b77b83972 /sql
parent73d92b00b9a6f5dfc2f8116447d17b381cd74f80 (diff)
downloadspark-9c64a75bfc5e2566d1b4cd0d9b4585a818086ca6.tar.gz
spark-9c64a75bfc5e2566d1b4cd0d9b4585a818086ca6.tar.bz2
spark-9c64a75bfc5e2566d1b4cd0d9b4585a818086ca6.zip
[SPARK-9060] [SQL] Revert SPARK-8359, SPARK-8800, and SPARK-8677
JIRA: https://issues.apache.org/jira/browse/SPARK-9060 This PR reverts: * https://github.com/apache/spark/commit/31bd30687bc29c0e457c37308d489ae2b6e5b72a (SPARK-8359) * https://github.com/apache/spark/commit/24fda7381171738cbbbacb5965393b660763e562 (SPARK-8677) * https://github.com/apache/spark/commit/4b5cfc988f23988c2334882a255d494fc93d252e (SPARK-8800) Author: Yin Huai <yhuai@databricks.com> Closes #7426 from yhuai/SPARK-9060 and squashes the following commits: 651264d [Yin Huai] Revert "[SPARK-8359] [SQL] Fix incorrect decimal precision after multiplication" cfda7e4 [Yin Huai] Revert "[SPARK-8677] [SQL] Fix non-terminating decimal expansion for decimal divide operation" 2de9afe [Yin Huai] Revert "[SPARK-8800] [SQL] Fix inaccurate precision/scale of Decimal division operation"
Diffstat (limited to 'sql')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala21
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/types/decimal/DecimalSuite.scala18
2 files changed, 2 insertions, 37 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
index f5bd068d60..a85af9e04a 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala
@@ -17,8 +17,6 @@
package org.apache.spark.sql.types
-import java.math.{MathContext, RoundingMode}
-
import org.apache.spark.annotation.DeveloperApi
/**
@@ -139,14 +137,6 @@ final class Decimal extends Ordered[Decimal] with Serializable {
def toBigDecimal: BigDecimal = {
if (decimalVal.ne(null)) {
- decimalVal(MathContext.UNLIMITED)
- } else {
- BigDecimal(longVal, _scale)(MathContext.UNLIMITED)
- }
- }
-
- def toLimitedBigDecimal: BigDecimal = {
- if (decimalVal.ne(null)) {
decimalVal
} else {
BigDecimal(longVal, _scale)
@@ -273,15 +263,8 @@ final class Decimal extends Ordered[Decimal] with Serializable {
def * (that: Decimal): Decimal = Decimal(toBigDecimal * that.toBigDecimal)
- def / (that: Decimal): Decimal = {
- if (that.isZero) {
- null
- } else {
- // To avoid non-terminating decimal expansion problem, we get scala's BigDecimal with limited
- // precision and scala.
- Decimal(toLimitedBigDecimal / that.toLimitedBigDecimal)
- }
- }
+ def / (that: Decimal): Decimal =
+ if (that.isZero) null else Decimal(toBigDecimal / that.toBigDecimal)
def % (that: Decimal): Decimal =
if (that.isZero) null else Decimal(toBigDecimal % that.toBigDecimal)
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/types/decimal/DecimalSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/types/decimal/DecimalSuite.scala
index f0c849d1a1..1d297beb38 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/types/decimal/DecimalSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/types/decimal/DecimalSuite.scala
@@ -171,22 +171,4 @@ class DecimalSuite extends SparkFunSuite with PrivateMethodTester {
assert(new Decimal().set(100L, 10, 0).toUnscaledLong === 100L)
assert(Decimal(Long.MaxValue, 100, 0).toUnscaledLong === Long.MaxValue)
}
-
- test("accurate precision after multiplication") {
- val decimal = (Decimal(Long.MaxValue, 38, 0) * Decimal(Long.MaxValue, 38, 0)).toJavaBigDecimal
- assert(decimal.unscaledValue.toString === "85070591730234615847396907784232501249")
- }
-
- test("fix non-terminating decimal expansion problem") {
- val decimal = Decimal(1.0, 10, 3) / Decimal(3.0, 10, 3)
- // The difference between decimal should not be more than 0.001.
- assert(decimal.toDouble - 0.333 < 0.001)
- }
-
- test("fix loss of precision/scale when doing division operation") {
- val a = Decimal(2) / Decimal(3)
- assert(a.toDouble < 1.0 && a.toDouble > 0.6)
- val b = Decimal(1) / Decimal(8)
- assert(b.toDouble === 0.125)
- }
}