You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2008/12/31 01:46:56 UTC

svn commit: r730279 - in /hadoop/hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/udf/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/

Author: zshao
Date: Tue Dec 30 16:46:56 2008
New Revision: 730279

URL: http://svn.apache.org/viewvc?rev=730279&view=rev
Log:
HIVE-194. Support specifying decimal places for ROUND function.(David Phillips via zshao)

Added:
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_round.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out
Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
    hadoop/hive/trunk/ql/src/test/results/clientpositive/udf4.q.out

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=730279&r1=730278&r2=730279&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Tue Dec 30 16:46:56 2008
@@ -29,6 +29,9 @@
 
   IMPROVEMENTS
 
+    HIVE-194. Support specifying decimal places for ROUND function.
+    (David Phillips via zshao)
+
     HIVE-177. Allow specifying custom input and output format in CREATE TABLE.
     (David Phillips via zshao)
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java?rev=730279&r1=730278&r2=730279&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java Tue Dec 30 16:46:56 2008
@@ -18,24 +18,27 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
 import org.apache.hadoop.hive.ql.exec.UDF;
 
 
 public class UDFRound implements UDF {
 
-  private static Log LOG = LogFactory.getLog(UDFRound.class.getName());
-
   public UDFRound() {
   }
 
-  public Long evaluate(Double i)  {
-    if (i == null) {
+  public Long evaluate(Double n) {
+    if (n == null)
+      return null;
+    return evaluate(n, 0).longValue();
+  }
+
+  public Double evaluate(Double n, Integer i) {
+    if ((n == null) || (i == null))
       return null;
-    } else {
-      return Long.valueOf(Math.round(i));
-    }
+    return BigDecimal.valueOf(n).setScale(i, RoundingMode.HALF_UP).doubleValue();
   }
   
 }

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_round.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_round.q?rev=730279&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_round.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_round.q Tue Dec 30 16:46:56 2008
@@ -0,0 +1,40 @@
+SELECT round(null), round(null, 0), round(125, null)
+FROM src LIMIT 1;
+
+SELECT
+  round(55555), round(55555, 0), round(55555, 1), round(55555, 2), round(55555, 3),
+  round(55555, -1), round(55555, -2), round(55555, -3), round(55555, -4),
+  round(55555, -5), round(55555, -6), round(55555, -7), round(55555, -8)
+FROM src LIMIT 1;
+
+SELECT
+  round(125.315), round(125.315, 0),
+  round(125.315, 1), round(125.315, 2), round(125.315, 3), round(125.315, 4),
+  round(125.315, -1), round(125.315, -2), round(125.315, -3), round(125.315, -4),
+  round(-125.315), round(-125.315, 0),
+  round(-125.315, 1), round(-125.315, 2), round(-125.315, 3), round(-125.315, 4),
+  round(-125.315, -1), round(-125.315, -2), round(-125.315, -3), round(-125.315, -4)
+FROM src LIMIT 1;
+
+SELECT
+  round(3.141592653589793, -15), round(3.141592653589793, -16),
+  round(3.141592653589793, -13), round(3.141592653589793, -14),
+  round(3.141592653589793, -11), round(3.141592653589793, -12),
+  round(3.141592653589793, -9), round(3.141592653589793, -10),
+  round(3.141592653589793, -7), round(3.141592653589793, -8),
+  round(3.141592653589793, -5), round(3.141592653589793, -6),
+  round(3.141592653589793, -3), round(3.141592653589793, -4),
+  round(3.141592653589793, -1), round(3.141592653589793, -2),
+  round(3.141592653589793, 0), round(3.141592653589793, 1),
+  round(3.141592653589793, 2), round(3.141592653589793, 3),
+  round(3.141592653589793, 4), round(3.141592653589793, 5),
+  round(3.141592653589793, 6), round(3.141592653589793, 7),
+  round(3.141592653589793, 8), round(3.141592653589793, 9),
+  round(3.141592653589793, 10), round(3.141592653589793, 11),
+  round(3.141592653589793, 12), round(3.141592653589793, 13),
+  round(3.141592653589793, 13), round(3.141592653589793, 14),
+  round(3.141592653589793, 15), round(3.141592653589793, 16)
+FROM src LIMIT 1;
+
+SELECT round(1809242.3151111344, 9), round(-1809242.3151111344, 9)
+FROM src LIMIT 1;

Modified: hadoop/hive/trunk/ql/src/test/results/clientpositive/udf4.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/udf4.q.out?rev=730279&r1=730278&r2=730279&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/udf4.q.out (original)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/udf4.q.out Tue Dec 30 16:46:56 2008
@@ -56,4 +56,4 @@
       limit: -1
 
 
-1	2	-1	1	1	-2	1	2	-1	1	0.731057369148862	3	-3	3	-1	-2
+1	2	-2	1	1	-2	1	2	-1	1	0.731057369148862	3	-3	3	-1	-2

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out?rev=730279&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out Tue Dec 30 16:46:56 2008
@@ -0,0 +1,5 @@
+NULL	NULL	NULL
+55555	55555.0	55555.0	55555.0	55555.0	55560.0	55600.0	56000.0	60000.0	100000.0	0.0	0.0	0.0
+125	125.0	125.3	125.32	125.315	125.315	130.0	100.0	0.0	0.0	-125	-125.0	-125.3	-125.32	-125.315	-125.315	-130.0	-100.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	3.0	3.1	3.14	3.142	3.1416	3.14159	3.141593	3.1415927	3.14159265	3.141592654	3.1415926536	3.14159265359	3.14159265359	3.1415926535898	3.1415926535898	3.14159265358979	3.141592653589793	3.141592653589793
+1809242.315111134	-1809242.315111134