Index: ql/src/test/results/clientpositive/udf_round.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_round.q.out (revision 1032795) +++ ql/src/test/results/clientpositive/udf_round.q.out (working copy) @@ -11,17 +11,19 @@ Example: > SELECT round(12.3456, 1) FROM src LIMIT 1; 12.3' -PREHOOK: query: SELECT round(null), round(null, 0), round(125, null) +PREHOOK: query: SELECT round(null), round(null, 0), round(125, null), +round(1.0/0.0, 0), round(power(-1.0,0.5), 0) FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/1736987523/10000 -POSTHOOK: query: SELECT round(null), round(null, 0), round(125, null) +PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-14_993_3357575211936904005/-mr-10000 +POSTHOOK: query: SELECT round(null), round(null, 0), round(125, null), +round(1.0/0.0, 0), round(power(-1.0,0.5), 0) FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/1736987523/10000 -NULL NULL NULL +POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-14_993_3357575211936904005/-mr-10000 +NULL NULL NULL Infinity NaN PREHOOK: query: 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), @@ -29,7 +31,7 @@ FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/1549949974/10000 +PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-20_970_7160483052515911946/-mr-10000 POSTHOOK: query: 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), @@ -37,7 +39,7 @@ FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/1549949974/10000 +POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-20_970_7160483052515911946/-mr-10000 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 PREHOOK: query: SELECT round(125.315), round(125.315, 0), @@ -49,7 +51,7 @@ FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/148858111/10000 +PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-27_179_2911785663452385939/-mr-10000 POSTHOOK: query: SELECT round(125.315), round(125.315, 0), round(125.315, 1), round(125.315, 2), round(125.315, 3), round(125.315, 4), @@ -60,7 +62,7 @@ FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/148858111/10000 +POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-27_179_2911785663452385939/-mr-10000 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 PREHOOK: query: SELECT round(3.141592653589793, -15), round(3.141592653589793, -16), @@ -83,7 +85,7 @@ FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/624837434/10000 +PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-33_545_5250297469148450676/-mr-10000 POSTHOOK: query: SELECT round(3.141592653589793, -15), round(3.141592653589793, -16), round(3.141592653589793, -13), round(3.141592653589793, -14), @@ -105,16 +107,16 @@ FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/624837434/10000 +POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-33_545_5250297469148450676/-mr-10000 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 PREHOOK: query: SELECT round(1809242.3151111344, 9), round(-1809242.3151111344, 9) FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/599098185/10000 +PREHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-39_684_1531195398096756494/-mr-10000 POSTHOOK: query: SELECT round(1809242.3151111344, 9), round(-1809242.3151111344, 9) FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/Users/carl/Projects/hd9/hive-trunk/build/ql/tmp/599098185/10000 +POSTHOOK: Output: file:/var/folders/7P/7PeC14kXFIWq0PIYyexGbmKuXUk/-Tmp-/jsichi/hive_2010-11-08_16-56-39_684_1531195398096756494/-mr-10000 1809242.315111134 -1809242.315111134 Index: ql/src/test/queries/clientpositive/udf_round.q =================================================================== --- ql/src/test/queries/clientpositive/udf_round.q (revision 1032795) +++ ql/src/test/queries/clientpositive/udf_round.q (working copy) @@ -1,7 +1,8 @@ DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round; -SELECT round(null), round(null, 0), round(125, null) +SELECT round(null), round(null, 0), round(125, null), +round(1.0/0.0, 0), round(power(-1.0,0.5), 0) FROM src LIMIT 1; SELECT Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java (revision 1032795) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java (working copy) @@ -55,8 +55,13 @@ if ((n == null) || (i == null)) { return null; } - doubleWritable.set(BigDecimal.valueOf(n.get()).setScale(i.get(), - RoundingMode.HALF_UP).doubleValue()); + double d = n.get(); + if (Double.isNaN(d) || Double.isInfinite(d)) { + doubleWritable.set(d); + } else { + doubleWritable.set(BigDecimal.valueOf(d).setScale(i.get(), + RoundingMode.HALF_UP).doubleValue()); + } return doubleWritable; }