You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ja...@apache.org on 2014/06/20 22:24:57 UTC

[21/32] git commit: DRILL-1016: Propagate negative sign while casting from decimal18 to decimal38

DRILL-1016: Propagate negative sign while casting from decimal18 to decimal38


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

Branch: refs/heads/master
Commit: da618239d7f1347706e0e183ed0547e6e257762f
Parents: 43bb57e
Author: Mehant Baid <me...@gmail.com>
Authored: Wed Jun 18 22:16:36 2014 -0700
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Fri Jun 20 10:56:15 2014 -0700

----------------------------------------------------------------------
 .../codegen/templates/Decimal/CastSrcDecimalSimple.java  |  3 ++-
 .../org/apache/drill/jdbc/test/TestFunctionsQuery.java   | 11 +++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/da618239/exec/java-exec/src/main/codegen/templates/Decimal/CastSrcDecimalSimple.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/Decimal/CastSrcDecimalSimple.java b/exec/java-exec/src/main/codegen/templates/Decimal/CastSrcDecimalSimple.java
index 7ef806f..aac45e0 100644
--- a/exec/java-exec/src/main/codegen/templates/Decimal/CastSrcDecimalSimple.java
+++ b/exec/java-exec/src/main/codegen/templates/Decimal/CastSrcDecimalSimple.java
@@ -169,7 +169,6 @@ public class Cast${type.from}${type.to} implements DrillSimpleFunc{
 
         out.buffer = buffer;
         out.start = 0;
-        out.setSign((in.value < 0));
 
         /* Since we will be dividing the decimal value with base 1 billion
          * we don't want negative results if the decimal is negative.
@@ -213,6 +212,8 @@ public class Cast${type.from}${type.to} implements DrillSimpleFunc{
         if (in.scale != out.scale) {
           org.apache.drill.common.util.DecimalUtility.roundDecimal(out.buffer, out.start, out.nDecimalDigits, out.scale, in.scale);
         }
+        // Set the sign
+        out.setSign((in.value < 0));
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/da618239/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
----------------------------------------------------------------------
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
index 39919a5..64bdf6d 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
@@ -559,4 +559,15 @@ public class TestFunctionsQuery {
         .sql(query)
         .returns("col1=2003-07-09; col2=2003-07-09; col3=2003-07-09");
   }
+
+  @Test
+  public void testDecimal18Decimal38Comparison() throws Exception {
+    String query = "select cast('999999999.999999999' as decimal(18, 9)) = cast('999999999.999999999' as decimal(38, 18)) as CMP " +
+        "from cp.`employee.json` where employee_id = 1";
+
+    JdbcAssert.withNoDefaultSchema()
+        .sql(query)
+        .returns(
+            "CMP=true\n");
+  }
 }