[ 
https://issues.apache.org/jira/browse/HIVE-2693?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13552877#comment-13552877
 ] 

Mark Grover commented on HIVE-2693:
-----------------------------------

Gunther: I took a look at patch 23 and it looks good to me! Good catch on 
stripTrailingZeros(), BTW!

[~namit], [~cwsteinbach], [~ashutoshc] Thanks for reviewing the change. It 
seems like you all were pretty happy with patch21 but it seemed to have a bug 
in round UDF that we noticed while reviewing Namit's review comments. That bug 
has now been fixed in patch 23. Would one of you please take a final look at 
the patch and commit it if there are no concerns?

FWIW, here is the diff between patch21 and patch23:
It basically doesn't set the original scale on the return value of round UDF 
and has a workaround for the stripTrailingZeros() bug in BigDecimal. Apart from 
that it's just updates to the test results.

{code}
diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java 
ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
index af8186a..1c807ef 100644
--- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
+++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
@@ -72,8 +72,7 @@ private BigDecimalWritable evaluate(BigDecimalWritable n, int 
i) {
       return null;
     }
     BigDecimal bd = n.getBigDecimal();
-    int origScale = bd.scale();
-    bd = n.getBigDecimal().setScale(i, 
RoundingMode.HALF_UP).setScale(origScale);
+    bd = n.getBigDecimal().setScale(i, RoundingMode.HALF_UP);
     bigDecimalWritable.set(bd);
     return bigDecimalWritable;
   }
diff --git ql/src/test/results/clientpositive/decimal_3.q.out 
ql/src/test/results/clientpositive/decimal_3.q.out
index ad6190a..30e6d92 100644
--- ql/src/test/results/clientpositive/decimal_3.q.out
+++ ql/src/test/results/clientpositive/decimal_3.q.out
@@ -219,7 +219,7 @@ POSTHOOK: Input: default@decimal_3
 -0.333
 -0.33
 -0.3
-0.00
+0
 1E-99
 0.01
 0.02
@@ -258,7 +258,7 @@ POSTHOOK: Input: default@decimal_3
 -0.333 0
 -0.33  0
 -0.3   0
-0.00   0
+0      0
 1E-99  0
 0.01   0
 0.02   0
diff --git ql/src/test/results/clientpositive/decimal_udf.q.out 
ql/src/test/results/clientpositive/decimal_udf.q.out
index be05146..e55ad9d 100644
--- ql/src/test/results/clientpositive/decimal_udf.q.out
+++ ql/src/test/results/clientpositive/decimal_udf.q.out
@@ -145,7 +145,7 @@ POSTHOOK: query: SELECT key + value FROM DECIMAL_UDF
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
-0E+2
+0
 1E+99
 1E-99
 0
@@ -229,7 +229,7 @@ POSTHOOK: Input: default@decimal_udf
 -2.2E+3
 1E+99
 1E-99
-0.0
+0
 1.5E+2
 15
 1.5
@@ -238,7 +238,7 @@ POSTHOOK: Input: default@decimal_udf
 3E+2
 3E+1
 3
-0.0
+0
 0.2
 0.02
 0.3
@@ -390,44 +390,44 @@ POSTHOOK: query: SELECT key - key FROM DECIMAL_UDF
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
-0E+2
-0E+99
-0E-99
-0
-0E+2
-0E+1
-0
-0.0
-0.00
-0E+2
-0E+1
-0
-0
-0.0
-0.00
-0.0
-0.00
-0.000
-0.0
-0.00
-0.000
-0
-0
-0.00
-0.00
-0.00
-0.000
-0.00
-0.000
-0
-0.0
-0.00
-0.00
-0.00
-0.00
-0E-25
-0E-9
-0E-8
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
 PREHOOK: query: EXPLAIN SELECT key - value FROM DECIMAL_UDF
 PREHOOK: type: QUERY
 POSTHOOK: query: EXPLAIN SELECT key - value FROM DECIMAL_UDF
@@ -475,13 +475,13 @@ POSTHOOK: Input: default@decimal_udf
 1E+99
 1E-99
 0
-0E+2
-0E+1
+0
+0
 0
 0.1
 0.01
-0E+2
-0E+1
+0
+0
 0
 0
 0.2
@@ -555,7 +555,7 @@ POSTHOOK: Input: default@decimal_udf
 -6.6E+3
 1E+99
 1E-99
-0.0
+0
 5E+1
 5
 0.5
@@ -564,7 +564,7 @@ POSTHOOK: Input: default@decimal_udf
 1E+2
 1E+1
 1
