You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/04/10 02:38:54 UTC

svn commit: r1466305 [1/3] - in /hive/trunk: common/src/java/org/apache/hadoop/hive/common/type/ data/files/ jdbc/src/java/org/apache/hadoop/hive/jdbc/ ql/src/java/org/apache/hadoop/hive/ql/udf/ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/ ql/src...

Author: hashutosh
Date: Wed Apr 10 00:38:52 2013
New Revision: 1466305

URL: http://svn.apache.org/r1466305
Log:
HIVE-4271 : Limit precision of decimal type (Gunther Hagleitner via Ashutosh Chauhan)

Added:
    hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/
    hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/HiveDecimal.java
    hive/trunk/data/files/kv8.txt
    hive/trunk/ql/src/test/queries/clientpositive/decimal_precision.q
    hive/trunk/ql/src/test/results/clientpositive/decimal_precision.q.out
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveDecimalWritable.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyHiveDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryHiveDecimal.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/HiveDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableHiveDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableHiveDecimalObjectInspector.java
Removed:
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBigDecimal.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyBigDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryBigDecimal.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/BigDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaBigDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableBigDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableBigDecimalObjectInspector.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBigDecimalObjectInspector.java
Modified:
    hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveBaseResultSet.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFAbs.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericOp.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPNegative.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPlus.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPositive.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPosMod.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPower.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect2.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToDecimal.java
    hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java
    hive/trunk/ql/src/test/results/clientpositive/decimal_3.q.out
    hive/trunk/ql/src/test/results/clientpositive/decimal_serde.q.out
    hive/trunk/ql/src/test/results/clientpositive/decimal_udf.q.out
    hive/trunk/ql/src/test/results/clientpositive/literal_decimal.q.out
    hive/trunk/ql/src/test/results/clientpositive/serde_regex.q.out
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/BinarySortableSerDe.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFactory.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyPrimitiveObjectInspectorFactory.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryFactory.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinarySerDe.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestStatsSerde.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassBigger.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassSmaller.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinarySerDe.java
    hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorConverters.java
    hive/trunk/service/src/java/org/apache/hive/service/cli/ColumnValue.java

Added: hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/HiveDecimal.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/HiveDecimal.java?rev=1466305&view=auto
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/HiveDecimal.java (added)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/common/type/HiveDecimal.java Wed Apr 10 00:38:52 2013
@@ -0,0 +1,221 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.common.type;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ *
+ * HiveDecimal. Simple wrapper for BigDecimal. Adds fixed max precision and non scientific string
+ * representation
+ *
+ */
+public class HiveDecimal implements Comparable<HiveDecimal> {
+
+  public static final HiveDecimal ZERO = new HiveDecimal(BigDecimal.ZERO);
+
+  public static final int MAX_PRECISION = 36; // multiple of 9 for compact representation
+
+  public static final HiveDecimal ONE = new HiveDecimal(BigDecimal.ONE);
+
+  public static final int ROUND_FLOOR = BigDecimal.ROUND_FLOOR;
+
+  public static final int ROUND_CEILING = BigDecimal.ROUND_CEILING;
+
+  public static final int ROUND_HALF_UP = BigDecimal.ROUND_HALF_UP;
+
+  private BigDecimal bd = BigDecimal.ZERO;
+
+  public HiveDecimal(BigDecimal b) {
+    this(b, false);
+  }
+
+  public HiveDecimal(BigDecimal b, boolean allowRounding) {
+    bd = this.normalize(b, MAX_PRECISION, allowRounding);
+    if (bd == null) {
+      throw new NumberFormatException("Assignment would result in truncation");
+    }
+  }
+
+  public HiveDecimal(BigInteger unscaled, int scale) {
+    bd = this.normalize(new BigDecimal(unscaled, scale), MAX_PRECISION, false);
+    if (bd == null) {
+      throw new NumberFormatException("Assignment would result in truncation");
+    }
+  }
+
+  public HiveDecimal(String dec) {
+    bd = this.normalize(new BigDecimal(dec), MAX_PRECISION, false);
+    if (bd == null) {
+      throw new NumberFormatException("Assignment would result in truncation");
+    }
+  }
+
+  public HiveDecimal(BigInteger bi) {
+    bd = this.normalize(new BigDecimal(bi), MAX_PRECISION, false);
+    if (bd == null) {
+      throw new NumberFormatException("Assignment would result in truncation");
+    }
+  }
+
+  public HiveDecimal(int i) {
+    bd = new BigDecimal(i);
+  }
+
+  public HiveDecimal(long l) {
+    bd = new BigDecimal(l);
+  }
+
+  @Override
+  public String toString() {
+     return bd.toPlainString();
+  }
+
+  public HiveDecimal setScale(int i) {
+    return new HiveDecimal(bd.setScale(i));
+  }
+
+  @Override
+  public int compareTo(HiveDecimal dec) {
+    return bd.compareTo(dec.bd);
+  }
+
+  public int scale() {
+    return bd.scale();
+  }
+
+  public int precision() {
+    return bd.precision();
+  }
+
+  public int intValue() {
+    return bd.intValue();
+  }
+
+  public double doubleValue() {
+    return bd.doubleValue();
+  }
+
+  public long longValue() {
+    return bd.longValue();
+  }
+
+  public short shortValue() {
+    return bd.shortValue();
+  }
+
+  public float floatValue() {
+    return bd.floatValue();
+  }
+
+  public BigDecimal bigDecimalValue() {
+    return bd;
+  }
+
+  public byte byteValue() {
+    return bd.byteValue();
+  }
+
+  public HiveDecimal setScale(int adjustedScale, int rm) {
+    return new HiveDecimal(bd.setScale(adjustedScale, rm));
+  }
+
+  public HiveDecimal subtract(HiveDecimal dec) {
+    return new HiveDecimal(bd.subtract(dec.bd));
+  }
+
+  public HiveDecimal multiply(HiveDecimal dec) {
+    return new HiveDecimal(bd.multiply(dec.bd));
+  }
+
+  public BigInteger unscaledValue() {
+    return bd.unscaledValue();
+  }
+
+  public HiveDecimal scaleByPowerOfTen(int n) {
+    return new HiveDecimal(bd.scaleByPowerOfTen(n));
+  }
+
+  public HiveDecimal abs() {
+    return new HiveDecimal(bd.abs());
+  }
+
+  public HiveDecimal negate() {
+    return new HiveDecimal(bd.negate());
+  }
+
+  public HiveDecimal add(HiveDecimal dec) {
+    return new HiveDecimal(bd.add(dec.bd));
+  }
+
+  public HiveDecimal pow(int n) {
+    return new HiveDecimal(bd.pow(n));
+  }
+
+  public HiveDecimal remainder(HiveDecimal dec) {
+    return new HiveDecimal(bd.remainder(dec.bd));
+  }
+
+  public HiveDecimal divide(HiveDecimal dec) {
+    return new HiveDecimal(bd.divide(dec.bd, MAX_PRECISION, RoundingMode.HALF_UP), true);
+  }
+
+  private BigDecimal trim(BigDecimal d) {
+    if (d.compareTo(BigDecimal.ZERO) == 0) {
+      // Special case for 0, because java doesn't strip zeros correctly on that number.
+      d = BigDecimal.ZERO;
+    } else {
+      d = d.stripTrailingZeros();
+      if (d.scale() < 0) {
+        // no negative scale decimals
+        d = d.setScale(0);
+      }
+    }
+    return d;
+  }
+
+  private BigDecimal normalize(BigDecimal d, int precision, boolean allowRounding) {
+    if (d == null) {
+      return null;
+    }
+
+    d = trim(d);
+
+    // compute the number of digits of the decimal
+    int valuePrecision = d.precision()
+        + Math.max(0, 1 + d.scale() - d.precision());
+
+    if (valuePrecision > precision) {
+      if (allowRounding) {
+        // round "half up" until we hit the decimal point
+        int adjustedScale = d.scale() - (valuePrecision-precision);
+        if (adjustedScale >= 0) {
+          d = d.setScale(adjustedScale, RoundingMode.HALF_UP);
+          d = trim(d);
+        } else {
+          d = null;
+        }
+      } else {
+        d = null;
+      }
+    }
+    return d;
+  }
+}

