aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSandeep Singh <sandeep@techaddict.me>2016-05-21 06:39:47 -0500
committerSean Owen <sowen@cloudera.com>2016-05-21 06:39:47 -0500
commit666bf2e8357cb9a61eaa2270c414e635d9c331ce (patch)
tree5cfaa5bdaad639541bb301b3e102d27c60dfc913 /sql
parent45b7557e61d440612d4ce49c31b5ef242fdefa54 (diff)
downloadspark-666bf2e8357cb9a61eaa2270c414e635d9c331ce.tar.gz
spark-666bf2e8357cb9a61eaa2270c414e635d9c331ce.tar.bz2
spark-666bf2e8357cb9a61eaa2270c414e635d9c331ce.zip
[SPARK-15445][SQL] Build fails for java 1.7 after adding java.mathBigInteger support
## What changes were proposed in this pull request? Using longValue() and then checking whether the value is in the range for a long manually. ## How was this patch tested? Existing tests Author: Sandeep Singh <sandeep@techaddict.me> Closes #13223 from techaddict/SPARK-15445.
Diffstat (limited to 'sql')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/types/Decimal.scala24
1 files changed, 13 insertions, 11 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 b907f62802..31604bad0f 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,6 +17,7 @@
package org.apache.spark.sql.types
+import java.lang.{Long => JLong}
import java.math.{BigInteger, MathContext, RoundingMode}
import org.apache.spark.annotation.DeveloperApi
@@ -132,17 +133,15 @@ final class Decimal extends Ordered[Decimal] with Serializable {
* Set this Decimal to the given BigInteger value. Will have precision 38 and scale 0.
*/
def set(bigintval: BigInteger): Decimal = {
- try {
- this.decimalVal = null
- this.longVal = bigintval.longValueExact()
- this._precision = DecimalType.MAX_PRECISION
- this._scale = 0
- this
- }
- catch {
- case e: ArithmeticException =>
- throw new IllegalArgumentException(s"BigInteger ${bigintval} too large for decimal")
- }
+ // TODO: Remove this once we migrate to java8 and use longValueExact() instead.
+ require(
+ bigintval.compareTo(LONG_MAX_BIG_INT) <= 0 && bigintval.compareTo(LONG_MIN_BIG_INT) >= 0,
+ s"BigInteger $bigintval too large for decimal")
+ this.decimalVal = null
+ this.longVal = bigintval.longValue()
+ this._precision = DecimalType.MAX_PRECISION
+ this._scale = 0
+ this
}
/**
@@ -382,6 +381,9 @@ object Decimal {
private[sql] val ZERO = Decimal(0)
private[sql] val ONE = Decimal(1)
+ private val LONG_MAX_BIG_INT = BigInteger.valueOf(JLong.MAX_VALUE)
+ private val LONG_MIN_BIG_INT = BigInteger.valueOf(JLong.MIN_VALUE)
+
def apply(value: Double): Decimal = new Decimal().set(value)
def apply(value: Long): Decimal = new Decimal().set(value)