-0.0
+0
 0.2
 0.02
 0.3
@@ -798,26 +798,26 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
 -1.936E+7
-0E+99
-0E-99
+0
+0
 0
 1E+4
 1E+2
 1
-0.0
-0.00
+0
+0
 4E+4
 4E+2
 4
 0
-0.0
-0.00
-0.0
-0.00
-0.000
-0.0
-0.00
-0.000
+0
+0
+0
+0
+0
+0
+0
+0
 1
 4
 9.42
@@ -879,26 +879,26 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
 -9.68E+6
-0E+98
-0E-100
-0.0
+0
+0
+0
 5E+3
 5E+1
 0.5
-0.00
-0.000
+0
+0
 2E+4
 2E+2
 2
-0.0
-0.00
-0.000
-0.00
-0.000
-0.0000
-0.00
-0.000
-0.0000
+0
+0
+0
+0
+0
+0
+0
+0
+0
 0.5
 2
 4.71
@@ -1359,8 +1359,8 @@ POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
 -2.2E+3
 5E+98
-0E-65
-0E-65
+0
+0
 5E+1
 5
 0.5
@@ -1369,7 +1369,7 @@ POSTHOOK: Input: default@decimal_udf
 1E+2
 1E+1
 1
-0E-65
+0
 0.1
 0.01
 0.15
@@ -1707,9 +1707,9 @@ POSTHOOK: Input: default@decimal_udf
 1
 1
 1
-0.0
-0.00
-0.000
+0
+0
+0
 1
 2
 4
@@ -1774,22 +1774,22 @@ POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
 -4.4E+3
 1E+99
-0E-99
+0
 0
 1E+2
 1E+1
 1
-0.0
-0.00
+0
+0
 2E+2
 2E+1
 2
 0
-0.0
-0.00
-0.0
-0.00
-0.000
+0
+0
+0
+0
+0
 -1
 -1
 -1
@@ -1807,7 +1807,7 @@ POSTHOOK: Input: default@decimal_udf
 3
 3
 3
-0E-25
+0
 -1234567891
 1.23456789E+9
 PREHOOK: query: -- round
@@ -1857,7 +1857,7 @@ POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
 -4.4E+3
 1E+99
-0E-99
+0
 0
 1E+2
 1E+1
@@ -2027,22 +2027,22 @@ NULL
 NULL
 1
 1
-0.0
-0.00
-0.000
+0
+0
+0
 1
 1
 0
 NULL
-0.0
-0.00
+0
+0
 0.1
 0.01
 0.001
 0.1
 0.01
 0.001
-0.0
+0
 0
 1
 -0.12
diff --git 
serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java 
serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
index 1d0a31b..db009c4 100644
--- serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
+++ serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
@@ -57,6 +57,10 @@ public BigDecimalWritable(BigDecimal value) {
 
   public void set(BigDecimal value) {
     value = value.stripTrailingZeros();
+    if (value.compareTo(BigDecimal.ZERO) == 0) {
+      // Special case for 0, because java doesn't strip zeros correctly on 
that number.
+      value = BigDecimal.ZERO;
+    }
     set(value.unscaledValue().toByteArray(), value.scale());
   }
{code}
                
> Add DECIMAL data type
> ---------------------
>
>                 Key: HIVE-2693
>                 URL: https://issues.apache.org/jira/browse/HIVE-2693
>             Project: Hive
>          Issue Type: New Feature
>          Components: Query Processor, Types
>    Affects Versions: 0.10.0
>            Reporter: Carl Steinbach
>            Assignee: Prasad Mujumdar
>         Attachments: 2693_7.patch, 2693_8.patch, 2693_fix_all_tests1.patch, 
> HIVE-2693-10.patch, HIVE-2693-11.patch, HIVE-2693-12-SortableSerDe.patch, 
> HIVE-2693-13.patch, HIVE-2693-14.patch, HIVE-2693-15.patch, 
> HIVE-2693-16.patch, HIVE-2693-17.patch, HIVE-2693-18.patch, 
> HIVE-2693-19.patch, HIVE-2693-1.patch.txt, HIVE-2693-20.patch, 
> HIVE-2693-21.patch, HIVE-2693-22.patch, HIVE-2693-23.patch, 
> HIVE-2693-all.patch, HIVE-2693.D7683.1.patch, HIVE-2693-fix.patch, 
> HIVE-2693.patch, HIVE-2693-take3.patch, HIVE-2693-take4.patch
>
>
> Add support for the DECIMAL data type. HIVE-2272 (TIMESTAMP) provides a nice 
> template for how to do this.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to