Added: hive/trunk/data/files/kv8.txt
URL: http://svn.apache.org/viewvc/hive/trunk/data/files/kv8.txt?rev=1466305&view=auto
==============================================================================
--- hive/trunk/data/files/kv8.txt (added)
+++ hive/trunk/data/files/kv8.txt Wed Apr 10 00:38:52 2013
@@ -0,0 +1,73 @@
+1234567890123456789012345678901234567
+1.234567890123456789012345678901234567
+12.34567890123456789012345678901234567
+123.4567890123456789012345678901234567
+1234.567890123456789012345678901234567
+123456789012345678901234567890123456
+0.12345678901234567890123456789012345
+1.23456789012345678901234567890123456
+12.3456789012345678901234567890123456
+123.456789012345678901234567890123456
+1234.56789012345678901234567890123456
+12345.6789012345678901234567890123456
+123456.789012345678901234567890123456
+1234567.89012345678901234567890123456
+12345678.9012345678901234567890123456
+123456789.012345678901234567890123456
+1234567890.12345678901234567890123456
+12345678901.2345678901234567890123456
+123456789012.345678901234567890123456
+1234567890123.45678901234567890123456
+12345678901234.5678901234567890123456
+123456789012345.678901234567890123456
+1234567890123456.78901234567890123456
+12345678901234567.8901234567890123456
+123456789012345678.901234567890123456
+1234567890123456789.01234567890123456
+12345678901234567890.1234567890123456
+123456789012345678901.234567890123456
+1234567890123456789012.34567890123456
+12345678901234567890123.4567890123456
+123456789012345678901234.567890123456
+1234567890123456789012345.67890123456
+12345678901234567890123456.7890123456
+123456789012345678901234567.890123456
+1234567890123456789012345678.90123456
+12345678901234567890123456789.0123456
+123456789012345678901234567890.123456
+1234567890123456789012345678901.23456
+12345678901234567890123456789012.3456
+123456789012345678901234567890123.456
+1234567890123456789012345678901234.56
+12345678901234567890123456789012345.6
+123456789012345678901234567890123456.0
+123456789012345678901234567890123456.00
+123456789012345678901234567890123456.000
+000123456789012345678901234567890123456.000
+999999999999999999999999999999999999
+9999999999999999999999999999999999
+999999999999999999999999999999999
+-999999999999999999999999999999999999
+-9999999999999999999999999999999999
+-999999999999999999999999999999999
+0000000000000000000000000000000000000000000
+0.00000000000000000000000000000000001
+-0.00000000000000000000000000000000001
+0.000000000000000000000000000000000001
+-0.000000000000000000000000000000000001
+0.123456789012345
+1.234567890123456
+12.34567890123456
+123.4567890123456
+1234.567890123456
+12345.67890123456
+123456.7890123456
+1234567.890123456
+12345678.90123456
+123456789.0123456
+1234567890.123456
+12345678901.23456
+123456789012.3456
+1234567890123.456
+12345678901234.56
+123456789012345.6

