You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by mm...@apache.org on 2016/12/22 08:32:37 UTC

[08/10] hive git commit: HIVE-15335: Fast Decimal (Matt McCline, reviewed by Sergey Shelukhin, Prasanth Jayachandran, Owen O'Malley)

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java
index 9013084..9d900e4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java
@@ -141,7 +141,11 @@ public class ConvertAstToSearchArg {
     switch (type) {
       case LONG:
         if (lit instanceof HiveDecimal) {
-          return ((HiveDecimal)lit).longValueExact();
+          HiveDecimal dec = (HiveDecimal) lit;
+          if (!dec.isLong()) {
+            throw new ArithmeticException("Overflow");
+          }
+          return dec.longValue();
         }
         return ((Number) lit).longValue();
       case STRING:

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
index 31e2878..d214a96 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
@@ -59,8 +59,8 @@ public class UDFLog extends UDFMath {
       return null;
     }
 
-    double base = baseWritable.getHiveDecimal().bigDecimalValue().doubleValue();
-    double d = writable.getHiveDecimal().bigDecimalValue().doubleValue();
+    double base = baseWritable.doubleValue();
+    double d = writable.doubleValue();
     return log(base, d);
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMath.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMath.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMath.java
index 8087df1..378b3d7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMath.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMath.java
@@ -54,7 +54,7 @@ public abstract class UDFMath extends UDF {
       return null;
     }
 
-    double d = writable.getHiveDecimal().bigDecimalValue().doubleValue();
+    double d = writable.doubleValue();
     doubleWritable.set(d);
     return doEvaluate(doubleWritable);
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java
index 67d62d9..449848a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java
@@ -79,12 +79,12 @@ public class UDFSign extends UDF {
    *
    * @return -1, 0, or 1 representing the sign of the input decimal
    */
-  public IntWritable evaluate(HiveDecimalWritable dec) {
-    if (dec == null || dec.getHiveDecimal() == null) {
+  public IntWritable evaluate(HiveDecimalWritable decWritable) {
+    if (decWritable == null || !decWritable.isSet()) {
       return null;
     }
 
-    intWritable.set(dec.getHiveDecimal().signum());
+    intWritable.set(decWritable.signum());
     return intWritable;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
index 17b892c..0cc0c9e 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToBoolean.java
@@ -191,10 +191,10 @@ public class UDFToBoolean extends UDF {
   }
 
   public BooleanWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet()) {
       return null;
     } else {
-      booleanWritable.set(HiveDecimal.ZERO.compareTo(i.getHiveDecimal()) != 0);
+      booleanWritable.set(i.compareTo(HiveDecimal.ZERO) != 0);
       return booleanWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
index efae82d..df2b42f 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToByte.java
@@ -192,10 +192,10 @@ public class UDFToByte extends UDF {
   }
 
   public ByteWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet() || !i.isByte()) {
       return null;
     } else {
-      byteWritable.set(i.getHiveDecimal().byteValue());
+      byteWritable.set(i.byteValue());
       return byteWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
index 9cbc114..5fcae42 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToDouble.java
@@ -195,10 +195,10 @@ public class UDFToDouble extends UDF {
   }
 
   public DoubleWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet()) {
       return null;
     } else {
-      doubleWritable.set(i.getHiveDecimal().doubleValue());
+      doubleWritable.set(i.doubleValue());
       return doubleWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
index 5808c90..c8e32f4 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToFloat.java
@@ -196,10 +196,10 @@ public class UDFToFloat extends UDF {
   }
 
   public FloatWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet()) {
       return null;
     } else {
-      floatWritable.set(i.getHiveDecimal().floatValue());
+      floatWritable.set(i.floatValue());
       return floatWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
index a7551cb..42972c7 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToInteger.java
@@ -201,10 +201,10 @@ public class UDFToInteger extends UDF {
   }
 
   public IntWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet() || !i.isInt()) {
       return null;
     } else {
-      intWritable.set(i.getHiveDecimal().intValue());  // TODO: lossy conversion!
+      intWritable.set(i.intValue());
       return intWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
index c961d14..847b535 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToLong.java
@@ -204,10 +204,10 @@ public class UDFToLong extends UDF {
   }
 
   public LongWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isSet() || !i.isLong()) {
       return null;
     } else {
-      longWritable.set(i.getHiveDecimal().longValue()); // TODO: lossy conversion!
+      longWritable.set(i.longValue());
       return longWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
index 570408a..0ae0c13 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFToShort.java
@@ -194,10 +194,10 @@ public class UDFToShort extends UDF {
   }
 
   public ShortWritable evaluate(HiveDecimalWritable i) {
-    if (i == null) {
+    if (i == null || !i.isShort() || !i.isShort()) {
       return null;
     } else {
-      shortWritable.set(i.getHiveDecimal().shortValue());   // TODO: lossy conversion!
+      shortWritable.set(i.shortValue());
       return shortWritable;
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
index 38269f4..e2cd213 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
@@ -206,7 +206,7 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
     public ObjectInspector init(Mode m, ObjectInspector[] parameters) throws HiveException {
       assert (parameters.length == 1);
       super.init(m, parameters);
-      result = new HiveDecimalWritable(HiveDecimal.ZERO);
+      result = new HiveDecimalWritable(0);
       inputOI = (PrimitiveObjectInspector) parameters[0];
       // The output precision is 10 greater than the input which should cover at least
       // 10b rows. The scale is the same as the input.
@@ -226,21 +226,21 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
 
     /** class for storing decimal sum value. */
     @AggregationType(estimable = false) // hard to know exactly for decimals
-    static class SumHiveDecimalAgg extends SumAgg<HiveDecimal> {
+    static class SumHiveDecimalWritableAgg extends SumAgg<HiveDecimalWritable> {
     }
 
     @Override
     public AggregationBuffer getNewAggregationBuffer() throws HiveException {
-      SumHiveDecimalAgg agg = new SumHiveDecimalAgg();
+      SumHiveDecimalWritableAgg agg = new SumHiveDecimalWritableAgg();
       reset(agg);
       return agg;
     }
 
     @Override
     public void reset(AggregationBuffer agg) throws HiveException {
-      SumAgg<HiveDecimal> bdAgg = (SumAgg<HiveDecimal>) agg;
+      SumAgg<HiveDecimalWritable> bdAgg = (SumAgg<HiveDecimalWritable>) agg;
       bdAgg.empty = true;
-      bdAgg.sum = HiveDecimal.ZERO;
+      bdAgg.sum = new HiveDecimalWritable(0);
       bdAgg.uniqueObjects = new HashSet<ObjectInspectorObject>();
     }
 
@@ -250,9 +250,9 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
     public void iterate(AggregationBuffer agg, Object[] parameters) throws HiveException {
       assert (parameters.length == 1);
       try {
-        if (isEligibleValue((SumHiveDecimalAgg) agg, parameters[0])) {
-          ((SumHiveDecimalAgg)agg).empty = false;
-          ((SumHiveDecimalAgg)agg).sum = ((SumHiveDecimalAgg)agg).sum.add(
+        if (isEligibleValue((SumHiveDecimalWritableAgg) agg, parameters[0])) {
+          ((SumHiveDecimalWritableAgg)agg).empty = false;
+          ((SumHiveDecimalWritableAgg)agg).sum.mutateAdd(
               PrimitiveObjectInspectorUtils.getHiveDecimal(parameters[0], inputOI));
         }
       } catch (NumberFormatException e) {
@@ -270,8 +270,8 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
     @Override
     public void merge(AggregationBuffer agg, Object partial) throws HiveException {
       if (partial != null) {
-        SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) agg;
-        if (myagg.sum == null) {
+        SumHiveDecimalWritableAgg myagg = (SumHiveDecimalWritableAgg) agg;
+        if (myagg.sum == null || !myagg.sum.isSet()) {
           return;
         }
 
@@ -279,22 +279,22 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
         if (isWindowingDistinct()) {
           throw new HiveException("Distinct windowing UDAF doesn't support merge and terminatePartial");
         } else {
-          myagg.sum = myagg.sum.add(PrimitiveObjectInspectorUtils.getHiveDecimal(partial, inputOI));
+          myagg.sum.mutateAdd(PrimitiveObjectInspectorUtils.getHiveDecimal(partial, inputOI));
         }
       }
     }
 
     @Override
     public Object terminate(AggregationBuffer agg) throws HiveException {
-      SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) agg;
-      if (myagg.empty || myagg.sum == null) {
+      SumHiveDecimalWritableAgg myagg = (SumHiveDecimalWritableAgg) agg;
+      if (myagg.empty || myagg.sum == null || !myagg.sum.isSet()) {
         return null;
       }
-      if (myagg.sum != null) {
-        if (HiveDecimalUtils.enforcePrecisionScale(myagg.sum, (DecimalTypeInfo)outputOI.getTypeInfo()) == null) {
-          LOG.warn("The sum of a column with data type HiveDecimal is out of range");
-          return null;
-        }
+      DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo)outputOI.getTypeInfo();
+      myagg.sum.mutateEnforcePrecisionScale(decimalTypeInfo.getPrecision(), decimalTypeInfo.getScale());
+      if (!myagg.sum.isSet()) {
+        LOG.warn("The sum of a column with data type HiveDecimal is out of range");
+        return null;
       }
 
       result.set(myagg.sum);
@@ -315,8 +315,8 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
         protected HiveDecimalWritable getNextResult(
             org.apache.hadoop.hive.ql.udf.generic.GenericUDAFStreamingEvaluator.SumAvgEnhancer<HiveDecimalWritable, HiveDecimal>.SumAvgStreamingState ss)
             throws HiveException {
-          SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) ss.wrappedBuf;
-          HiveDecimal r = myagg.empty ? null : myagg.sum;
+          SumHiveDecimalWritableAgg myagg = (SumHiveDecimalWritableAgg) ss.wrappedBuf;
+          HiveDecimal r = myagg.empty ? null : myagg.sum.getHiveDecimal();
           HiveDecimal d = ss.retrieveNextIntermediateValue();
           if (d != null ) {
             r = r == null ? null : r.subtract(d);
@@ -329,8 +329,8 @@ public class GenericUDAFSum extends AbstractGenericUDAFResolver {
         protected HiveDecimal getCurrentIntermediateResult(
             org.apache.hadoop.hive.ql.udf.generic.GenericUDAFStreamingEvaluator.SumAvgEnhancer<HiveDecimalWritable, HiveDecimal>.SumAvgStreamingState ss)
             throws HiveException {
-          SumHiveDecimalAgg myagg = (SumHiveDecimalAgg) ss.wrappedBuf;
-          return myagg.empty ? null : myagg.sum;
+          SumHiveDecimalWritableAgg myagg = (SumHiveDecimalWritableAgg) ss.wrappedBuf;
+          return myagg.empty ? null : myagg.sum.getHiveDecimal();
         }
 
       };

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java
index a8e2786..bf1fed0 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java
@@ -141,7 +141,8 @@ public class GenericUDFAbs extends GenericUDF {
       HiveDecimalWritable val = decimalOI.getPrimitiveWritableObject(valObject);
 
       if (val != null) {
-        resultDecimal.set(val.getHiveDecimal().abs());
+        resultDecimal.set(val);
+        resultDecimal.mutateAbs();
         val = resultDecimal;
       }
       return val;

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBRound.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBRound.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBRound.java
index 4a59eb3..cb901cf 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBRound.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBRound.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.hive.ql.exec.vector.expressions.FuncBRoundWithNumDigits
 import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.FuncBRoundDecimalToDecimal;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.FuncBRoundDoubleToDouble;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 
 @Description(name = "bround",
 value = "_FUNC_(x[, d]) - round x to d decimal places using HALF_EVEN rounding mode.",
@@ -37,8 +38,10 @@ extended = "Banker's rounding. The value is rounded to the nearest even number.
 public class GenericUDFBRound extends GenericUDFRound {
 
   @Override
-  protected HiveDecimal round(HiveDecimal input, int scale) {
-    return RoundUtils.bround(input, scale);
+  protected HiveDecimalWritable round(HiveDecimalWritable inputDecWritable, int scale) {
+    HiveDecimalWritable result = new HiveDecimalWritable(inputDecWritable);
+    result.mutateSetScale(scale, HiveDecimal.ROUND_HALF_EVEN);
+    return result;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCeil.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCeil.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCeil.java
index 95ec32e..bc0bf5e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCeil.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCeil.java
@@ -50,8 +50,8 @@ public final class GenericUDFCeil extends GenericUDFFloorCeilBase {
 
   @Override
   protected HiveDecimalWritable evaluate(HiveDecimalWritable input) {
-    HiveDecimal bd = input.getHiveDecimal();
-    decimalWritable.set(bd.setScale(0, HiveDecimal.ROUND_CEILING));
+    decimalWritable.set(input);
+    decimalWritable.mutateSetScale(0, HiveDecimal.ROUND_CEILING);
     return decimalWritable;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFloor.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFloor.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFloor.java
index 8ad15e9..a8cb9cc 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFloor.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFloor.java
@@ -50,8 +50,8 @@ public final class GenericUDFFloor extends GenericUDFFloorCeilBase {
 
   @Override
   protected HiveDecimalWritable evaluate(HiveDecimalWritable input) {
-    HiveDecimal bd = input.getHiveDecimal();
-    decimalWritable.set(bd.setScale(0, HiveDecimal.ROUND_FLOOR));
+    decimalWritable.set(input);
+    decimalWritable.mutateSetScale(0, HiveDecimal.ROUND_FLOOR);
     return decimalWritable;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNegative.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNegative.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNegative.java
index de964d6..45a3504 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNegative.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNegative.java
@@ -82,8 +82,8 @@ public class GenericUDFOPNegative extends GenericUDFBaseUnary {
       doubleWritable.set(-(((DoubleWritable)input).get()));
       return doubleWritable;
     case DECIMAL:
-      HiveDecimal dec = ((HiveDecimalWritable)input).getHiveDecimal();
-      decimalWritable.set(dec.negate());
+      decimalWritable.set((HiveDecimalWritable)input);
+      decimalWritable.mutateNegate();
       return decimalWritable;
     case INTERVAL_YEAR_MONTH:
       HiveIntervalYearMonth intervalYearMonth =

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericMinus.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericMinus.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericMinus.java
index 28f7907..268a722 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericMinus.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericMinus.java
@@ -78,11 +78,8 @@ public class GenericUDFOPNumericMinus extends GenericUDFBaseNumeric {
 
   @Override
   protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) {
-    HiveDecimal dec = left.subtract(right);
-    if (dec == null) {
-      return null;
-    }
-    decimalWritable.set(dec);
+    decimalWritable.set(left);
+    decimalWritable.mutateSubtract(right);
     return decimalWritable;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericPlus.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericPlus.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericPlus.java
index b2b76f0..f9f5ff7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericPlus.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNumericPlus.java
@@ -87,13 +87,8 @@ public class GenericUDFOPNumericPlus extends GenericUDFBaseNumeric {
 
   @Override
   protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) {
-    HiveDecimal dec = left.add(right);
-
-    if (dec == null) {
-      return null;
-    }
-
-    decimalWritable.set(dec);
+    decimalWritable.set(left);
+    decimalWritable.mutateAdd(right);
     return decimalWritable;
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
index ae81fe3..e8b0d15 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
@@ -201,12 +201,12 @@ public class GenericUDFRound extends GenericUDF {
     case VOID:
       return null;
     case DECIMAL:
-      HiveDecimalWritable decimalWritable = (HiveDecimalWritable) inputOI.getPrimitiveWritableObject(input);
-      HiveDecimal dec = round(decimalWritable.getHiveDecimal(), scale);
-      if (dec == null) {
-        return null;
+      {
+        // The getPrimitiveWritableObject method returns a new writable.
+        HiveDecimalWritable decimalWritable = (HiveDecimalWritable) inputOI.getPrimitiveWritableObject(input);
+        // Call the different round flavor.
+        return round(decimalWritable, scale);
       }
-      return new HiveDecimalWritable(dec);
     case BYTE:
       ByteWritable byteWritable = (ByteWritable)inputOI.getPrimitiveWritableObject(input);
       if (scale >= 0) {
@@ -255,8 +255,10 @@ public class GenericUDFRound extends GenericUDF {
     }
   }
 
-  protected HiveDecimal round(HiveDecimal input, int scale) {
-    return RoundUtils.round(input, scale);
+  protected HiveDecimalWritable round(HiveDecimalWritable inputDecWritable, int scale) {
+    HiveDecimalWritable result = new HiveDecimalWritable(inputDecWritable);
+    result.mutateSetScale(scale, HiveDecimal.ROUND_HALF_UP);
+    return result;
   }
 
   protected long round(long input, int scale) {

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorGroupByOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorGroupByOperator.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorGroupByOperator.java
index f5b5d9d..0ddebf8 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorGroupByOperator.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorGroupByOperator.java
@@ -732,12 +732,12 @@ public class TestVectorGroupByOperator {
         "sum",
         4,
         Arrays.asList(new Object[]{
-                HiveDecimal.create("1234.2401").setScale(scale),
-                HiveDecimal.create("1868.52").setScale(scale),
-                HiveDecimal.ZERO.setScale(scale),
-                HiveDecimal.create("456.84").setScale(scale),
-                HiveDecimal.create("121.89").setScale(scale)}),
-       HiveDecimal.create("3681.4901").setScale( scale));
+                HiveDecimal.create("1234.2401"),
+                HiveDecimal.create("1868.52"),
+                HiveDecimal.ZERO,
+                HiveDecimal.create("456.84"),
+                HiveDecimal.create("121.89")}),
+       HiveDecimal.create("3681.4901"));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorSerDeRow.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorSerDeRow.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorSerDeRow.java
index 8ffff9d..b29bb8b 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorSerDeRow.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/TestVectorSerDeRow.java
@@ -97,7 +97,9 @@ public class TestVectorSerDeRow extends TestCase {
       PrimitiveCategory primitiveCategory = primitiveCategories[i];
       PrimitiveTypeInfo primitiveTypeInfo = source.primitiveTypeInfos()[i];
       if (!deserializeRead.readNextField()) {
-        throw new HiveException("Unexpected NULL");
+        throw new HiveException("Unexpected NULL when reading primitiveCategory " + primitiveCategory +
+            " expected (" + expected.getClass().getName() + ", " + expected.toString() + ") " +
+            " deserializeRead " + deserializeRead.getClass().getName());
       }
       switch (primitiveCategory) {
       case BOOLEAN:
@@ -307,7 +309,7 @@ public class TestVectorSerDeRow extends TestCase {
     }
   }
 
-  void testVectorSerializeRow(int caseNum, Random r, SerializationType serializationType)
+  void testVectorSerializeRow(Random r, SerializationType serializationType)
       throws HiveException, IOException, SerDeException {
 
     String[] emptyScratchTypeNames = new String[0];
@@ -383,7 +385,9 @@ public class TestVectorSerDeRow extends TestCase {
         Object rowObj = row[c];
         Object expectedObj = expectedRow[c];
         if (rowObj == null) {
-          fail("Unexpected NULL from extractRow");
+          fail("Unexpected NULL from extractRow.  Expected class " +
+              expectedObj.getClass().getName() + " value " + expectedObj.toString() +
+              " batch index " + i + " firstRandomRowIndex " + firstRandomRowIndex);
         }
         if (!rowObj.equals(expectedObj)) {
           fail("Row " + (firstRandomRowIndex + i) + " and column " + c + " mismatch (" + primitiveTypeInfos[c].getPrimitiveCategory() + " actual value " + rowObj + " and expected value " + expectedObj + ")");
@@ -541,7 +545,7 @@ public class TestVectorSerDeRow extends TestCase {
     return new LazySerDeParameters(conf, tbl, LazySimpleSerDe.class.getName());
   }
 
-  void testVectorDeserializeRow(int caseNum, Random r, SerializationType serializationType,
+  void testVectorDeserializeRow(Random r, SerializationType serializationType,
       boolean alternate1, boolean alternate2,
       boolean useExternalBuffer)
           throws HiveException, IOException, SerDeException {
@@ -689,113 +693,111 @@ public class TestVectorSerDeRow extends TestCase {
     }
   }
 
-  public void testVectorSerDeRow() throws Throwable {
-
-    Random r = new Random(5678);
-
-    int c = 0;
-
-    /*
-     * SERIALIZE tests.
-     */
-      testVectorSerializeRow(c++, r, SerializationType.BINARY_SORTABLE);
-
-      testVectorSerializeRow(c++, r, SerializationType.LAZY_BINARY);
-
-      testVectorSerializeRow(c++, r, SerializationType.LAZY_SIMPLE);
-
-    /*
-     * DESERIALIZE tests.
-     */
-
-    // BINARY_SORTABLE
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ false,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ true,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ false,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
-          /* useExternalBuffer */ true);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ true,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
-          /* useExternalBuffer */ true);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ false,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ true,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ false,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
-          /* useExternalBuffer */ true);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.BINARY_SORTABLE,
-          /* alternate1 = useColumnSortOrderIsDesc */ true,
-          /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
-          /* useExternalBuffer */ true);
-
-    // LAZY_BINARY
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_BINARY,
-          /* alternate1 = unused */ false,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_BINARY,
-          /* alternate1 = unused */ false,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ true);
-
-    // LAZY_SIMPLE
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_SIMPLE,
-          /* alternate1 = useLazySimpleEscapes */ false,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_SIMPLE,
-          /* alternate1 = useLazySimpleEscapes */ false,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ true);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_SIMPLE,
-          /* alternate1 = useLazySimpleEscapes */ true,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ false);
-
-      testVectorDeserializeRow(c++, r,
-          SerializationType.LAZY_SIMPLE,
-          /* alternate1 = useLazySimpleEscapes */ true,
-          /* alternate2 = unused */ false,
-          /* useExternalBuffer */ true);
+  public void testVectorBinarySortableSerializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorSerializeRow(r, SerializationType.BINARY_SORTABLE);
+  }
+
+  public void testVectorLazyBinarySerializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorSerializeRow(r, SerializationType.LAZY_BINARY);
+  }
+
+  public void testVectorLazySimpleSerializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorSerializeRow(r, SerializationType.LAZY_SIMPLE);
+  }
+ 
+  public void testVectorBinarySortableDeserializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ false,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ true,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ false,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
+        /* useExternalBuffer */ true);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ true,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ false,
+        /* useExternalBuffer */ true);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ false,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ true,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ false,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
+        /* useExternalBuffer */ true);
+
+    testVectorDeserializeRow(r,
+        SerializationType.BINARY_SORTABLE,
+        /* alternate1 = useColumnSortOrderIsDesc */ true,
+        /* alternate2 = useBinarySortableCharsNeedingEscape */ true,
+        /* useExternalBuffer */ true);
+  }
+
+  public void testVectorLazyBinaryDeserializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_BINARY,
+        /* alternate1 = unused */ false,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_BINARY,
+        /* alternate1 = unused */ false,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ true);
+  }
+
+  public void testVectorLazySimpleDeserializeRow() throws Throwable {
+    Random r = new Random(8732);
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_SIMPLE,
+        /* alternate1 = useLazySimpleEscapes */ false,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_SIMPLE,
+        /* alternate1 = useLazySimpleEscapes */ false,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ true);
+
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_SIMPLE,
+        /* alternate1 = useLazySimpleEscapes */ true,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ false);
+
+    testVectorDeserializeRow(r,
+        SerializationType.LAZY_SIMPLE,
+        /* alternate1 = useLazySimpleEscapes */ true,
+        /* alternate2 = unused */ false,
+        /* useExternalBuffer */ true);
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/VectorRandomRowSource.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/VectorRandomRowSource.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/VectorRandomRowSource.java
index 57bf60d..cbde615 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/VectorRandomRowSource.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/VectorRandomRowSource.java
@@ -25,6 +25,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Random;
 
+import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.hive.common.type.HiveChar;
@@ -336,27 +337,28 @@ public class VectorRandomRowSource {
       {
         WritableHiveCharObjectInspector writableCharObjectInspector =
                 new WritableHiveCharObjectInspector( (CharTypeInfo) primitiveTypeInfo);
-        return writableCharObjectInspector.create(new HiveChar(StringUtils.EMPTY, -1));
+        return writableCharObjectInspector.create((HiveChar) object);
       }
     case VARCHAR:
       {
         WritableHiveVarcharObjectInspector writableVarcharObjectInspector =
                 new WritableHiveVarcharObjectInspector( (VarcharTypeInfo) primitiveTypeInfo);
-        return writableVarcharObjectInspector.create(new HiveVarchar(StringUtils.EMPTY, -1));
+        return writableVarcharObjectInspector.create((HiveVarchar) object);
       }
     case BINARY:
-      return PrimitiveObjectInspectorFactory.writableBinaryObjectInspector.create(ArrayUtils.EMPTY_BYTE_ARRAY);
+      return PrimitiveObjectInspectorFactory.writableBinaryObjectInspector.create((byte[]) object);
     case TIMESTAMP:
-      return ((WritableTimestampObjectInspector) objectInspector).create(new Timestamp(0));
+      return ((WritableTimestampObjectInspector) objectInspector).create((Timestamp) object);
     case INTERVAL_YEAR_MONTH:
-      return ((WritableHiveIntervalYearMonthObjectInspector) objectInspector).create(new HiveIntervalYearMonth(0));
+      return ((WritableHiveIntervalYearMonthObjectInspector) objectInspector).create((HiveIntervalYearMonth) object);
     case INTERVAL_DAY_TIME:
-      return ((WritableHiveIntervalDayTimeObjectInspector) objectInspector).create(new HiveIntervalDayTime(0, 0));
+      return ((WritableHiveIntervalDayTimeObjectInspector) objectInspector).create((HiveIntervalDayTime) object);
     case DECIMAL:
       {
         WritableHiveDecimalObjectInspector writableDecimalObjectInspector =
                 new WritableHiveDecimalObjectInspector((DecimalTypeInfo) primitiveTypeInfo);
-        return writableDecimalObjectInspector.create(HiveDecimal.ZERO);
+        HiveDecimalWritable result = (HiveDecimalWritable) writableDecimalObjectInspector.create((HiveDecimal) object);
+        return result;
       }
     default:
       throw new Error("Unknown primitive category " + primitiveCategory);
@@ -420,7 +422,7 @@ public class VectorRandomRowSource {
           case CHAR:
             return new HiveChar(result, ((CharTypeInfo) primitiveTypeInfo).getLength());
           case VARCHAR:
-            return new HiveChar(result, ((VarcharTypeInfo) primitiveTypeInfo).getLength());
+            return new HiveVarchar(result, ((VarcharTypeInfo) primitiveTypeInfo).getLength());
           default:
             throw new Error("Unknown primitive category " + primitiveCategory);
           }
@@ -497,13 +499,9 @@ public class VectorRandomRowSource {
         sb.append(RandomTypeUtil.getRandString(r, DECIMAL_CHARS, scale));
       }
 
-      HiveDecimal bd = HiveDecimal.create(sb.toString());
-      if (bd.scale() > bd.precision()) {
-        // Sometimes weird decimals are produced?
-        continue;
-      }
+      HiveDecimal dec = HiveDecimal.create(sb.toString());
 
-      return bd;
+      return dec;
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestDecimalUtil.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestDecimalUtil.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestDecimalUtil.java
index da9ebca..9f4bd9d 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestDecimalUtil.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestDecimalUtil.java
@@ -229,7 +229,6 @@ public class TestDecimalUtil {
 
     HiveDecimal d3 = HiveDecimal.create("0.00000");
     Assert.assertEquals(0, d3.scale());
-    d3.setScale(5);
     DecimalUtil.sign(0, d3, lcv);
     Assert.assertEquals(0, lcv.vector[0]);
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
index e7a044e..c7d9fae 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorTypeCasts.java
@@ -204,6 +204,10 @@ public class TestVectorTypeCasts {
     // test basic case
     VectorizedRowBatch b = getBatchDecimalLong();
     VectorExpression expr = new CastDecimalToLong(0, 1);
+
+    // With the integer type range checking, we need to know the Hive data type.
+    expr.setOutputType("bigint");
+
     expr.evaluate(b);
     LongColumnVector r = (LongColumnVector) b.cols[1];
     assertEquals(1, r.vector[0]);
@@ -265,9 +269,9 @@ public class TestVectorTypeCasts {
 
     b.size = 3;
 
-    dv.vector[0].set(HiveDecimal.create("1.1").setScale(scale));
-    dv.vector[1].set(HiveDecimal.create("-2.2").setScale(scale));
-    dv.vector[2].set(HiveDecimal.create("9999999999999999.00").setScale(scale));
+    dv.vector[0].set(HiveDecimal.create("1.1"));
+    dv.vector[1].set(HiveDecimal.create("-2.2"));
+    dv.vector[2].set(HiveDecimal.create("9999999999999999.00"));
 
     return b;
   }
@@ -325,9 +329,9 @@ public class TestVectorTypeCasts {
 
     b.size = 3;
 
-    dv.vector[0].set(HiveDecimal.create("1.1").setScale(scale));
-    dv.vector[1].set(HiveDecimal.create("-2.2").setScale(scale));
-    dv.vector[2].set(HiveDecimal.create("9999999999999999.00").setScale(scale));
+    dv.vector[0].set(HiveDecimal.create("1.1"));
+    dv.vector[1].set(HiveDecimal.create("-2.2"));
+    dv.vector[2].set(HiveDecimal.create("9999999999999999.00"));
 
     return b;
   }
@@ -366,9 +370,9 @@ public class TestVectorTypeCasts {
 
     b.size = 3;
 
-    dv.vector[0].set(HiveDecimal.create("1.1").setScale(scale));
-    dv.vector[1].set(HiveDecimal.create("-2.2").setScale(scale));
-    dv.vector[2].set(HiveDecimal.create("9999999999999999.00").setScale(scale));
+    dv.vector[0].set(HiveDecimal.create("1.1"));
+    dv.vector[1].set(HiveDecimal.create("-2.2"));
+    dv.vector[2].set(HiveDecimal.create("9999999999999999.00"));
 
     return b;
   }
@@ -399,9 +403,9 @@ public class TestVectorTypeCasts {
 
     b.size = 3;
 
-    dv.vector[0].set(HiveDecimal.create("1.111111111").setScale(scale));
-    dv.vector[1].set(HiveDecimal.create("-2.222222222").setScale(scale));
-    dv.vector[2].set(HiveDecimal.create("31536000.999999999").setScale(scale));
+    dv.vector[0].set(HiveDecimal.create("1.111111111"));
+    dv.vector[1].set(HiveDecimal.create("-2.222222222"));
+    dv.vector[2].set(HiveDecimal.create("31536000.999999999"));
 
     return b;
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/CheckFastRowHashMap.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/CheckFastRowHashMap.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/CheckFastRowHashMap.java
index bc7a658..638ccc5 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/CheckFastRowHashMap.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/CheckFastRowHashMap.java
@@ -166,7 +166,9 @@ public class CheckFastRowHashMap extends CheckFastHashTable {
         }
       } else {
         if (thrown) {
-          TestCase.fail("Not expecting an exception to be thrown for the non-clipped case...");
+          TestCase.fail("Not expecting an exception to be thrown for the non-clipped case... " +
+              " exception message " + debugExceptionMessage +
+              " stack trace " + getStackTraceAsSingleLine(debugStackTrace));
         }
         TestCase.assertTrue(lazyBinaryDeserializeRead.isEndOfInputReached());
       }
@@ -382,4 +384,27 @@ public class CheckFastRowHashMap extends CheckFastHashTable {
       }
     }
   }
+
+  static int STACK_LENGTH_LIMIT = 20;
+  public static String getStackTraceAsSingleLine(StackTraceElement[] stackTrace) {
+    StringBuilder sb = new StringBuilder();
+    sb.append("Stack trace: ");
+    int length = stackTrace.length;
+    boolean isTruncated = false;
+    if (length > STACK_LENGTH_LIMIT) {
+      length = STACK_LENGTH_LIMIT;
+      isTruncated = true;
+    }
+    for (int i = 0; i < length; i++) {
+      if (i > 0) {
+        sb.append(", ");
+      }
+      sb.append(stackTrace[i]);
+    }
+    if (isTruncated) {
+      sb.append(", ...");
+    }
+
+    return sb.toString();
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VerifyFastRow.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VerifyFastRow.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VerifyFastRow.java
index 239db73..91b3ead 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VerifyFastRow.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VerifyFastRow.java
@@ -67,7 +67,10 @@ public class VerifyFastRow {
     isNull = !deserializeRead.readNextField();
     if (isNull) {
       if (writable != null) {
-        TestCase.fail("Field reports null but object is not null");
+        TestCase.fail(
+            deserializeRead.getClass().getName() +
+            " field reports null but object is not null " +
+            "(class " + writable.getClass().getName() + ", " + writable.toString() + ")");
       }
       return;
     } else if (writable == null) {

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java
index 84717b1..1f50282 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java
@@ -151,7 +151,7 @@ public class VectorizedRowGroupGenUtil {
 
     HiveDecimalWritable repeatingValue = new HiveDecimalWritable();
     do{
-      repeatingValue.set(HiveDecimal.create(((Double) rand.nextDouble()).toString()).setScale((short)typeInfo.scale()));
+      repeatingValue.set(HiveDecimal.create(((Double) rand.nextDouble()).toString()).setScale((short)typeInfo.scale(), HiveDecimal.ROUND_HALF_UP));
     }while(repeatingValue.getHiveDecimal().doubleValue() == 0);
 
     int nullFrequency = generateNullFrequency(rand);
@@ -159,14 +159,14 @@ public class VectorizedRowGroupGenUtil {
     for(int i = 0; i < size; i++) {
       if(nulls && (repeating || i % nullFrequency == 0)) {
         dcv.isNull[i] = true;
-        dcv.vector[i] = null;//Decimal128.ONE;
+        dcv.vector[i] = null;
 
       }else {
         dcv.isNull[i] = false;
         if (repeating) {
           dcv.vector[i].set(repeatingValue);
         } else {
-          dcv.vector[i].set(HiveDecimal.create(((Double) rand.nextDouble()).toString()).setScale((short) typeInfo.scale()));
+          dcv.vector[i].set(HiveDecimal.create(((Double) rand.nextDouble()).toString()).setScale((short) typeInfo.scale(), HiveDecimal.ROUND_HALF_UP));
         }
 
         if(dcv.vector[i].getHiveDecimal().doubleValue() == 0) {

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/decimal_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/decimal_2.q.out b/ql/src/test/results/clientpositive/decimal_2.q.out
index 934590c..f3168f6 100644
--- a/ql/src/test/results/clientpositive/decimal_2.q.out
+++ b/ql/src/test/results/clientpositive/decimal_2.q.out
@@ -129,7 +129,7 @@ POSTHOOK: query: select cast(t as tinyint) from decimal_2
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2
 #### A masked pattern was here ####
-13
+NULL
 PREHOOK: query: select cast(t as smallint) from decimal_2
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_2
@@ -138,7 +138,7 @@ POSTHOOK: query: select cast(t as smallint) from decimal_2
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2
 #### A masked pattern was here ####
--3827
+NULL
 PREHOOK: query: select cast(t as int) from decimal_2
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_2

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/schema_evol_orc_nonvec_part_all_primitive.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/schema_evol_orc_nonvec_part_all_primitive.q.out b/ql/src/test/results/clientpositive/llap/schema_evol_orc_nonvec_part_all_primitive.q.out
index 7831114..e0834bc 100644
--- a/ql/src/test/results/clientpositive/llap/schema_evol_orc_nonvec_part_all_primitive.q.out
+++ b/ql/src/test/results/clientpositive/llap/schema_evol_orc_nonvec_part_all_primitive.q.out
@@ -309,10 +309,10 @@ POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint
 POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint@part=1
 #### A masked pattern was here ####
 insert_num	part	c1	c2	c3	c4	c5	c6	c7	c8	c9	c10	c11	c12	c13	c14	c15	c16	c17	c18	c19	c20	c21	c22	c23	c24	c25	c26	c27	c28	c29	c30	c31	c32	c33	c34	c35	c36	c37	c38	c39	c40	c41	c42	c43	c44	c45	c46	c47	c48	c49	c50	c51	c52	c53	b
-101	1	true	NULL	true	NULL	NULL	NULL	NULL	NULL	true	1	NULL	NULL	NULL	NULL	NULL	NULL	-128	-128	-128	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	NULL	1	-128	NULL	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	134416490068	original
+101	1	true	NULL	true	NULL	NULL	NULL	true	NULL	true	1	NULL	NULL	NULL	NULL	NULL	NULL	-128	-128	-128	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	NULL	1	-128	NULL	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	134416490068	original
 101	1	true	true	true	true	true	true	true	true	true	-128	-128	-128	-128	-128	-128	-128	-128	-128	-128	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 102	1	false	false	false	false	false	false	false	false	false	127	127	127	127	127	127	127	127	127	127	127	32767	32767	32767	32767	32767	32767	32767	32767	32767	32767	32767	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	new
-102	1	true	true	true	true	NULL	NULL	NULL	NULL	true	0	NULL	NULL	NULL	NULL	NULL	NULL	127	127	127	NULL	0	127	NULL	NULL	NULL	NULL	NULL	32767	32767	32767	NULL	0	127	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	NULL	0	127	32767	2147483647	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
+102	1	true	true	true	true	NULL	NULL	true	NULL	true	0	NULL	NULL	NULL	NULL	NULL	NULL	127	127	127	NULL	0	127	NULL	NULL	NULL	NULL	NULL	32767	32767	32767	NULL	0	127	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	NULL	0	127	32767	2147483647	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	original
 104	1	true	true	true	true	true	true	true	NULL	true	1	NULL	NULL	NULL	-100	30	NULL	23	23	23	NULL	1	23	NULL	NULL	-100	30	NULL	834	834	834	NULL	1	23	834	NULL	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/schema_evol_orc_vec_part_all_primitive.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/schema_evol_orc_vec_part_all_primitive.q.out b/ql/src/test/results/clientpositive/llap/schema_evol_orc_vec_part_all_primitive.q.out
index d240f82..e1496bb 100644
--- a/ql/src/test/results/clientpositive/llap/schema_evol_orc_vec_part_all_primitive.q.out
+++ b/ql/src/test/results/clientpositive/llap/schema_evol_orc_vec_part_all_primitive.q.out
@@ -309,10 +309,10 @@ POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint
 POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint@part=1
 #### A masked pattern was here ####
 insert_num	part	c1	c2	c3	c4	c5	c6	c7	c8	c9	c10	c11	c12	c13	c14	c15	c16	c17	c18	c19	c20	c21	c22	c23	c24	c25	c26	c27	c28	c29	c30	c31	c32	c33	c34	c35	c36	c37	c38	c39	c40	c41	c42	c43	c44	c45	c46	c47	c48	c49	c50	c51	c52	c53	b
-101	1	true	NULL	true	NULL	NULL	NULL	NULL	NULL	true	1	NULL	NULL	NULL	NULL	NULL	NULL	-128	-128	-128	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	NULL	1	-128	NULL	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	134416490068	original
+101	1	true	NULL	true	NULL	NULL	NULL	true	NULL	true	1	NULL	NULL	NULL	NULL	NULL	NULL	-128	-128	-128	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	1	-128	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	NULL	1	-128	NULL	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	134416490068	original
 101	1	true	true	true	true	true	true	true	true	true	-128	-128	-128	-128	-128	-128	-128	-128	-128	-128	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 102	1	false	false	false	false	false	false	false	false	false	127	127	127	127	127	127	127	127	127	127	127	32767	32767	32767	32767	32767	32767	32767	32767	32767	32767	32767	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	new
-102	1	true	true	true	true	NULL	NULL	NULL	NULL	true	0	NULL	NULL	NULL	NULL	NULL	NULL	127	127	127	NULL	0	127	NULL	NULL	NULL	NULL	NULL	32767	32767	32767	NULL	0	127	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	NULL	0	127	32767	2147483647	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
+102	1	true	true	true	true	NULL	NULL	true	NULL	true	0	NULL	NULL	NULL	NULL	NULL	NULL	127	127	127	NULL	0	127	NULL	NULL	NULL	NULL	NULL	32767	32767	32767	NULL	0	127	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	NULL	0	127	32767	2147483647	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	original
 104	1	true	true	true	true	true	true	true	NULL	true	1	NULL	NULL	NULL	-100	30	NULL	23	23	23	NULL	1	23	NULL	NULL	-100	30	NULL	834	834	834	NULL	1	23	834	NULL	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/schema_evol_text_nonvec_part_all_primitive.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/schema_evol_text_nonvec_part_all_primitive.q.out b/ql/src/test/results/clientpositive/llap/schema_evol_text_nonvec_part_all_primitive.q.out
index b07986e..2a2e48a 100644
--- a/ql/src/test/results/clientpositive/llap/schema_evol_text_nonvec_part_all_primitive.q.out
+++ b/ql/src/test/results/clientpositive/llap/schema_evol_text_nonvec_part_all_primitive.q.out
@@ -310,15 +310,15 @@ POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint@part=1
 #### A masked pattern was here ####
 insert_num	part	c1	c2	c3	c4	c5	c6	c7	c8	c9	c10	c11	c12	c13	c14	c15	c16	c17	c18	c19	c20	c21	c22	c23	c24	c25	c26	c27	c28	c29	c30	c31	c32	c33	c34	c35	c36	c37	c38	c39	c40	c41	c42	c43	c44	c45	c46	c47	c48	c49	c50	c51	c52	c53	b
 101	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	-128	-128	-128	-128	-128	-128	-128	-128	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
-101	1	true	NULL	true	NULL	true	true	true	true	true	1	NULL	0	NULL	-1	-1	-1	-128	-128	-128	84	1	-128	0	NULL	-1	-1	-1	NULL	NULL	NULL	-8620	1	-128	NULL	NULL	2147483647	2147483647	1661992959	-2147483648	-2147483648	-2147483648	1272503892	1	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	7766279631452241919	NULL	NULL	NULL	134416490068	original
+101	1	true	NULL	true	NULL	true	true	true	true	true	1	NULL	0	NULL	-1	-1	NULL	-128	-128	-128	84	1	-128	0	NULL	-1	-1	NULL	NULL	NULL	NULL	-8620	1	-128	NULL	NULL	2147483647	2147483647	NULL	-2147483648	-2147483648	-2147483648	1272503892	1	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	NULL	NULL	NULL	NULL	134416490068	original
 102	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	127	127	127	127	127	127	127	127	127	NULL	NULL	NULL	32767	32767	32767	32767	32767	32767	32767	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	NULL	NULL	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	NULL	new
-102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	1	127	127	127	-38	0	127	-1	-1	0	0	1	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	-1661992959	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	-7766279631452241919	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
+102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	NULL	127	127	127	-38	0	127	-1	-1	0	0	NULL	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	NULL	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	false	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	original
 104	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	23	23	23	23	23	23	23	23	23	NULL	NULL	NULL	834	834	834	834	834	834	834	834	NULL	NULL	NULL	NULL	203332	203332	203332	203332	203332	203332	203332	NULL	NULL	NULL	NULL	NULL	888888847499264	888888857923222	888888857923222	888888857923222	888888857923222	888888857923222	NULL	new
-104	1	true	true	true	true	true	true	true	true	true	1	66	68	-106	-100	30	-85	23	23	23	86	1	23	6724	3734	-100	30	939	834	834	834	-12970	1	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
+104	1	true	true	true	true	true	true	true	true	true	1	66	68	-106	-100	30	NULL	23	23	23	86	1	23	6724	3734	-100	30	NULL	834	834	834	-12970	1	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
 105	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	-99	-99	-99	-99	-99	-99	-99	-99	-99	NULL	NULL	NULL	-28300	-28300	-28300	-28300	-28300	-28300	-28300	-28300	NULL	NULL	NULL	NULL	-999992	-999992	-999992	-999992	-999992	-999992	-999992	NULL	NULL	NULL	NULL	NULL	-222282153984	-222282153733	-222282153733	-222282153733	-222282153733	-222282153733	NULL	new
-105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	36	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	9764	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
+105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	NULL	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	NULL	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
 PREHOOK: query: drop table part_change_various_various_boolean_to_bigint
 PREHOOK: type: DROPTABLE
 PREHOOK: Input: default@part_change_various_various_boolean_to_bigint

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/schema_evol_text_vec_part_all_primitive.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/schema_evol_text_vec_part_all_primitive.q.out b/ql/src/test/results/clientpositive/llap/schema_evol_text_vec_part_all_primitive.q.out
index fb38687..46da4f0 100644
--- a/ql/src/test/results/clientpositive/llap/schema_evol_text_vec_part_all_primitive.q.out
+++ b/ql/src/test/results/clientpositive/llap/schema_evol_text_vec_part_all_primitive.q.out
@@ -314,15 +314,15 @@ POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint@part=1
 #### A masked pattern was here ####
 insert_num	part	c1	c2	c3	c4	c5	c6	c7	c8	c9	c10	c11	c12	c13	c14	c15	c16	c17	c18	c19	c20	c21	c22	c23	c24	c25	c26	c27	c28	c29	c30	c31	c32	c33	c34	c35	c36	c37	c38	c39	c40	c41	c42	c43	c44	c45	c46	c47	c48	c49	c50	c51	c52	c53	b
 101	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-128	-128	-128	-128	-128	-128	-128	-128	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
-101	1	true	NULL	true	NULL	true	true	true	true	true	NULL	NULL	0	NULL	-1	-1	-1	-128	-128	-128	84	NULL	-128	0	NULL	-1	-1	-1	NULL	NULL	NULL	-8620	NULL	-128	NULL	NULL	2147483647	2147483647	1661992959	-2147483648	-2147483648	-2147483648	1272503892	NULL	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	7766279631452241919	NULL	NULL	NULL	134416490068	original
+101	1	true	NULL	true	NULL	true	true	true	true	true	NULL	NULL	0	NULL	-1	-1	NULL	-128	-128	-128	84	NULL	-128	0	NULL	-1	-1	NULL	NULL	NULL	NULL	-8620	NULL	-128	NULL	NULL	2147483647	2147483647	NULL	-2147483648	-2147483648	-2147483648	1272503892	NULL	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	NULL	NULL	NULL	NULL	134416490068	original
 102	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	127	127	127	127	127	127	127	127	127	NULL	NULL	NULL	32767	32767	32767	32767	32767	32767	32767	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	NULL	NULL	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	NULL	new
-102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	1	127	127	127	-38	0	127	-1	-1	0	0	1	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	-1661992959	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	-7766279631452241919	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
+102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	NULL	127	127	127	-38	0	127	-1	-1	0	0	NULL	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	NULL	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	false	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	original
 104	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	23	23	23	23	23	23	23	23	23	NULL	NULL	NULL	834	834	834	834	834	834	834	834	NULL	NULL	NULL	NULL	203332	203332	203332	203332	203332	203332	203332	NULL	NULL	NULL	NULL	NULL	888888847499264	888888857923222	888888857923222	888888857923222	888888857923222	888888857923222	NULL	new
-104	1	true	true	true	true	true	true	true	true	true	NULL	66	68	-106	-100	30	-85	23	23	23	86	NULL	23	6724	3734	-100	30	939	834	834	834	-12970	NULL	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	NULL	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
+104	1	true	true	true	true	true	true	true	true	true	NULL	66	68	-106	-100	30	NULL	23	23	23	86	NULL	23	6724	3734	-100	30	NULL	834	834	834	-12970	NULL	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	NULL	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
 105	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	-99	-99	-99	-99	-99	-99	-99	-99	-99	NULL	NULL	NULL	-28300	-28300	-28300	-28300	-28300	-28300	-28300	-28300	NULL	NULL	NULL	NULL	-999992	-999992	-999992	-999992	-999992	-999992	-999992	NULL	NULL	NULL	NULL	NULL	-222282153984	-222282153733	-222282153733	-222282153733	-222282153733	-222282153733	NULL	new
-105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	36	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	9764	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
+105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	NULL	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	NULL	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
 PREHOOK: query: drop table part_change_various_various_boolean_to_bigint
 PREHOOK: type: DROPTABLE
 PREHOOK: Input: default@part_change_various_various_boolean_to_bigint

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/schema_evol_text_vecrow_part_all_primitive.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/schema_evol_text_vecrow_part_all_primitive.q.out b/ql/src/test/results/clientpositive/llap/schema_evol_text_vecrow_part_all_primitive.q.out
index 85116e7..41a61a8 100644
--- a/ql/src/test/results/clientpositive/llap/schema_evol_text_vecrow_part_all_primitive.q.out
+++ b/ql/src/test/results/clientpositive/llap/schema_evol_text_vecrow_part_all_primitive.q.out
@@ -314,15 +314,15 @@ POSTHOOK: Input: default@part_change_various_various_boolean_to_bigint@part=1
 #### A masked pattern was here ####
 insert_num	part	c1	c2	c3	c4	c5	c6	c7	c8	c9	c10	c11	c12	c13	c14	c15	c16	c17	c18	c19	c20	c21	c22	c23	c24	c25	c26	c27	c28	c29	c30	c31	c32	c33	c34	c35	c36	c37	c38	c39	c40	c41	c42	c43	c44	c45	c46	c47	c48	c49	c50	c51	c52	c53	b
 101	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	-128	-128	-128	-128	-128	-128	-128	-128	-128	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	-2147483648	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
-101	1	true	NULL	true	NULL	true	true	true	true	true	1	NULL	0	NULL	-1	-1	-1	-128	-128	-128	84	1	-128	0	NULL	-1	-1	-1	NULL	NULL	NULL	-8620	1	-128	NULL	NULL	2147483647	2147483647	1661992959	-2147483648	-2147483648	-2147483648	1272503892	1	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	7766279631452241919	NULL	NULL	NULL	134416490068	original
+101	1	true	NULL	true	NULL	true	true	true	true	true	1	NULL	0	NULL	-1	-1	NULL	-128	-128	-128	84	1	-128	0	NULL	-1	-1	NULL	NULL	NULL	NULL	-8620	1	-128	NULL	NULL	2147483647	2147483647	NULL	-2147483648	-2147483648	-2147483648	1272503892	1	-128	NULL	-2147483648	9223372036854775807	9223372036854775807	NULL	NULL	NULL	NULL	134416490068	original
 102	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	127	127	127	127	127	127	127	127	127	NULL	NULL	NULL	32767	32767	32767	32767	32767	32767	32767	32767	NULL	NULL	NULL	NULL	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	2147483647	NULL	NULL	NULL	NULL	NULL	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	9223372036854775807	NULL	new
-102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	1	127	127	127	-38	0	127	-1	-1	0	0	1	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	-1661992959	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	-7766279631452241919	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
+102	1	true	true	true	true	true	true	true	true	true	0	-1	-1	-1	0	0	NULL	127	127	127	-38	0	127	-1	-1	0	0	NULL	32767	32767	32767	7898	0	127	32767	-1	-2147483648	-2147483648	NULL	2147483647	2147483647	2147483647	1563893466	0	127	32767	2147483647	-9223372036854775808	-9223372036854775808	NULL	9223372036854775807	9223372036854775807	9223372036854775807	126117945050	original
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	new
 103	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	false	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	original
 104	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	23	23	23	23	23	23	23	23	23	NULL	NULL	NULL	834	834	834	834	834	834	834	834	NULL	NULL	NULL	NULL	203332	203332	203332	203332	203332	203332	203332	NULL	NULL	NULL	NULL	NULL	888888847499264	888888857923222	888888857923222	888888857923222	888888857923222	888888857923222	NULL	new
-104	1	true	true	true	true	true	true	true	true	true	1	66	68	-106	-100	30	-85	23	23	23	86	1	23	6724	3734	-100	30	939	834	834	834	-12970	1	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
+104	1	true	true	true	true	true	true	true	true	true	1	66	68	-106	-100	30	NULL	23	23	23	86	1	23	6724	3734	-100	30	NULL	834	834	834	-12970	1	23	834	-1868624234	-100	30	66475	203332	203332	203332	270912854	1	23	834	203332	-100	30	66475	888888857923222	888888857923222	888888857923222	270912854	original
 105	1	NULL	NULL	NULL	NULL	NULL	NULL	NULL	true	NULL	NULL	-99	-99	-99	-99	-99	-99	-99	-99	-99	NULL	NULL	NULL	-28300	-28300	-28300	-28300	-28300	-28300	-28300	-28300	NULL	NULL	NULL	NULL	-999992	-999992	-999992	-999992	-999992	-999992	-999992	NULL	NULL	NULL	NULL	NULL	-222282153984	-222282153733	-222282153733	-222282153733	-222282153733	-222282153733	NULL	new
-105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	36	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	9764	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
+105	1	true	true	true	true	NULL	true	true	true	true	0	116	-56	-5	NULL	34	NULL	-99	-99	-99	-41	0	-99	-16952	-32517	NULL	-19422	NULL	-28300	-28300	-28300	-16681	0	-99	-28300	1056145659	NULL	46114	9250340	-999992	-999992	-999992	663207639	0	-99	-28300	-999992	NULL	46114	9250340	-222282153733	-222282153733	-222282153733	663207639	original
 PREHOOK: query: drop table part_change_various_various_boolean_to_bigint
 PREHOOK: type: DROPTABLE
 PREHOOK: Input: default@part_change_various_various_boolean_to_bigint

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/vector_decimal_2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_2.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_2.q.out
index ef1e561..db5e183 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_2.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_2.q.out
@@ -661,7 +661,7 @@ POSTHOOK: query: select cast(t as tinyint) from decimal_2 order by t
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2
 #### A masked pattern was here ####
-13
+NULL
 PREHOOK: query: explain
 select cast(t as smallint) from decimal_2 order by t
 PREHOOK: type: QUERY
@@ -724,7 +724,7 @@ POSTHOOK: query: select cast(t as smallint) from decimal_2 order by t
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_2
 #### A masked pattern was here ####
--3827
+NULL
 PREHOOK: query: explain
 select cast(t as int) from decimal_2 order by t
 PREHOOK: type: QUERY

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/llap/vector_decimal_expressions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_expressions.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_expressions.q.out
index cf264e8..b37e30b 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_expressions.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_expressions.q.out
@@ -90,13 +90,13 @@ LIMIT 10
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_test
 #### A masked pattern was here ####
-1836.44199584197700	-1166.02723492725400	0.8372697814834	245972.55810810255804469	5.6189189189	835	1000	-24	835	true	1000.823076923077	835.6189	1000.823076923077	1969-12-31 16:13:55.618918918
-1856.13222453224620	-1178.52931392929240	0.8372449787014	251275.44324324968747899	4.5783783784	844	1011	-13	844	true	1011.5538461538462	844.57837	1011.5538461538462	1969-12-31 16:14:04.578378378
-1858.75758835761550	-1180.19625779623100	0.8372417113669	251986.76756757564861519	5.7729729730	845	1012	-12	845	true	1012.9846153846155	845.77295	1012.9846153846155	1969-12-31 16:14:05.772972973
-1862.69563409566930	-1182.69667359663860	0.8372368276345	253055.63918919969667286	7.5648648649	847	1015	-9	847	true	1015.1307692307693	847.5649	1015.1307692307693	1969-12-31 16:14:07.564864864
-1883.69854469852330	-1196.03222453224660	0.8372111259286	258794.49324323677116559	7.1216216216	857	1026	2	857	true	1026.5769230769233	857.12164	1026.5769230769233	1969-12-31 16:14:17.121621621
-1886.32390852389240	-1197.69916839918480	0.8372079534582	259516.37432431944456816	8.3162162162	858	1028	4	858	true	1028.0076923076924	858.3162	1028.0076923076924	1969-12-31 16:14:18.316216216
-1887.63659043657700	-1198.53264033265400	0.8372063705322	259877.69189188782259834	8.9135135135	858	1028	4	858	true	1028.723076923077	858.9135	1028.723076923077	1969-12-31 16:14:18.913513513
-1895.51268191268460	-1203.53347193346920	0.8371969190171	262050.87567567649292835	2.4972972973	862	1033	9	862	true	1033.0153846153846	862.4973	1033.0153846153846	1969-12-31 16:14:22.497297297
-1909.95218295221550	-1212.70166320163100	0.8371797936946	266058.54729730725574014	9.0675675676	869	1040	16	869	true	1040.8846153846155	869.06757	1040.8846153846155	1969-12-31 16:14:29.067567567
-1913.89022869026920	-1215.20207900203840	0.8371751679996	267156.82702703945592392	0.8594594595	870	1043	19	870	true	1043.0307692307692	870.85944	1043.0307692307692	1969-12-31 16:14:30.859459459
+1836.44199584197700	-1166.02723492725400	0.8372697814834	245972.55810810255804469	5.6189189189	835	1000	NULL	835	true	1000.823076923077	835.6189	1000.823076923077	1969-12-31 16:13:55.618918918
+1856.13222453224620	-1178.52931392929240	0.8372449787014	251275.44324324968747899	4.5783783784	844	1011	NULL	844	true	1011.5538461538462	844.57837	1011.5538461538462	1969-12-31 16:14:04.578378378
+1858.75758835761550	-1180.19625779623100	0.8372417113669	251986.76756757564861519	5.7729729730	845	1012	NULL	845	true	1012.9846153846155	845.77295	1012.9846153846155	1969-12-31 16:14:05.772972973
+1862.69563409566930	-1182.69667359663860	0.8372368276345	253055.63918919969667286	7.5648648649	847	1015	NULL	847	true	1015.1307692307693	847.5649	1015.1307692307693	1969-12-31 16:14:07.564864864
+1883.69854469852330	-1196.03222453224660	0.8372111259286	258794.49324323677116559	7.1216216216	857	1026	NULL	857	true	1026.5769230769233	857.12164	1026.5769230769233	1969-12-31 16:14:17.121621621
+1886.32390852389240	-1197.69916839918480	0.8372079534582	259516.37432431944456816	8.3162162162	858	1028	NULL	858	true	1028.0076923076924	858.3162	1028.0076923076924	1969-12-31 16:14:18.316216216
+1887.63659043657700	-1198.53264033265400	0.8372063705322	259877.69189188782259834	8.9135135135	858	1028	NULL	858	true	1028.723076923077	858.9135	1028.723076923077	1969-12-31 16:14:18.913513513
+1895.51268191268460	-1203.53347193346920	0.8371969190171	262050.87567567649292835	2.4972972973	862	1033	NULL	862	true	1033.0153846153846	862.4973	1033.0153846153846	1969-12-31 16:14:22.497297297
+1909.95218295221550	-1212.70166320163100	0.8371797936946	266058.54729730725574014	9.0675675676	869	1040	NULL	869	true	1040.8846153846155	869.06757	1040.8846153846155	1969-12-31 16:14:29.067567567
+1913.89022869026920	-1215.20207900203840	0.8371751679996	267156.82702703945592392	0.8594594595	870	1043	NULL	870	true	1043.0307692307692	870.85944	1043.0307692307692	1969-12-31 16:14:30.859459459

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out b/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out
index 895116d..316dabc 100644
--- a/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out
+++ b/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out
@@ -81,13 +81,13 @@ LIMIT 10
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_test
 #### A masked pattern was here ####
-1836.44199584197700	-1166.02723492725400	0.8372697814834	245972.55810810255804469	5.6189189189	835	1000	-24	835	true	1000.823076923077	835.6189	1000.823076923077	1969-12-31 16:13:55.618918918
-1856.13222453224620	-1178.52931392929240	0.8372449787014	251275.44324324968747899	4.5783783784	844	1011	-13	844	true	1011.5538461538462	844.57837	1011.5538461538462	1969-12-31 16:14:04.578378378
-1858.75758835761550	-1180.19625779623100	0.8372417113669	251986.76756757564861519	5.7729729730	845	1012	-12	845	true	1012.9846153846155	845.77295	1012.9846153846155	1969-12-31 16:14:05.772972973
-1862.69563409566930	-1182.69667359663860	0.8372368276345	253055.63918919969667286	7.5648648649	847	1015	-9	847	true	1015.1307692307693	847.5649	1015.1307692307693	1969-12-31 16:14:07.564864864
-1883.69854469852330	-1196.03222453224660	0.8372111259286	258794.49324323677116559	7.1216216216	857	1026	2	857	true	1026.5769230769233	857.12164	1026.5769230769233	1969-12-31 16:14:17.121621621
-1886.32390852389240	-1197.69916839918480	0.8372079534582	259516.37432431944456816	8.3162162162	858	1028	4	858	true	1028.0076923076924	858.3162	1028.0076923076924	1969-12-31 16:14:18.316216216
-1887.63659043657700	-1198.53264033265400	0.8372063705322	259877.69189188782259834	8.9135135135	858	1028	4	858	true	1028.723076923077	858.9135	1028.723076923077	1969-12-31 16:14:18.913513513
-1895.51268191268460	-1203.53347193346920	0.8371969190171	262050.87567567649292835	2.4972972973	862	1033	9	862	true	1033.0153846153846	862.4973	1033.0153846153846	1969-12-31 16:14:22.497297297
-1909.95218295221550	-1212.70166320163100	0.8371797936946	266058.54729730725574014	9.0675675676	869	1040	16	869	true	1040.8846153846155	869.06757	1040.8846153846155	1969-12-31 16:14:29.067567567
-1913.89022869026920	-1215.20207900203840	0.8371751679996	267156.82702703945592392	0.8594594595	870	1043	19	870	true	1043.0307692307692	870.85944	1043.0307692307692	1969-12-31 16:14:30.859459459
+1836.44199584197700	-1166.02723492725400	0.8372697814834	245972.55810810255804469	5.6189189189	835	1000	NULL	835	true	1000.823076923077	835.6189	1000.823076923077	1969-12-31 16:13:55.618918918
+1856.13222453224620	-1178.52931392929240	0.8372449787014	251275.44324324968747899	4.5783783784	844	1011	NULL	844	true	1011.5538461538462	844.57837	1011.5538461538462	1969-12-31 16:14:04.578378378
+1858.75758835761550	-1180.19625779623100	0.8372417113669	251986.76756757564861519	5.7729729730	845	1012	NULL	845	true	1012.9846153846155	845.77295	1012.9846153846155	1969-12-31 16:14:05.772972973
+1862.69563409566930	-1182.69667359663860	0.8372368276345	253055.63918919969667286	7.5648648649	847	1015	NULL	847	true	1015.1307692307693	847.5649	1015.1307692307693	1969-12-31 16:14:07.564864864
+1883.69854469852330	-1196.03222453224660	0.8372111259286	258794.49324323677116559	7.1216216216	857	1026	NULL	857	true	1026.5769230769233	857.12164	1026.5769230769233	1969-12-31 16:14:17.121621621
+1886.32390852389240	-1197.69916839918480	0.8372079534582	259516.37432431944456816	8.3162162162	858	1028	NULL	858	true	1028.0076923076924	858.3162	1028.0076923076924	1969-12-31 16:14:18.316216216
+1887.63659043657700	-1198.53264033265400	0.8372063705322	259877.69189188782259834	8.9135135135	858	1028	NULL	858	true	1028.723076923077	858.9135	1028.723076923077	1969-12-31 16:14:18.913513513
+1895.51268191268460	-1203.53347193346920	0.8371969190171	262050.87567567649292835	2.4972972973	862	1033	NULL	862	true	1033.0153846153846	862.4973	1033.0153846153846	1969-12-31 16:14:22.497297297
+1909.95218295221550	-1212.70166320163100	0.8371797936946	266058.54729730725574014	9.0675675676	869	1040	NULL	869	true	1040.8846153846155	869.06757	1040.8846153846155	1969-12-31 16:14:29.067567567
+1913.89022869026920	-1215.20207900203840	0.8371751679996	267156.82702703945592392	0.8594594595	870	1043	NULL	870	true	1043.0307692307692	870.85944	1043.0307692307692	1969-12-31 16:14:30.859459459

http://git-wip-us.apache.org/repos/asf/hive/blob/4ba713cc/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java
----------------------------------------------------------------------
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java
index 3a539b2..b6b23c2 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java
@@ -241,8 +241,9 @@ public class AvroSerdeUtils {
       return null;
     }
 
-    dec = dec.setScale(scale);
-    return AvroSerdeUtils.getBufferFromBytes(dec.unscaledValue().toByteArray());
+    // NOTE: Previously, we did OldHiveDecimal.setScale(scale), called OldHiveDecimal
+    //       unscaledValue().toByteArray().
+    return AvroSerdeUtils.getBufferFromBytes(dec.bigIntegerBytesScaled(scale));
   }
 
   public static byte[] getBytesFromByteBuffer(ByteBuffer byteBuffer) {