Repository: spark
Updated Branches:
  refs/heads/branch-1.3 9278b7a6a -> cbf232daa


[SPARK-5456] [SQL] fix decimal compare for jdbc rdd

Author: Daoyuan Wang <[email protected]>

Closes #5803 from adrian-wang/decimalcompare and squashes the following commits:

aef0e96 [Daoyuan Wang] add null handle
ec455b9 [Daoyuan Wang] fix decimal compare for jdbc rdd

(cherry picked from commit 150f671c286c57deaf37ab1d8f837d68b5be82a0)
Signed-off-by: Reynold Xin <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/cbf232da
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/cbf232da
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/cbf232da

Branch: refs/heads/branch-1.3
Commit: cbf232daaf69a2ff782f492bd29701a18506a6e5
Parents: 9278b7a
Author: Daoyuan Wang <[email protected]>
Authored: Wed May 6 10:05:10 2015 -0700
Committer: Reynold Xin <[email protected]>
Committed: Wed May 6 10:05:28 2015 -0700

----------------------------------------------------------------------
 .../src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala   | 8 +++++++-
 .../src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala | 5 ++++-
 2 files changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/cbf232da/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala
----------------------------------------------------------------------
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala 
b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala
index 8c0c585..d58b686 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JDBCRDD.scala
@@ -358,7 +358,13 @@ private[sql] class JDBCRDD(
             case BooleanConversion    => mutableRow.setBoolean(i, 
rs.getBoolean(pos))
             case DateConversion       =>
               mutableRow.update(i, DateUtils.fromJavaDate(rs.getDate(pos)))
-            case DecimalConversion    => mutableRow.update(i, 
rs.getBigDecimal(pos))
+            case DecimalConversion    =>
+              val decimalVal = rs.getBigDecimal(pos)
+              if (decimalVal == null) {
+                mutableRow.update(i, null)
+              } else {
+                mutableRow.update(i, Decimal(decimalVal))
+              }
             case DoubleConversion     => mutableRow.setDouble(i, 
rs.getDouble(pos))
             case FloatConversion      => mutableRow.setFloat(i, 
rs.getFloat(pos))
             case IntegerConversion    => mutableRow.setInt(i, rs.getInt(pos))

http://git-wip-us.apache.org/repos/asf/spark/blob/cbf232da/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala
----------------------------------------------------------------------
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala 
b/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala
index 2cf2307..e8f7932 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala
@@ -269,8 +269,11 @@ class JDBCSuite extends FunSuite with BeforeAndAfter {
     assert(rows(0).getDouble(0) == 1.00000000000000022) // Yes, I meant ==.
     assert(rows(0).getDouble(1) == 1.00000011920928955) // Yes, I meant ==.
     assert(rows(0).getAs[BigDecimal](2)
-        .equals(new BigDecimal("123456789012345.54321543215432100000")))
+      .equals(new BigDecimal("123456789012345.54321543215432100000")))
     assert(rows(0).schema.fields(2).dataType === DecimalType(40, 20))
+    val compareDecimal = sql("SELECT C FROM flttypes where C > C - 
1").collect()
+    assert(compareDecimal(0).getAs[BigDecimal](0)
+      .equals(new BigDecimal("123456789012345.54321543215432100000")))
   }
 
   test("SQL query as table name") {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to