Modified: hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveBaseResultSet.java
URL: http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveBaseResultSet.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveBaseResultSet.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveBaseResultSet.java Wed Apr 10 00:38:52 2013
@@ -42,6 +42,8 @@ import java.util.Calendar;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.hadoop.hive.common.type.HiveDecimal;
+
 /**
  * Data independed base class which implements the common part of
  * all hive resultsets.
@@ -110,8 +112,11 @@ public abstract class HiveBaseResultSet 
     if (obj instanceof BigDecimal) {
       return ((BigDecimal) obj);
     }
-    throw new SQLException("Cannot convert column " + columnIndex 
-                           + " to BigDecimal. Found data of type: " 
+    if (obj instanceof HiveDecimal) {
+      return ((HiveDecimal) obj).bigDecimalValue();
+    }
+    throw new SQLException("Cannot convert column " + columnIndex
+                           + " to BigDecimal. Found data of type: "
                            + obj.getClass()+", value: " + obj.toString());
   }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFAbs.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFAbs.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFAbs.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFAbs.java Wed Apr 10 00:38:52 2013
@@ -20,7 +20,7 @@ package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.LongWritable;
@@ -39,7 +39,7 @@ public class UDFAbs extends UDF {
   private final DoubleWritable resultDouble = new DoubleWritable();
   private final LongWritable resultLong = new LongWritable();
   private final IntWritable resultInt = new IntWritable();
-  private final BigDecimalWritable resultBigDecimal = new BigDecimalWritable();
+  private final HiveDecimalWritable resultHiveDecimal = new HiveDecimalWritable();
 
   public DoubleWritable evaluate(DoubleWritable n) {
     if (n == null) {
@@ -71,12 +71,12 @@ public class UDFAbs extends UDF {
     return resultInt;
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable n) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable n) {
     if (n == null) {
       return null;
     }
 
-    resultBigDecimal.set(n.getBigDecimal().abs());
-    return resultBigDecimal;
+    resultHiveDecimal.set(n.getHiveDecimal().abs());
+    return resultHiveDecimal;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericOp.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericOp.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericOp.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericOp.java Wed Apr 10 00:38:52 2013
@@ -20,7 +20,7 @@ package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.NumericOpMethodResolver;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -49,7 +49,7 @@ public abstract class UDFBaseNumericOp e
   protected LongWritable longWritable = new LongWritable();
   protected FloatWritable floatWritable = new FloatWritable();
   protected DoubleWritable doubleWritable = new DoubleWritable();
-  protected BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
+  protected HiveDecimalWritable decimalWritable = new HiveDecimalWritable();
 
   public abstract ByteWritable evaluate(ByteWritable a, ByteWritable b);
 
@@ -63,5 +63,5 @@ public abstract class UDFBaseNumericOp e
 
   public abstract DoubleWritable evaluate(DoubleWritable a, DoubleWritable b);
 
-  public abstract BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b);
+  public abstract HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b);
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -46,7 +46,7 @@ public abstract class UDFBaseNumericUnar
   protected LongWritable longWritable = new LongWritable();
   protected FloatWritable floatWritable = new FloatWritable();
   protected DoubleWritable doubleWritable = new DoubleWritable();
-  protected BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
+  protected HiveDecimalWritable decimalWritable = new HiveDecimalWritable();
 
   public abstract ByteWritable evaluate(ByteWritable a);
 
@@ -60,5 +60,5 @@ public abstract class UDFBaseNumericUnar
 
   public abstract DoubleWritable evaluate(DoubleWritable a);
 
-  public abstract BigDecimalWritable evaluate(BigDecimalWritable a);
+  public abstract HiveDecimalWritable evaluate(HiveDecimalWritable a);
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java Wed Apr 10 00:38:52 2013
@@ -18,14 +18,11 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.math.RoundingMode;
-
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.io.LongWritable;
 
 /**
@@ -40,7 +37,7 @@ import org.apache.hadoop.io.LongWritable
     + "  > SELECT _FUNC_(5) FROM src LIMIT 1;\n" + "  5")
 public class UDFCeil extends UDF {
   private final LongWritable longWritable = new LongWritable();
-  private final BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
+  private final HiveDecimalWritable decimalWritable = new HiveDecimalWritable();
 
   public UDFCeil() {
   }
@@ -54,14 +51,14 @@ public class UDFCeil extends UDF {
     }
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable i) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      BigDecimal bd = i.getBigDecimal();
+      HiveDecimal bd = i.getHiveDecimal();
       int origScale = bd.scale();
-      bigDecimalWritable.set(bd.setScale(0, BigDecimal.ROUND_CEILING).setScale(origScale));
-      return bigDecimalWritable;
+      decimalWritable.set(bd.setScale(0, HiveDecimal.ROUND_CEILING).setScale(origScale));
+      return decimalWritable;
     }
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java Wed Apr 10 00:38:52 2013
@@ -18,14 +18,11 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.math.RoundingMode;
-
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.io.LongWritable;
 
 /**
@@ -40,7 +37,7 @@ import org.apache.hadoop.io.LongWritable
     + "  > SELECT _FUNC_(5) FROM src LIMIT 1;\n" + "  5")
 public class UDFFloor extends UDF {
   private final LongWritable result = new LongWritable();
-  private final BigDecimalWritable bdResult = new BigDecimalWritable();
+  private final HiveDecimalWritable bdResult = new HiveDecimalWritable();
 
   public UDFFloor() {
   }
@@ -54,13 +51,13 @@ public class UDFFloor extends UDF {
     }
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable i) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      BigDecimal bd = i.getBigDecimal();
+      HiveDecimal bd = i.getHiveDecimal();
       int origScale = bd.scale();
-      bdResult.set(bd.setScale(0, BigDecimal.ROUND_FLOOR).setScale(origScale));
+      bdResult.set(bd.setScale(0, HiveDecimal.ROUND_FLOOR).setScale(origScale));
       return bdResult;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java Wed Apr 10 00:38:52 2013
@@ -18,13 +18,11 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 
 /**
  * UDFOPDivide.
@@ -38,10 +36,9 @@ import org.apache.hadoop.hive.serde2.io.
  * return a double for divide.
  */
 public class UDFOPDivide extends UDF {
-  private final DoubleWritable doubleWritable = new DoubleWritable();
-  private final BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
 
-  public static final int MAX_SCALE = 65; // max compatible with MySQL
+  private final DoubleWritable doubleWritable = new DoubleWritable();
+  private final HiveDecimalWritable decimalWritable = new HiveDecimalWritable();
 
   public DoubleWritable evaluate(DoubleWritable a, DoubleWritable b) {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":"
@@ -54,17 +51,17 @@ public class UDFOPDivide extends UDF {
     return doubleWritable;
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
     if ((a == null) || (b == null)) {
       return null;
     }
-    if (b.getBigDecimal().compareTo(BigDecimal.ZERO) == 0) {
+    if (b.getHiveDecimal().compareTo(HiveDecimal.ZERO) == 0) {
       return null;
     } else {
-        bigDecimalWritable.set(a.getBigDecimal().divide(
-          b.getBigDecimal(), MAX_SCALE, RoundingMode.HALF_UP));
+        decimalWritable.set(a.getHiveDecimal().divide(
+          b.getHiveDecimal()));
     }
 
-    return bigDecimalWritable;
+    return decimalWritable;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java Wed Apr 10 00:38:52 2013
@@ -19,9 +19,9 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -110,13 +110,18 @@ public class UDFOPMinus extends UDFBaseN
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
 
     if ((a == null) || (b == null)) {
       return null;
     }
 
-    bigDecimalWritable.set(a.getBigDecimal().subtract(b.getBigDecimal()));
-    return bigDecimalWritable;
+    try {
+      decimalWritable.set(a.getHiveDecimal().subtract(b.getHiveDecimal()));
+    } catch (NumberFormatException e) {
+      return null;
+    }
+
+    return decimalWritable;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java Wed Apr 10 00:38:52 2013
@@ -18,12 +18,11 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
-
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -112,19 +111,24 @@ public class UDFOPMod extends UDFBaseNum
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
     if ((a == null) || (b == null)) {
       return null;
     }
 
-    BigDecimal av = a.getBigDecimal();
-    BigDecimal bv = b.getBigDecimal();
+    HiveDecimal av = a.getHiveDecimal();
+    HiveDecimal bv = b.getHiveDecimal();
+
+    if (bv.compareTo(HiveDecimal.ZERO) == 0) {
+      return null;
+    }
 
-    if (bv.compareTo(BigDecimal.ZERO) == 0) {
+    try {
+      decimalWritable.set(av.remainder(bv));
+    } catch(NumberFormatException e) {
       return null;
     }
 
-    bigDecimalWritable.set(av.remainder(bv));
-    return bigDecimalWritable;
+    return decimalWritable;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java Wed Apr 10 00:38:52 2013
@@ -19,9 +19,9 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -110,12 +110,17 @@ public class UDFOPMultiply extends UDFBa
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
     if ((a == null) || (b == null)) {
       return null;
     }
 
-    bigDecimalWritable.set(a.getBigDecimal().multiply(b.getBigDecimal()));
-    return bigDecimalWritable;
+    try {
+      decimalWritable.set(a.getHiveDecimal().multiply(b.getHiveDecimal()));
+    } catch (NumberFormatException e) {
+      return null;
+    }
+
+    return decimalWritable;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPNegative.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPNegative.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPNegative.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPNegative.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -92,12 +92,12 @@ public class UDFOPNegative extends UDFBa
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a) {
     if (a == null) {
       return null;
     }
-    bigDecimalWritable.set(a.getBigDecimal().negate());
-    return bigDecimalWritable;
+    decimalWritable.set(a.getHiveDecimal().negate());
+    return decimalWritable;
   }
 
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPlus.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPlus.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPlus.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPlus.java Wed Apr 10 00:38:52 2013
@@ -19,9 +19,9 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -115,13 +115,17 @@ public class UDFOPPlus extends UDFBaseNu
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
     if ((a == null) || (b == null)) {
       return null;
     }
 
-    bigDecimalWritable.set(a.getBigDecimal().add(b.getBigDecimal()));
-    return bigDecimalWritable;
+    try {
+      decimalWritable.set(a.getHiveDecimal().add(b.getHiveDecimal()));
+    } catch(NumberFormatException e) {
+      return null;
+    }
+    return decimalWritable;
   }
 
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPositive.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPositive.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPositive.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPPositive.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -68,7 +68,7 @@ public class UDFOPPositive extends UDFBa
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a) {
     return a;
   }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPosMod.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPosMod.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPosMod.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPosMod.java Wed Apr 10 00:38:52 2013
@@ -18,12 +18,11 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
-
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -113,19 +112,24 @@ public class UDFPosMod extends UDFBaseNu
   }
 
   @Override
-  public BigDecimalWritable evaluate(BigDecimalWritable a, BigDecimalWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, HiveDecimalWritable b) {
     if ((a == null) || (b == null)) {
       return null;
     }
 
-    BigDecimal av = a.getBigDecimal();
-    BigDecimal bv = b.getBigDecimal();
+    HiveDecimal av = a.getHiveDecimal();
+    HiveDecimal bv = b.getHiveDecimal();
+
+    if (bv.compareTo(HiveDecimal.ZERO) == 0) {
+      return null;
+    }
 
-    if (bv.compareTo(BigDecimal.ZERO) == 0) {
+    try {
+      decimalWritable.set(av.remainder(bv).add(bv).remainder(bv));
+    } catch (NumberFormatException e) {
       return null;
     }
 
-    bigDecimalWritable.set(av.remainder(bv).add(bv).remainder(bv));
-    return bigDecimalWritable;
+    return decimalWritable;
   }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPower.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPower.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPower.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFPower.java Wed Apr 10 00:38:52 2013
@@ -20,8 +20,8 @@ package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.io.IntWritable;
 
 /**
@@ -34,7 +34,7 @@ import org.apache.hadoop.io.IntWritable;
     + "  > SELECT _FUNC_(2, 3) FROM src LIMIT 1;\n" + "  8")
 public class UDFPower extends UDF {
   private final DoubleWritable resultDouble = new DoubleWritable();
-  private final BigDecimalWritable resultBigDecimal = new BigDecimalWritable();
+  private final HiveDecimalWritable resultHiveDecimal = new HiveDecimalWritable();
 
   public UDFPower() {
   }
@@ -50,7 +50,7 @@ public class UDFPower extends UDF {
       return resultDouble;
     }
   }
-  
+
   /**
    * Raise a to the power of b.
    */
@@ -62,16 +62,20 @@ public class UDFPower extends UDF {
       return resultDouble;
     }
   }
-  
+
   /**
    * Raise a to the power of b
    */
-  public BigDecimalWritable evaluate(BigDecimalWritable a, IntWritable b) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable a, IntWritable b) {
     if (a == null || b == null) {
       return null;
     } else {
-      resultBigDecimal.set(a.getBigDecimal().pow(b.get()));
-      return resultBigDecimal;
+      try {
+        resultHiveDecimal.set(a.getHiveDecimal().pow(b.get()));
+      } catch (NumberFormatException e) {
+        return null;
+      }
+      return resultHiveDecimal;
     }
   }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java Wed Apr 10 00:38:52 2013
