diff --git a/storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/DecimalColumnVector.java b/storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/DecimalColumnVector.java index e074fb9173..9375926f11 100644 --- a/storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/DecimalColumnVector.java +++ b/storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/DecimalColumnVector.java @@ -127,9 +127,22 @@ public void setElement(int outputElementNum, int inputElementNum, ColumnVector i } if (inputColVector.noNulls || !inputColVector.isNull[inputElementNum]) { - vector[outputElementNum].set( - ((DecimalColumnVector) inputColVector).vector[inputElementNum], - precision, scale); + if (inputColVector instanceof DecimalColumnVector) { + vector[outputElementNum].set( + ((DecimalColumnVector) inputColVector).vector[inputElementNum], + precision, scale); + } else if (inputColVector instanceof LongColumnVector) { + vector[outputElementNum].set( + HiveDecimal.create (((LongColumnVector) inputColVector).vector[inputElementNum]), + precision, scale); + } else if (inputColVector instanceof DoubleColumnVector) { + vector[outputElementNum].set( + HiveDecimal.create (((DoubleColumnVector) inputColVector).vector[inputElementNum]), + precision, scale); + } else { + throw new RuntimeException("Can not convert " + inputColVector.type + " to HiveDecimal"); + } + if (!vector[outputElementNum].isSet()) { // In effect, the input is NULL because of out-of-range precision/scale.