@@ -21,11 +21,12 @@ package org.apache.hadoop.hive.ql.udf;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.LongWritable;
@@ -39,7 +40,7 @@ import org.apache.hadoop.io.LongWritable
     extended = "Example:\n"
     + "  > SELECT _FUNC_(12.3456, 1) FROM src LIMIT 1;\n" + "  12.3'")
 public class UDFRound extends UDF {
-  private final BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
+  private final HiveDecimalWritable decimalWritable = new HiveDecimalWritable();
   private final DoubleWritable doubleWritable = new DoubleWritable();
   private final LongWritable longWritable = new LongWritable();
   private final IntWritable intWritable = new IntWritable();
@@ -74,21 +75,25 @@ public class UDFRound extends UDF {
     return evaluate(n, i.get());
   }
 
-  private BigDecimalWritable evaluate(BigDecimalWritable n, int i) {
+  private HiveDecimalWritable evaluate(HiveDecimalWritable n, int i) {
     if (n == null) {
       return null;
     }
-    BigDecimal bd = n.getBigDecimal();
-    bd = n.getBigDecimal().setScale(i, RoundingMode.HALF_UP);
-    bigDecimalWritable.set(bd);
-    return bigDecimalWritable;
+    HiveDecimal bd = n.getHiveDecimal();
+    try {
+      bd = n.getHiveDecimal().setScale(i, HiveDecimal.ROUND_HALF_UP);
+    } catch (NumberFormatException e) {
+      return null;
+    }
+    decimalWritable.set(bd);
+    return decimalWritable;
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable n) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable n) {
     return evaluate(n, 0);
   }
 
-  public BigDecimalWritable evaluate(BigDecimalWritable n, IntWritable i) {
+  public HiveDecimalWritable evaluate(HiveDecimalWritable n, IntWritable i) {
     if (i == null) {
       return null;
     }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java Wed Apr 10 00:38:52 2013
@@ -18,10 +18,10 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.math.BigDecimal;
 
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -175,11 +175,11 @@ public class UDFToBoolean extends UDF {
     }
   }
 
-  public BooleanWritable evaluate(BigDecimalWritable i) {
+  public BooleanWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      booleanWritable.set(BigDecimal.ZERO.compareTo(i.getBigDecimal()) != 0);
+      booleanWritable.set(HiveDecimal.ZERO.compareTo(i.getHiveDecimal()) != 0);
       return booleanWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -182,11 +182,11 @@ public class UDFToByte extends UDF {
     }
   }
 
-  public ByteWritable evaluate(BigDecimalWritable i) {
+  public ByteWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      byteWritable.set(i.getBigDecimal().byteValue());
+      byteWritable.set(i.getHiveDecimal().byteValue());
       return byteWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -184,11 +184,11 @@ public class UDFToDouble extends UDF {
     }
   }
 
-  public DoubleWritable evaluate(BigDecimalWritable i) {
+  public DoubleWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      doubleWritable.set(i.getBigDecimal().doubleValue());
+      doubleWritable.set(i.getHiveDecimal().doubleValue());
       return doubleWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -185,11 +185,11 @@ public class UDFToFloat extends UDF {
     }
   }
 
-  public FloatWritable evaluate(BigDecimalWritable i) {
+  public FloatWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      floatWritable.set(i.getBigDecimal().floatValue());
+      floatWritable.set(i.getHiveDecimal().floatValue());
       return floatWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -189,11 +189,11 @@ public class UDFToInteger extends UDF {
     }
   }
 
-  public IntWritable evaluate(BigDecimalWritable i) {
+  public IntWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      intWritable.set(i.getBigDecimal().intValue());
+      intWritable.set(i.getHiveDecimal().intValue());
       return intWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -193,11 +193,11 @@ public class UDFToLong extends UDF {
     }
   }
 
-  public LongWritable evaluate(BigDecimalWritable i) {
+  public LongWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      longWritable.set(i.getBigDecimal().longValue());
+      longWritable.set(i.getHiveDecimal().longValue());
       return longWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java Wed Apr 10 00:38:52 2013
@@ -19,7 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -182,11 +182,11 @@ public class UDFToShort extends UDF {
     }
   }
 
-  public ShortWritable evaluate(BigDecimalWritable i) {
+  public ShortWritable evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {
-      shortWritable.set(i.getBigDecimal().shortValue());
+      shortWritable.set(i.getHiveDecimal().shortValue());
       return shortWritable;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToString.java Wed Apr 10 00:38:52 2013
@@ -20,7 +20,7 @@ package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
 import org.apache.hadoop.hive.serde2.ByteStream;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -142,7 +142,7 @@ public class UDFToString extends UDF {
     }
   }
 
-  public Text evaluate(BigDecimalWritable i) {
+  public Text evaluate(HiveDecimalWritable i) {
     if (i == null) {
       return null;
     } else {

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java Wed Apr 10 00:38:52 2013
@@ -17,27 +17,25 @@
  */
 package org.apache.hadoop.hive.ql.udf.generic;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.ArrayList;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
-import org.apache.hadoop.hive.ql.udf.UDFOPDivide;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.AggregationBuffer;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.StructField;
 import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.primitive.BigDecimalObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveDecimalObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
@@ -150,63 +148,85 @@ public class GenericUDAFAverage extends 
     }
   }
 
-  public static class GenericUDAFAverageEvaluatorDecimal extends AbstractGenericUDAFAverageEvaluator<BigDecimal> {
+  public static class GenericUDAFAverageEvaluatorDecimal extends AbstractGenericUDAFAverageEvaluator<HiveDecimal> {
 
     @Override
-    public void doReset(AverageAggregationBuffer<BigDecimal> aggregation) throws HiveException {
+    public void doReset(AverageAggregationBuffer<HiveDecimal> aggregation) throws HiveException {
       aggregation.count = 0;
-      aggregation.sum = BigDecimal.ZERO;
+      aggregation.sum = HiveDecimal.ZERO;
     }
 
     @Override
     protected ObjectInspector getSumFieldJavaObjectInspector() {
-      return PrimitiveObjectInspectorFactory.javaBigDecimalObjectInspector;
+      return PrimitiveObjectInspectorFactory.javaHiveDecimalObjectInspector;
     }
     @Override
     protected ObjectInspector getSumFieldWritableObjectInspector() {
-      return PrimitiveObjectInspectorFactory.writableBigDecimalObjectInspector;
+      return PrimitiveObjectInspectorFactory.writableHiveDecimalObjectInspector;
     }
 
     @Override
-    protected void doIterate(AverageAggregationBuffer<BigDecimal> aggregation,
+    protected void doIterate(AverageAggregationBuffer<HiveDecimal> aggregation,
         PrimitiveObjectInspector oi, Object parameter) {
-      BigDecimal value = PrimitiveObjectInspectorUtils.getBigDecimal(parameter, oi);
+      HiveDecimal value = PrimitiveObjectInspectorUtils.getHiveDecimal(parameter, oi);
       aggregation.count++;
-      aggregation.sum = aggregation.sum.add(value);
-
+      if (aggregation.sum != null) {
+        try {
+          aggregation.sum = aggregation.sum.add(value);
+        } catch (NumberFormatException e) {
+          aggregation.sum = null;
+        }
+      }
     }
 
     @Override
-    protected void doMerge(AverageAggregationBuffer<BigDecimal> aggregation, Long partialCount,
+    protected void doMerge(AverageAggregationBuffer<HiveDecimal> aggregation, Long partialCount,
         ObjectInspector sumFieldOI, Object partialSum) {
-      BigDecimal value = ((BigDecimalObjectInspector)sumFieldOI).getPrimitiveJavaObject(partialSum);
+      HiveDecimal value = ((HiveDecimalObjectInspector)sumFieldOI).getPrimitiveJavaObject(partialSum);
+      if (value == null) {
+        aggregation.sum = null;
+      }
       aggregation.count += partialCount;
-      aggregation.sum = aggregation.sum.add(value);
+      if (aggregation.sum != null) {
+        try {
+          aggregation.sum = aggregation.sum.add(value);
+        } catch (NumberFormatException e) {
+          aggregation.sum = null;
+        }
+      }
     }
 
     @Override
-    protected void doTerminatePartial(AverageAggregationBuffer<BigDecimal> aggregation) {
-      if(partialResult[1] == null) {
-        partialResult[1] = new BigDecimalWritable(BigDecimal.ZERO);
+    protected void doTerminatePartial(AverageAggregationBuffer<HiveDecimal> aggregation) {
+      if(partialResult[1] == null && aggregation.sum != null) {
+        partialResult[1] = new HiveDecimalWritable(HiveDecimal.ZERO);
       }
       ((LongWritable) partialResult[0]).set(aggregation.count);
-      ((BigDecimalWritable) partialResult[1]).set(aggregation.sum);
+      if (aggregation.sum != null) {
+        ((HiveDecimalWritable) partialResult[1]).set(aggregation.sum);
+      } else {
+        partialResult[1] = null;
+      }
     }
 
     @Override
-    protected Object doTerminate(AverageAggregationBuffer<BigDecimal> aggregation) {
-      if(aggregation.count == 0) {
+    protected Object doTerminate(AverageAggregationBuffer<HiveDecimal> aggregation) {
+      if(aggregation.count == 0 || aggregation.sum == null) {
         return null;
       } else {
-        BigDecimalWritable result = new BigDecimalWritable(BigDecimal.ZERO);
-        result.set(aggregation.sum.divide(new BigDecimal(aggregation.count),
-            UDFOPDivide.MAX_SCALE, RoundingMode.HALF_UP));
+        HiveDecimalWritable result = new HiveDecimalWritable(HiveDecimal.ZERO);
+        try {
+          result.set(aggregation.sum.divide(new HiveDecimal(aggregation.count)));
+        } catch (NumberFormatException e) {
+          result = null;
+        }
         return result;
       }
     }
+
     @Override
     public AggregationBuffer getNewAggregationBuffer() throws HiveException {
-      AverageAggregationBuffer<BigDecimal> result = new AverageAggregationBuffer<BigDecimal>();
+      AverageAggregationBuffer<HiveDecimal> result = new AverageAggregationBuffer<HiveDecimal>();
       reset(result);
       return result;
     }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java Wed Apr 10 00:38:52 2013
@@ -17,16 +17,15 @@
  */
 package org.apache.hadoop.hive.ql.udf.generic;
 
-import java.math.BigDecimal;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
@@ -70,7 +69,7 @@ public class GenericUDAFSum extends Abst
     case STRING:
       return new GenericUDAFSumDouble();
     case DECIMAL:
-      return new GenericUDAFSumBigDecimal();
+      return new GenericUDAFSumHiveDecimal();
     case BOOLEAN:
     default:
       throw new UDFArgumentTypeException(0,
@@ -80,40 +79,40 @@ public class GenericUDAFSum extends Abst
   }
 
   /**
-   * GenericUDAFSumBigDecimal.
+   * GenericUDAFSumHiveDecimal.
    *
    */
-  public static class GenericUDAFSumBigDecimal extends GenericUDAFEvaluator {
+  public static class GenericUDAFSumHiveDecimal extends GenericUDAFEvaluator {
     private PrimitiveObjectInspector inputOI;
-    private BigDecimalWritable result;
+    private HiveDecimalWritable result;
 
     @Override
     public ObjectInspector init(Mode m, ObjectInspector[] parameters) throws HiveException {
       assert (parameters.length == 1);
       super.init(m, parameters);
-      result = new BigDecimalWritable(BigDecimal.ZERO);
+      result = new HiveDecimalWritable(HiveDecimal.ZERO);
       inputOI = (PrimitiveObjectInspector) parameters[0];
-      return PrimitiveObjectInspectorFactory.writableBigDecimalObjectInspector;
+      return PrimitiveObjectInspectorFactory.writableHiveDecimalObjectInspector;
     }
 
     /** class for storing decimal sum value. */
-    static class SumBigDecimalAgg implements AggregationBuffer {
+    static class SumHiveDecimalAgg implements AggregationBuffer {
       boolean empty;
-      BigDecimal sum;
+      HiveDecimal sum;
     }
 
     @Override
     public AggregationBuffer getNewAggregationBuffer() throws HiveException {
-      SumBigDecimalAgg agg = new SumBigDecimalAgg();
+      SumHiveDecimalAgg agg = new SumHiveDecimalAgg();
       reset(agg);
       return agg;
     }
 
     @Override
     public void reset(AggregationBuffer agg) throws HiveException {
-      SumBigDecimalAgg bdAgg = (SumBigDecimalAgg) agg;
+      SumHiveDecimalAgg bdAgg = (SumHiveDecimalAgg) agg;
       bdAgg.empty = true;
-      bdAgg.sum = BigDecimal.ZERO;
+      bdAgg.sum = HiveDecimal.ZERO;
     }
 
     boolean warned = false;
@@ -143,17 +142,26 @@ public class GenericUDAFSum extends Abst
     @Override
     public void merge(AggregationBuffer agg, Object partial) throws HiveException {
       if (partial != null) {
-        SumBigDecimalAgg myagg = (SumBigDecimalAgg) agg;
+        SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) agg;
+        if (myagg.sum == null) {
+          return;
+        }
+
         myagg.empty = false;
-        myagg.sum = myagg.sum.add(
-            PrimitiveObjectInspectorUtils.getBigDecimal(partial, inputOI));
+
+        try {
+          myagg.sum = myagg.sum.add(
+            PrimitiveObjectInspectorUtils.getHiveDecimal(partial, inputOI));
+        } catch (NumberFormatException e) {
+          myagg.sum = null;
+        }
       }
     }
 
     @Override
     public Object terminate(AggregationBuffer agg) throws HiveException {
-      SumBigDecimalAgg myagg = (SumBigDecimalAgg) agg;
-      if (myagg.empty) {
+      SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) agg;
+      if (myagg.empty || myagg.sum == null) {
         return null;
       }
       result.set(myagg.sum);

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect2.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect2.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect2.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect2.java Wed Apr 10 00:38:52 2013
@@ -20,16 +20,16 @@ package org.apache.hadoop.hive.ql.udf.ge
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.math.BigDecimal;
 import java.sql.Timestamp;
 
+import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.udf.UDFType;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -166,7 +166,7 @@ public class GenericUDFReflect2 extends 
         ((BytesWritable)returnObj).set((byte[])result, 0, ((byte[]) result).length);
         return returnObj;
       case DECIMAL:
-        ((BigDecimalWritable)returnObj).set((BigDecimal)result);
+        ((HiveDecimalWritable)returnObj).set((HiveDecimal)result);
         return returnObj;
     }
     throw new HiveException("Invalid type " + returnOI.getPrimitiveCategory());

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToDecimal.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToDecimal.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToDecimal.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToDecimal.java Wed Apr 10 00:38:52 2013
@@ -23,14 +23,14 @@ import org.apache.hadoop.hive.ql.exec.UD
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter.BigDecimalConverter;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter.HiveDecimalConverter;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 
 @Description(name = "decimal", value = "_FUNC_(a) - cast a to decimal")
 public class GenericUDFToDecimal extends GenericUDF {
 
   private PrimitiveObjectInspector argumentOI;
-  private BigDecimalConverter bdConverter;
+  private HiveDecimalConverter bdConverter;
 
   @Override
   public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
@@ -46,9 +46,9 @@ public class GenericUDFToDecimal extends
           "The function DECIMAL takes only primitive types");
     }
 
-    bdConverter = new BigDecimalConverter(argumentOI,
-        PrimitiveObjectInspectorFactory.writableBigDecimalObjectInspector);
-    return PrimitiveObjectInspectorFactory.writableBigDecimalObjectInspector;
+    bdConverter = new HiveDecimalConverter(argumentOI,
+        PrimitiveObjectInspectorFactory.writableHiveDecimalObjectInspector);
+    return PrimitiveObjectInspectorFactory.writableHiveDecimalObjectInspector;
   }
 
   @Override

Modified: hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java (original)
+++ hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java Wed Apr 10 00:38:52 2013
@@ -28,7 +28,7 @@ import org.apache.hadoop.hive.serde2.typ
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
-import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampWritable;
@@ -37,11 +37,11 @@ public class TestFunctionRegistry extend
 
   public class TestUDF {
     public void same(DoubleWritable x, DoubleWritable y) {}
-    public void same(BigDecimalWritable x, BigDecimalWritable y) {}
-    public void one(IntWritable x, BigDecimalWritable y) {}
+    public void same(HiveDecimalWritable x, HiveDecimalWritable y) {}
+    public void one(IntWritable x, HiveDecimalWritable y) {}
     public void one(IntWritable x, DoubleWritable y) {}
     public void one(IntWritable x, IntWritable y) {}
-    public void mismatch(TimestampWritable x, BigDecimalWritable y) {}
+    public void mismatch(TimestampWritable x, HiveDecimalWritable y) {}
     public void mismatch(BytesWritable x, DoubleWritable y) {}
   }
   
@@ -90,16 +90,16 @@ public class TestFunctionRegistry extend
            DoubleWritable.class, DoubleWritable.class, false);
 
     verify(TestUDF.class, "same", TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo,
-           BigDecimalWritable.class, BigDecimalWritable.class, false);
+           HiveDecimalWritable.class, HiveDecimalWritable.class, false);
 
     verify(TestUDF.class, "same", TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.doubleTypeInfo,
-           BigDecimalWritable.class, BigDecimalWritable.class, false);
+           HiveDecimalWritable.class, HiveDecimalWritable.class, false);
 
     verify(TestUDF.class, "same", TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo,
-           BigDecimalWritable.class, BigDecimalWritable.class, false);
+           HiveDecimalWritable.class, HiveDecimalWritable.class, false);
 
     verify(TestUDF.class, "one", TypeInfoFactory.intTypeInfo, TypeInfoFactory.decimalTypeInfo,
-           IntWritable.class, BigDecimalWritable.class, false);
+           IntWritable.class, HiveDecimalWritable.class, false);
 
     verify(TestUDF.class, "one", TypeInfoFactory.intTypeInfo, TypeInfoFactory.floatTypeInfo,
            IntWritable.class, DoubleWritable.class, false);

Added: hive/trunk/ql/src/test/queries/clientpositive/decimal_precision.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/decimal_precision.q?rev=1466305&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/decimal_precision.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/decimal_precision.q Wed Apr 10 00:38:52 2013
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS DECIMAL_PRECISION;
+
+CREATE TABLE DECIMAL_PRECISION(dec decimal) 
+ROW FORMAT DELIMITED
+   FIELDS TERMINATED BY ' '
+STORED AS TEXTFILE;
+
+LOAD DATA LOCAL INPATH '../data/files/kv8.txt' INTO TABLE DECIMAL_PRECISION;
+
+SELECT * FROM DECIMAL_PRECISION ORDER BY dec;
+
+SELECT dec, dec + 1, dec - 1 FROM DECIMAL_PRECISION ORDER BY dec;
+SELECT dec, dec * 2, dec / 3  FROM DECIMAL_PRECISION ORDER BY dec;
+SELECT dec, dec / 9 FROM DECIMAL_PRECISION ORDER BY dec;
+SELECT dec, dec / 27 FROM DECIMAL_PRECISION ORDER BY dec;
+SELECT dec, dec * dec FROM DECIMAL_PRECISION ORDER BY dec;
+
+SELECT avg(dec), sum(dec) FROM DECIMAL_PRECISION;
+
+DROP TABLE DECIMAL_PRECISION;

Modified: hive/trunk/ql/src/test/results/clientpositive/decimal_3.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/decimal_3.q.out?rev=1466305&r1=1466304&r2=1466305&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/decimal_3.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/decimal_3.q.out Wed Apr 10 00:38:52 2013
@@ -27,8 +27,10 @@ POSTHOOK: query: SELECT * FROM DECIMAL_3
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
+NULL	0
+NULL	0
 -1234567890.123456789	-1234567890
--4.4E+3	4400
+-4400	4400
 -1255.49	-1255
 -1.122	-11
 -1.12	-1
@@ -38,7 +40,6 @@ POSTHOOK: Input: default@decimal_3
 -0.3	0
 0	0
 0	0
-1E-99	0
 0.01	0
 0.02	0
 0.1	0
@@ -57,14 +58,13 @@ POSTHOOK: Input: default@decimal_3
 3.14	3
 3.14	3
 3.14	4
-1E+1	10
-2E+1	20
-1E+2	100
+10	10
+20	20
+100	100
 124	124
 125.2	125
-2E+2	200
+200	200
 1234567890.12345678	1234567890
-1E+99	0
 PREHOOK: query: SELECT * FROM DECIMAL_3 ORDER BY key DESC, value DESC
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3
@@ -73,14 +73,13 @@ POSTHOOK: query: SELECT * FROM DECIMAL_3
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
-1E+99	0
 1234567890.12345678	1234567890
-2E+2	200
+200	200
 125.2	125
 124	124
-1E+2	100
-2E+1	20
-1E+1	10
+100	100
+20	20
+10	10
 3.14	4
 3.14	3
 3.14	3
@@ -99,7 +98,6 @@ POSTHOOK: Input: default@decimal_3
 0.1	0
 0.02	0
 0.01	0
-1E-99	0
 0	0
 0	0
 -0.3	0
@@ -109,8 +107,10 @@ POSTHOOK: Input: default@decimal_3
 -1.12	-1
 -1.122	-11
 -1255.49	-1255
--4.4E+3	4400
+-4400	4400
 -1234567890.123456789	-1234567890
+NULL	0
+NULL	0
 PREHOOK: query: SELECT * FROM DECIMAL_3 ORDER BY key, value
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3
@@ -119,8 +119,10 @@ POSTHOOK: query: SELECT * FROM DECIMAL_3
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
+NULL	0
+NULL	0
 -1234567890.123456789	-1234567890
--4.4E+3	4400
+-4400	4400
 -1255.49	-1255
 -1.122	-11
 -1.12	-1
@@ -130,7 +132,6 @@ POSTHOOK: Input: default@decimal_3
 -0.3	0
 0	0
 0	0
-1E-99	0
 0.01	0
 0.02	0
 0.1	0
@@ -149,14 +150,13 @@ POSTHOOK: Input: default@decimal_3
 3.14	3
 3.14	3
 3.14	4
-1E+1	10
-2E+1	20
-1E+2	100
+10	10
+20	20
+100	100
 124	124
 125.2	125
-2E+2	200
+200	200
 1234567890.12345678	1234567890
-1E+99	0
 PREHOOK: query: SELECT DISTINCT key FROM DECIMAL_3 ORDER BY key
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3
@@ -165,8 +165,9 @@ POSTHOOK: query: SELECT DISTINCT key FRO
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
+NULL
 -1234567890.123456789
--4.4E+3
+-4400
 -1255.49
 -1.122
 -1.12
@@ -174,7 +175,6 @@ POSTHOOK: Input: default@decimal_3
 -0.33
 -0.3
 0
-1E-99
 0.01
 0.02
 0.1
@@ -188,14 +188,13 @@ POSTHOOK: Input: default@decimal_3
 1.122
 2
 3.14
-1E+1
-2E+1
-1E+2
+10
+20
+100
 124
 125.2
-2E+2
+200
 1234567890.12345678
-1E+99
 PREHOOK: query: SELECT key, sum(value) FROM DECIMAL_3 GROUP BY key ORDER BY key
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3
@@ -204,8 +203,9 @@ POSTHOOK: query: SELECT key, sum(value) 
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
+NULL	0
 -1234567890.123456789	-1234567890
--4.4E+3	4400
+-4400	4400
 -1255.49	-1255
 -1.122	-11
 -1.12	-2
@@ -213,7 +213,6 @@ POSTHOOK: Input: default@decimal_3
 -0.33	0
 -0.3	0
 0	0
-1E-99	0
 0.01	0
 0.02	0
 0.1	0
@@ -227,14 +226,13 @@ POSTHOOK: Input: default@decimal_3
 1.122	1
 2	4
 3.14	13
-1E+1	10
-2E+1	20
-1E+2	100
+10	10
+20	20
+100	100
 124	124
 125.2	125
-2E+2	200
+200	200
 1234567890.12345678	1234567890
-1E+99	0
 PREHOOK: query: SELECT value, sum(key) FROM DECIMAL_3 GROUP BY value ORDER BY value
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3
@@ -247,18 +245,18 @@ POSTHOOK: Input: default@decimal_3
 -1255	-1255.49
 -11	-1.122
 -1	-2.24
-0	1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+0	0.33
 1	5.2419999999999999999999999
 2	4
 3	9.42
 4	3.14
-10	1E+1
-20	2E+1
-100	1E+2
+10	10
+20	20
+100	100
 124	124
 125	125.2
-200	2E+2
-4400	-4.4E+3
+200	200
+4400	-4400
 1234567890	1234567890.12345678
 PREHOOK: query: SELECT * FROM DECIMAL_3 a JOIN DECIMAL_3 b ON (a.key = b.key) ORDER BY a.key, a.value, b.value
 PREHOOK: type: QUERY
@@ -269,7 +267,7 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_3
 #### A masked pattern was here ####
 -1234567890.123456789	-1234567890	-1234567890.123456789	-1234567890
--4.4E+3	4400	-4.4E+3	4400
+-4400	4400	-4400	4400
 -1255.49	-1255	-1255.49	-1255
 -1.122	-11	-1.122	-11
 -1.12	-1	-1.12	-1
@@ -283,7 +281,6 @@ POSTHOOK: Input: default@decimal_3
 0	0	0	0
 0	0	0	0
 0	0	0	0
-1E-99	0	1E-99	0
 0.01	0	0.01	0
 0.02	0	0.02	0
 0.1	0	0.1	0
@@ -318,14 +315,13 @@ POSTHOOK: Input: default@decimal_3
 3.14	4	3.14	3
 3.14	4	3.14	3
 3.14	4	3.14	4
-1E+1	10	1E+1	10
-2E+1	20	2E+1	20
-1E+2	100	1E+2	100
+10	10	10	10
+20	20	20	20
+100	100	100	100
 124	124	124	124
 125.2	125	125.2	125
-2E+2	200	2E+2	200
+200	200	200	200
 1234567890.12345678	1234567890	1234567890.12345678	1234567890
-1E+99	0	1E+99	0
 PREHOOK: query: SELECT * FROM DECIMAL_3 WHERE key=3.14 ORDER BY key, value
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_3