You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2020/03/10 19:18:52 UTC

[hive] branch master updated: HIVE-22978: Fix decimal precision and scale inference for aggregate rewriting in Calcite (Jesus Camacho Rodriguez, reviewed by Vineet Garg)

This is an automated email from the ASF dual-hosted git repository.

jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 6539e20  HIVE-22978: Fix decimal precision and scale inference for aggregate rewriting in Calcite (Jesus Camacho Rodriguez, reviewed by Vineet Garg)
6539e20 is described below

commit 6539e209f98529eccefa5b8a061efdb324241ada
Author: Jesus Camacho Rodriguez <jc...@apache.org>
AuthorDate: Wed Mar 4 18:33:45 2020 -0800

    HIVE-22978: Fix decimal precision and scale inference for aggregate rewriting in Calcite (Jesus Camacho Rodriguez, reviewed by Vineet Garg)
    
    Close apache/hive#938
---
 .../hive/jdbc/TestJdbcGenericUDTFGetSplits.java    |  4 +-
 .../ql/optimizer/calcite/HiveTypeSystemImpl.java   | 39 ++++++++-
 .../rules/HiveAggregateReduceFunctionsRule.java    | 19 +++--
 .../results/clientpositive/decimal_precision.q.out |  4 +-
 .../test/results/clientpositive/decimal_udf.q.out  | 40 +++++-----
 .../llap/external_jdbc_table_perf.q.out            | 10 +--
 .../clientpositive/llap/subquery_scalar.q.out      |  4 +-
 .../llap/vector_decimal_aggregate.q.out            | 44 +++++------
 .../llap/vector_decimal_precision.q.out            | 16 ++--
 .../clientpositive/llap/vector_decimal_udf.q.out   | 92 +++++++++++-----------
 .../llap/vector_groupby_grouping_sets3_dec.q.out   | 82 +++++++++----------
 .../results/clientpositive/perf/spark/query1.q.out |  6 +-
 .../clientpositive/perf/spark/query13.q.out        |  2 +-
 .../clientpositive/perf/spark/query18.q.out        |  6 +-
 .../clientpositive/perf/spark/query24.q.out        |  4 +-
 .../clientpositive/perf/spark/query26.q.out        |  6 +-
 .../clientpositive/perf/spark/query27.q.out        |  6 +-
 .../clientpositive/perf/spark/query28.q.out        | 14 ++--
 .../clientpositive/perf/spark/query30.q.out        |  6 +-
 .../clientpositive/perf/spark/query32.q.out        |  4 +-
 .../clientpositive/perf/spark/query44.q.out        | 36 ++++-----
 .../results/clientpositive/perf/spark/query6.q.out |  4 +-
 .../clientpositive/perf/spark/query65.q.out        |  6 +-
 .../results/clientpositive/perf/spark/query7.q.out |  6 +-
 .../clientpositive/perf/spark/query81.q.out        |  6 +-
 .../clientpositive/perf/spark/query85.q.out        |  6 +-
 .../results/clientpositive/perf/spark/query9.q.out | 22 +++---
 .../clientpositive/perf/spark/query92.q.out        |  4 +-
 .../clientpositive/perf/tez/cbo_ext_query1.q.out   | 10 +--
 .../clientpositive/perf/tez/cbo_query1.q.out       |  4 +-
 .../clientpositive/perf/tez/cbo_query13.q.out      |  2 +-
 .../clientpositive/perf/tez/cbo_query14.q.out      | 12 +--
 .../clientpositive/perf/tez/cbo_query18.q.out      |  2 +-
 .../clientpositive/perf/tez/cbo_query24.q.out      |  4 +-
 .../clientpositive/perf/tez/cbo_query26.q.out      |  2 +-
 .../clientpositive/perf/tez/cbo_query27.q.out      |  2 +-
 .../clientpositive/perf/tez/cbo_query28.q.out      | 12 +--
 .../clientpositive/perf/tez/cbo_query30.q.out      |  4 +-
 .../clientpositive/perf/tez/cbo_query32.q.out      |  4 +-
 .../clientpositive/perf/tez/cbo_query6.q.out       |  4 +-
 .../clientpositive/perf/tez/cbo_query65.q.out      |  4 +-
 .../clientpositive/perf/tez/cbo_query7.q.out       |  2 +-
 .../clientpositive/perf/tez/cbo_query81.q.out      |  4 +-
 .../clientpositive/perf/tez/cbo_query85.q.out      |  2 +-
 .../clientpositive/perf/tez/cbo_query9.q.out       | 20 ++---
 .../clientpositive/perf/tez/cbo_query92.q.out      |  4 +-
 .../perf/tez/constraints/cbo_ext_query1.q.out      | 12 +--
 .../perf/tez/constraints/cbo_query1.q.out          |  4 +-
 .../perf/tez/constraints/cbo_query13.q.out         |  2 +-
 .../perf/tez/constraints/cbo_query14.q.out         | 12 +--
 .../perf/tez/constraints/cbo_query18.q.out         |  2 +-
 .../perf/tez/constraints/cbo_query24.q.out         |  4 +-
 .../perf/tez/constraints/cbo_query26.q.out         |  2 +-
 .../perf/tez/constraints/cbo_query27.q.out         |  2 +-
 .../perf/tez/constraints/cbo_query28.q.out         | 12 +--
 .../perf/tez/constraints/cbo_query30.q.out         |  4 +-
 .../perf/tez/constraints/cbo_query32.q.out         |  4 +-
 .../perf/tez/constraints/cbo_query6.q.out          |  4 +-
 .../perf/tez/constraints/cbo_query65.q.out         |  4 +-
 .../perf/tez/constraints/cbo_query7.q.out          |  2 +-
 .../perf/tez/constraints/cbo_query81.q.out         |  4 +-
 .../perf/tez/constraints/cbo_query85.q.out         |  2 +-
 .../perf/tez/constraints/cbo_query9.q.out          | 20 ++---
 .../perf/tez/constraints/cbo_query92.q.out         |  4 +-
 .../perf/tez/constraints/mv_query44.q.out          |  4 +-
 .../perf/tez/constraints/query1.q.out              |  2 +-
 .../perf/tez/constraints/query14.q.out             |  6 +-
 .../perf/tez/constraints/query1b.q.out             |  6 +-
 .../perf/tez/constraints/query24.q.out             |  2 +-
 .../perf/tez/constraints/query30.q.out             |  2 +-
 .../perf/tez/constraints/query32.q.out             |  2 +-
 .../perf/tez/constraints/query44.q.out             |  4 +-
 .../perf/tez/constraints/query6.q.out              |  2 +-
 .../perf/tez/constraints/query65.q.out             |  2 +-
 .../perf/tez/constraints/query81.q.out             |  2 +-
 .../perf/tez/constraints/query85.q.out             |  2 +-
 .../perf/tez/constraints/query92.q.out             |  2 +-
 .../results/clientpositive/perf/tez/query1.q.out   |  2 +-
 .../results/clientpositive/perf/tez/query14.q.out  |  6 +-
 .../results/clientpositive/perf/tez/query1b.q.out  |  6 +-
 .../results/clientpositive/perf/tez/query24.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query30.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query32.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query44.q.out  |  4 +-
 .../results/clientpositive/perf/tez/query6.q.out   |  2 +-
 .../results/clientpositive/perf/tez/query65.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query81.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query85.q.out  |  2 +-
 .../results/clientpositive/perf/tez/query92.q.out  |  2 +-
 .../clientpositive/spark/subquery_scalar.q.out     |  4 +-
 .../spark/vector_decimal_aggregate.q.out           | 44 +++++------
 .../clientpositive/vector_decimal_aggregate.q.out  | 38 ++++-----
 .../clientpositive/vector_decimal_precision.q.out  |  8 +-
 93 files changed, 451 insertions(+), 411 deletions(-)

diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java
index d79973e..defbe78 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcGenericUDTFGetSplits.java
@@ -71,8 +71,8 @@ public class TestJdbcGenericUDTFGetSplits extends AbstractTestJdbcGenericUDTFGet
       assertNotNull(schemaSplit);
       FieldDesc fieldDesc = schemaSplit.getSchema().getColumns().get(0);
       DecimalTypeInfo type = (DecimalTypeInfo) fieldDesc.getTypeInfo();
-      assertEquals(38, type.getPrecision());
-      assertEquals(24, type.scale());
+      assertEquals(12, type.getPrecision());
+      assertEquals(8, type.scale());
 
       LlapBaseInputFormat.close(handleId);
     }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveTypeSystemImpl.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveTypeSystemImpl.java
index e83ffe1..4a5c9cc 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveTypeSystemImpl.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveTypeSystemImpl.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.hive.ql.optimizer.calcite;
 
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rel.type.RelDataTypeSystemImpl;
 import org.apache.calcite.sql.type.SqlTypeName;
 
@@ -37,6 +39,13 @@ public class HiveTypeSystemImpl extends RelDataTypeSystemImpl {
   private static final int MAX_BINARY_PRECISION      = Integer.MAX_VALUE;
   private static final int MAX_TIMESTAMP_PRECISION   = 9;
   private static final int MAX_TIMESTAMP_WITH_LOCAL_TIME_ZONE_PRECISION = 15; // Up to nanos
+  private static final int DEFAULT_TINYINT_PRECISION  = 3;
+  private static final int DEFAULT_SMALLINT_PRECISION = 5;
+  private static final int DEFAULT_INTEGER_PRECISION  = 10;
+  private static final int DEFAULT_BIGINT_PRECISION   = 19;
+  private static final int DEFAULT_FLOAT_PRECISION    = 7;
+  private static final int DEFAULT_DOUBLE_PRECISION   = 15;
+
 
   @Override
   public int getMaxScale(SqlTypeName typeName) {
@@ -93,6 +102,18 @@ public class HiveTypeSystemImpl extends RelDataTypeSystemImpl {
     case INTERVAL_MINUTE_SECOND:
     case INTERVAL_SECOND:
       return SqlTypeName.DEFAULT_INTERVAL_START_PRECISION;
+    case TINYINT:
+      return DEFAULT_TINYINT_PRECISION;
+    case SMALLINT:
+      return DEFAULT_SMALLINT_PRECISION;
+    case INTEGER:
+      return DEFAULT_INTEGER_PRECISION;
+    case BIGINT:
+      return DEFAULT_BIGINT_PRECISION;
+    case FLOAT:
+      return DEFAULT_FLOAT_PRECISION;
+    case DOUBLE:
+      return DEFAULT_DOUBLE_PRECISION;
     default:
       return -1;
     }
@@ -129,7 +150,7 @@ public class HiveTypeSystemImpl extends RelDataTypeSystemImpl {
     case INTERVAL_SECOND:
       return SqlTypeName.MAX_INTERVAL_START_PRECISION;
     default:
-      return -1;
+      return getDefaultPrecision(typeName);
     }
   }
 
@@ -148,4 +169,20 @@ public class HiveTypeSystemImpl extends RelDataTypeSystemImpl {
     return false;
   }
 
+  @Override
+  public RelDataType deriveSumType(RelDataTypeFactory typeFactory,
+      RelDataType argumentType) {
+    switch (argumentType.getSqlTypeName()) {
+      case DECIMAL:
+        // In Hive, SUM aggregate on decimal column will add 10 to compute
+        // the output precision; see
+        // GenericUDAFSum.GenericUDAFSumHiveDecimal#getOutputDecimalTypeInfoForSum
+        return typeFactory.createSqlType(
+            SqlTypeName.DECIMAL,
+            Math.min(MAX_DECIMAL_PRECISION, argumentType.getPrecision() + 10),
+            argumentType.getScale());
+    }
+    return argumentType;
+  }
+
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveAggregateReduceFunctionsRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveAggregateReduceFunctionsRule.java
index 4b7139a..10bfe66 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveAggregateReduceFunctionsRule.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveAggregateReduceFunctionsRule.java
@@ -292,7 +292,7 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
     final RelDataType sum0InputType = typeFactory.createTypeWithNullability(
         getFieldType(oldAggRel.getInput(), iAvgInput), true);
     final RelDataType sumReturnType = getSumReturnType(
-        rexBuilder.getTypeFactory(), sum0InputType, oldCall.getType());
+        rexBuilder.getTypeFactory(), sum0InputType);
     final AggregateCall sumCall =
         AggregateCall.create(
             new HiveSqlSumAggFunction(
@@ -336,7 +336,7 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
     final RelDataType avgInputType = typeFactory.createTypeWithNullability(
         getFieldType(oldAggRel.getInput(), iAvgInput), true);
     final RelDataType sumReturnType = getSumReturnType(
-        rexBuilder.getTypeFactory(), avgInputType, oldCall.getType());
+        rexBuilder.getTypeFactory(), avgInputType);
     final AggregateCall sumCall =
         AggregateCall.create(
             new HiveSqlSumAggFunction(
@@ -387,7 +387,11 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
             aggCallMapping,
             ImmutableList.of(avgInputType));
 
-    numeratorRef = rexBuilder.ensureType(oldCall.getType(), numeratorRef, true);
+    if (numeratorRef.getType().getSqlTypeName() != SqlTypeName.DECIMAL) {
+      // If type is not decimal, we enforce the same type as the avg to comply with
+      // Hive semantics
+      numeratorRef = rexBuilder.ensureType(oldCall.getType(), numeratorRef, true);
+    }
     final RexNode divideRef =
         rexBuilder.makeCall(SqlStdOperatorTable.DIVIDE, numeratorRef, denominatorRef);
     return rexBuilder.makeCast(oldCall.getType(), divideRef);
@@ -427,13 +431,13 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
         rexBuilder.ensureType(oldCallType, inputExprs.get(argOrdinal), false);
     final int argRefOrdinal = lookupOrAdd(inputExprs, argRef);
     final RelDataType sumReturnType = getSumReturnType(
-        rexBuilder.getTypeFactory(), argRef.getType(), oldCall.getType());
+        rexBuilder.getTypeFactory(), argRef.getType());
 
     final RexNode argSquared = rexBuilder.makeCall(SqlStdOperatorTable.MULTIPLY,
         argRef, argRef);
     final int argSquaredOrdinal = lookupOrAdd(inputExprs, argSquared);
     final RelDataType sumSquaredReturnType = getSumReturnType(
-        rexBuilder.getTypeFactory(), argSquared.getType(), oldCall.getType());
+        rexBuilder.getTypeFactory(), argSquared.getType());
 
     final AggregateCall sumArgSquaredAggCall =
         createAggregateCallWithBinding(typeFactory,
@@ -593,7 +597,7 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
   }
 
   private RelDataType getSumReturnType(RelDataTypeFactory typeFactory,
-      RelDataType inputType, RelDataType originalReturnType) {
+      RelDataType inputType) {
     switch (inputType.getSqlTypeName()) {
       case TINYINT:
       case SMALLINT:
@@ -607,8 +611,7 @@ public class HiveAggregateReduceFunctionsRule extends RelOptRule {
       case CHAR:
         return TypeConverter.convert(TypeInfoFactory.doubleTypeInfo, typeFactory);
       case DECIMAL:
-        // We keep precision and scale
-        return originalReturnType;
+        return typeFactory.getTypeSystem().deriveSumType(typeFactory, inputType);
     }
     return null;
   }
diff --git a/ql/src/test/results/clientpositive/decimal_precision.q.out b/ql/src/test/results/clientpositive/decimal_precision.q.out
index 179e746..8aea2dc 100644
--- a/ql/src/test/results/clientpositive/decimal_precision.q.out
+++ b/ql/src/test/results/clientpositive/decimal_precision.q.out
@@ -564,7 +564,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: (_col0 / _col1) (type: decimal(38,18)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
+            expressions: CAST( (_col0 / _col1) AS decimal(24,14)) (type: decimal(24,14)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -589,7 +589,7 @@ POSTHOOK: query: SELECT avg(`dec`), sum(`dec`) FROM DECIMAL_PRECISION_n0
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_precision_n0
 #### A masked pattern was here ####
-88499534.575865762206451613	2743485571.8518386284
+88499534.57586576220645	2743485571.8518386284
 PREHOOK: query: SELECT `dec` * cast('12345678901234567890.12345678' as decimal(38,18)) FROM DECIMAL_PRECISION_n0 LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_precision_n0
diff --git a/ql/src/test/results/clientpositive/decimal_udf.q.out b/ql/src/test/results/clientpositive/decimal_udf.q.out
index a5bbdc6..f00ef02 100644
--- a/ql/src/test/results/clientpositive/decimal_udf.q.out
+++ b/ql/src/test/results/clientpositive/decimal_udf.q.out
@@ -1392,7 +1392,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1, _col2
           Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,18)), (CAST( _col1 AS decimal(24,14)) / _col2) (type: decimal(38,28)), _col1 (type: decimal(30,10))
+            expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,18)), CAST( (_col1 / _col2) AS decimal(24,14)) (type: decimal(24,14)), _col1 (type: decimal(30,10))
             outputColumnNames: _col0, _col1, _col2, _col3
             Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1411,11 +1411,11 @@ STAGE PLANS:
               null sort order: z
               sort order: +
               Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
-              value expressions: _col1 (type: decimal(38,18)), _col2 (type: decimal(38,28)), _col3 (type: decimal(30,10))
+              value expressions: _col1 (type: decimal(38,18)), _col2 (type: decimal(24,14)), _col3 (type: decimal(30,10))
       Execution mode: vectorized
       Reduce Operator Tree:
         Select Operator
-          expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,18)), VALUE._col1 (type: decimal(38,28)), VALUE._col2 (type: decimal(30,10))
+          expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,18)), VALUE._col1 (type: decimal(24,14)), VALUE._col2 (type: decimal(30,10))
           outputColumnNames: _col0, _col1, _col2, _col3
           Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
           File Output Operator
@@ -1440,23 +1440,23 @@ POSTHOOK: query: SELECT value, sum(key) / count(key), avg(key), sum(key) FROM DE
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf
 #### A masked pattern was here ####
--1234567890	-1234567890.123456789000000000	-1234567890.1234567890000000000000000000	-1234567890.1234567890
--1255	-1255.490000000000000000	-1255.4900000000000000000000000000	-1255.4900000000
--11	-1.122000000000000000	-1.1220000000000000000000000000	-1.1220000000
--1	-1.120000000000000000	-1.1200000000000000000000000000	-2.2400000000
-0	0.025384615384615385	0.0253846153846153846153846154	0.3300000000
-1	1.048400000000000000	1.0484000000000000000000000000	5.2420000000
-2	2.000000000000000000	2.0000000000000000000000000000	4.0000000000
-3	3.140000000000000000	3.1400000000000000000000000000	9.4200000000
-4	3.140000000000000000	3.1400000000000000000000000000	3.1400000000
-10	10.000000000000000000	10.0000000000000000000000000000	10.0000000000
-20	20.000000000000000000	20.0000000000000000000000000000	20.0000000000
-100	100.000000000000000000	100.0000000000000000000000000000	100.0000000000
-124	124.000000000000000000	124.0000000000000000000000000000	124.0000000000
-125	125.200000000000000000	125.2000000000000000000000000000	125.2000000000
-200	200.000000000000000000	200.0000000000000000000000000000	200.0000000000
-4400	-4400.000000000000000000	-4400.0000000000000000000000000000	-4400.0000000000
-1234567890	1234567890.123456780000000000	1234567890.1234567800000000000000000000	1234567890.1234567800
+-1234567890	-1234567890.123456789000000000	-1234567890.12345678900000	-1234567890.1234567890
+-1255	-1255.490000000000000000	-1255.49000000000000	-1255.4900000000
+-11	-1.122000000000000000	-1.12200000000000	-1.1220000000
+-1	-1.120000000000000000	-1.12000000000000	-2.2400000000
+0	0.025384615384615385	0.02538461538462	0.3300000000
+1	1.048400000000000000	1.04840000000000	5.2420000000
+2	2.000000000000000000	2.00000000000000	4.0000000000
+3	3.140000000000000000	3.14000000000000	9.4200000000
+4	3.140000000000000000	3.14000000000000	3.1400000000
+10	10.000000000000000000	10.00000000000000	10.0000000000
+20	20.000000000000000000	20.00000000000000	20.0000000000
+100	100.000000000000000000	100.00000000000000	100.0000000000
+124	124.000000000000000000	124.00000000000000	124.0000000000
+125	125.200000000000000000	125.20000000000000	125.2000000000
+200	200.000000000000000000	200.00000000000000	200.0000000000
+4400	-4400.000000000000000000	-4400.00000000000000	-4400.0000000000
+1234567890	1234567890.123456780000000000	1234567890.12345678000000	1234567890.1234567800
 PREHOOK: query: EXPLAIN SELECT -key FROM DECIMAL_UDF
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_udf
diff --git a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
index 7a4d82d..f77fb35 100644
--- a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
+++ b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
@@ -5665,21 +5665,21 @@ FROM "CUSTOMER_DEMOGRAPHICS"
 WHERE "cd_marital_status" IN ('M', 'S', 'W') AND "cd_education_status" IN ('Advanced Degree     ', 'College             ', '2 yr Degree         ') AND "cd_demo_sk" IS NOT NULL) AS "t13" ON "t11"."cd_marital_status" = "t13"."cd_marital_status" AND "t11"."cd_education_status" = "t13"."cd_education_status") AS "t14" ON "t0"."wr_returning_cdemo_sk" = "t14"."cd_demo_sk0" AND "t0"."wr_refunded_cdemo_sk" = "t14"."cd_demo_sk" AND ("t14"."=" AND "t14"."=4" AND "t9"."BETWEEN7" OR "t14"."=5" AND "t [...]
 GROUP BY "t2"."r_reason_desc"
                     hive.sql.query.fieldNames r_reason_desc,$f1,$f2,$f3,$f4,$f5,$f6
-                    hive.sql.query.fieldTypes char(100),bigint,bigint,decimal(11,6),bigint,decimal(11,6),bigint
+                    hive.sql.query.fieldTypes char(100),bigint,bigint,decimal(17,2),bigint,decimal(17,2),bigint
                     hive.sql.query.split false
                   Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                   Top N Key Operator
                     sort order: ++++
-                    keys: substr(r_reason_desc, 1, 20) (type: string), (UDFToDouble($f1) / $f2) (type: double), ($f3 / $f4) (type: decimal(31,26)), ($f5 / $f6) (type: decimal(31,26))
+                    keys: substr(r_reason_desc, 1, 20) (type: string), (UDFToDouble($f1) / $f2) (type: double), CAST( ($f3 / $f4) AS decimal(11,6)) (type: decimal(11,6)), CAST( ($f5 / $f6) AS decimal(11,6)) (type: decimal(11,6))
                     null sort order: zzzz
                     Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                     top n: 100
                     Select Operator
-                      expressions: substr(r_reason_desc, 1, 20) (type: string), (UDFToDouble($f1) / $f2) (type: double), ($f3 / $f4) (type: decimal(31,26)), ($f5 / $f6) (type: decimal(31,26))
+                      expressions: substr(r_reason_desc, 1, 20) (type: string), (UDFToDouble($f1) / $f2) (type: double), CAST( ($f3 / $f4) AS decimal(11,6)) (type: decimal(11,6)), CAST( ($f5 / $f6) AS decimal(11,6)) (type: decimal(11,6))
                       outputColumnNames: _col0, _col1, _col2, _col3
                       Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                       Reduce Output Operator
-                        key expressions: _col0 (type: string), _col1 (type: double), _col2 (type: decimal(31,26)), _col3 (type: decimal(31,26))
+                        key expressions: _col0 (type: string), _col1 (type: double), _col2 (type: decimal(11,6)), _col3 (type: decimal(11,6))
                         null sort order: zzzz
                         sort order: ++++
                         Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
@@ -5690,7 +5690,7 @@ GROUP BY "t2"."r_reason_desc"
             Execution mode: vectorized, llap
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: double), KEY.reducesinkkey2 (type: decimal(31,26)), KEY.reducesinkkey3 (type: decimal(31,26))
+                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: double), KEY.reducesinkkey2 (type: decimal(11,6)), KEY.reducesinkkey3 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Statistics: Num rows: 1 Data size: 440 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/llap/subquery_scalar.q.out b/ql/src/test/results/clientpositive/llap/subquery_scalar.q.out
index 4238470..ad5c9f0 100644
--- a/ql/src/test/results/clientpositive/llap/subquery_scalar.q.out
+++ b/ql/src/test/results/clientpositive/llap/subquery_scalar.q.out
@@ -7501,8 +7501,8 @@ HiveProject(ss_sold_date_sk=[$0], ss_quantity=[$1], ss_list_price=[$2])
     HiveProject(ss_sold_date_sk=[$0], ss_quantity=[$1], ss_list_price=[$2])
       HiveFilter(condition=[IS NOT NULL($2)])
         HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)])
-      HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+      HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
         HiveProject($f0=[$0], $f1=[$1])
           HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
             HiveProject($f0=[*(CAST($1):DECIMAL(10, 0), $2)])
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_aggregate.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_aggregate.q.out
index c369691..c55f540 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_aggregate.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_aggregate.q.out
@@ -353,13 +353,13 @@ STAGE PLANS:
                   predicate: (_col13 > 1L) (type: boolean)
                   Statistics: Num rows: 2035 Data size: 1487560 Basic stats: COMPLETE Column stats: COMPLETE
                   Select Operator
-                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), (CAST( _col4 AS decimal(24,14)) / _col1) (type: decimal(38,28)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (ty [...]
+                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), CAST( (_col4 / _col1) AS decimal(24,14)) (type: decimal(24,14)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (ty [...]
                     outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
                     Select Vectorization:
                         className: VectorSelectOperator
                         native: true
                         projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 32, 37, 45]
-                        selectExpressions: DecimalColDivideDecimalColumn(col 14:decimal(24,14), col 15:decimal(19,0))(children: CastDecimalToDecimal(col 4:decimal(30,10)) -> 14:decimal(24,14), CastLongToDecimal(col 1:bigint) -> 15:decimal(19,0)) -> 16:decimal(38,28), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17:double,  [...]
+                        selectExpressions: CastDecimalToDecimal(col 15:decimal(38,18))(children: DecimalColDivideDecimalColumn(col 4:decimal(30,10), col 14:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 14:decimal(19,0)) -> 15:decimal(38,18)) -> 16:decimal(24,14), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 1 [...]
                     Statistics: Num rows: 2035 Data size: 1927120 Basic stats: COMPLETE Column stats: COMPLETE
                     File Output Operator
                       compressed: false
@@ -396,14 +396,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby
 #### A masked pattern was here ####
--3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.6735247296333333333333333333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.81120730764118333333333333333	2604201.2704476737	2852759.5602156054
--563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.6364148649000000000000000000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.50327307692295000000000000000	1707.9424961538462	2415.395441814127
-253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.3399236697630859375000000000	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.42835967548079188476562500000	6837.632716002931	6840.973851172272
-528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.4109968243230468750000000000	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.96562480769168948242187500000	308443.1074570797	308593.82484083937
-626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.2939966110631835937500000000	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.32914804687497798828125000000	6877.318722794881	6880.679250101608
-6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.6757008106666666666666666667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.69651461528206666666666666667	3292794.4113115156	4032833.0678006653
-762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.7443268917000000000000000000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.07839499984625000000000000000	3491310.1327026924	4937458.140118757
-NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.6081081080666666666666666667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.57692307692296666666666666667	6821.495748565151	6822.606289190915
+-3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.67352472963333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.811207307641183333	2604201.2704476737	2852759.5602156054
+-563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.63641486490000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.503273076922950000	1707.9424961538462	2415.395441814127
+253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.33992366976309	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.428359675480791885	6837.632716002931	6840.973851172272
+528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.41099682432305	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.965624807691689482	308443.1074570797	308593.82484083937
+626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.29399661106318	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.329148046874977988	6877.318722794881	6880.679250101608
+6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.67570081066667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.696514615282066667	3292794.4113115156	4032833.0678006653
+762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.74432689170000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.078394999846250000	3491310.1327026924	4937458.140118757
+NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.60810810806667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.576923076922966667	6821.495748565151	6822.606289190915
 PREHOOK: query: CREATE TABLE decimal_vgby_small STORED AS TEXTFILE AS
     SELECT cdouble, CAST (((cdouble*22.1)/37) AS DECIMAL(11,5)) AS cdecimal1,
     CAST (((cdouble*9.3)/13) AS DECIMAL(16,0)) AS cdecimal2,
@@ -778,13 +778,13 @@ STAGE PLANS:
                   predicate: (_col13 > 1L) (type: boolean)
                   Statistics: Num rows: 2035 Data size: 1487560 Basic stats: COMPLETE Column stats: COMPLETE
                   Select Operator
-                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), (CAST( _col4 AS decimal(15,9)) / _col1) (type: decimal(35,29)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: d [...]
+                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), CAST( (_col4 / _col1) AS decimal(15,9)) (type: decimal(15,9)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: de [...]
                     outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
                     Select Vectorization:
                         className: VectorSelectOperator
                         native: true
-                        projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 33, 38, 46]
-                        selectExpressions: DecimalColDivideDecimalColumn(col 14:decimal(15,9), col 15:decimal(19,0))(children: CastDecimalToDecimal(col 4:decimal(21,5)) -> 14:decimal(15,9), CastLongToDecimal(col 1:bigint) -> 15:decimal(19,0)) -> 16:decimal(35,29), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17:double, col [...]
+                        projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 32, 37, 45]
+                        selectExpressions: CastDecimalToDecimal(col 15:decimal(38,22))(children: DecimalColDivideDecimalColumn(col 4:decimal(21,5), col 14:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 14:decimal(19,0)) -> 15:decimal(38,22)) -> 16:decimal(15,9), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17: [...]
                     Statistics: Num rows: 2035 Data size: 1927120 Basic stats: COMPLETE Column stats: COMPLETE
                     File Output Operator
                       compressed: false
@@ -821,14 +821,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
--3728	5	-515.62107	-3367.65176	-13986.22811	-2797.24562200000000000000000000000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
--563	2	-515.62107	-3367.65176	-3883.27283	-1941.63641500000000000000000000000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
-253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.33992375000000000000000000000	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
-528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.35193513698630136986301369863	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
-626923679	1024	9723.40270	-9778.95135	10541.05247	10.29399655273437500000000000000	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
-6981	2	-515.62107	-515.62107	-1031.24214	-515.62107000000000000000000000000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
-762	1	1531.21941	1531.21941	1531.21941	1531.21941000000000000000000000000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
-NULL	3072	9318.43514	-4298.15135	5018444.11392	NULL	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
+-3728	5	-515.62107	-3367.65176	-13986.22811	-2797.245622000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
+-563	2	-515.62107	-3367.65176	-3883.27283	-1941.636415000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
+253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.339923750	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
+528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.351935137	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
+626923679	1024	9723.40270	-9778.95135	10541.05247	10.293996553	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
+6981	2	-515.62107	-515.62107	-1031.24214	-515.621070000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
+762	1	1531.21941	1531.21941	1531.21941	1531.219410000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
+NULL	3072	9318.43514	-4298.15135	5018444.11392	1633.608110000	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
 PREHOOK: query: SELECT SUM(HASH(*))
 FROM (SELECT cint,
     COUNT(cdecimal1), MAX(cdecimal1), MIN(cdecimal1), SUM(cdecimal1), AVG(cdecimal1), STDDEV_POP(cdecimal1), STDDEV_SAMP(cdecimal1),
@@ -847,4 +847,4 @@ FROM (SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
-96673467876
+95165244160
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_precision.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_precision.q.out
index 6b19ffa..b21100f 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_precision.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_precision.q.out
@@ -658,13 +658,13 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: COMPLETE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(38,18)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
+                  expressions: CAST( (_col0 / _col1) AS decimal(24,14)) (type: decimal(24,14)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
                   outputColumnNames: _col0, _col1
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
-                      projectedOutputColumnNums: [3, 4]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 0:decimal(30,10), col 2:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 2:decimal(19,0)) -> 3:decimal(38,18), CastDecimalToDecimal(col 0:decimal(30,10)) -> 4:decimal(30,10)
+                      projectedOutputColumnNums: [4, 5]
+                      selectExpressions: CastDecimalToDecimal(col 3:decimal(38,18))(children: DecimalColDivideDecimalColumn(col 0:decimal(30,10), col 2:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 2:decimal(19,0)) -> 3:decimal(38,18)) -> 4:decimal(24,14), CastDecimalToDecimal(col 0:decimal(30,10)) -> 5:decimal(30,10)
                   Statistics: Num rows: 1 Data size: 224 Basic stats: COMPLETE Column stats: COMPLETE
                   File Output Operator
                     compressed: false
@@ -691,7 +691,7 @@ POSTHOOK: query: SELECT avg(`dec`), sum(`dec`) FROM DECIMAL_PRECISION
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_precision
 #### A masked pattern was here ####
-88499534.575865762206451613	2743485571.8518386284
+88499534.57586576220645	2743485571.8518386284
 PREHOOK: query: SELECT `dec` * cast('12345678901234567890.12345678' as decimal(38,18)) FROM DECIMAL_PRECISION LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_precision
@@ -1282,13 +1282,13 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(38,18)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
+                  expressions: CAST( (_col0 / _col1) AS decimal(24,14)) (type: decimal(24,14)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
                   outputColumnNames: _col0, _col1
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
-                      projectedOutputColumnNums: [3, 4]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 0:decimal(30,10), col 2:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 2:decimal(19,0)) -> 3:decimal(38,18), CastDecimalToDecimal(col 0:decimal(30,10)) -> 4:decimal(30,10)
+                      projectedOutputColumnNums: [4, 5]
+                      selectExpressions: CastDecimalToDecimal(col 3:decimal(38,18))(children: DecimalColDivideDecimalColumn(col 0:decimal(30,10), col 2:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 2:decimal(19,0)) -> 3:decimal(38,18)) -> 4:decimal(24,14), CastDecimalToDecimal(col 0:decimal(30,10)) -> 5:decimal(30,10)
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   File Output Operator
                     compressed: false
@@ -1315,7 +1315,7 @@ POSTHOOK: query: SELECT avg(`dec`), sum(`dec`) FROM DECIMAL_PRECISION_txt_small
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_precision_txt_small
 #### A masked pattern was here ####
-88499534.575865762206451613	2743485571.8518386284
+88499534.57586576220645	2743485571.8518386284
 PREHOOK: query: SELECT `dec` * cast('12345678901234567890.12345678' as decimal(38,18)) FROM DECIMAL_PRECISION_txt_small LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_precision_txt_small
diff --git a/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out b/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
index cac7db2..f54064c 100644
--- a/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_decimal_udf.q.out
@@ -2456,13 +2456,13 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 17 Data size: 2108 Basic stats: COMPLETE Column stats: COMPLETE
                 Select Operator
-                  expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,18)), (CAST( _col1 AS decimal(24,14)) / _col2) (type: decimal(38,28)), _col1 (type: decimal(30,10))
+                  expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,18)), CAST( (_col1 / _col2) AS decimal(24,14)) (type: decimal(24,14)), _col1 (type: decimal(30,10))
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
                       projectedOutputColumnNums: [0, 4, 7, 1]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 1:decimal(30,10), col 3:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 3:decimal(19,0)) -> 4:decimal(38,18), DecimalColDivideDecimalColumn(col 5:decimal(24,14), col 6:decimal(19,0))(children: CastDecimalToDecimal(col 1:decimal(30,10)) -> 5:decimal(24,14), CastLongToDecimal(col 2:bigint) -> 6:decimal(19,0)) -> 7:decimal(38,28)
+                      selectExpressions: DecimalColDivideDecimalColumn(col 1:decimal(30,10), col 3:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 3:decimal(19,0)) -> 4:decimal(38,18), CastDecimalToDecimal(col 6:decimal(38,18))(children: DecimalColDivideDecimalColumn(col 1:decimal(30,10), col 5:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,18)) -> 7:decimal(24,14)
                   Statistics: Num rows: 17 Data size: 5780 Basic stats: COMPLETE Column stats: COMPLETE
                   Reduce Output Operator
                     key expressions: _col0 (type: int)
@@ -2473,9 +2473,9 @@ STAGE PLANS:
                         keyColumns: 0:int
                         native: true
                         nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, hive.execution.engine tez IN [tez, spark] IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true
-                        valueColumns: 4:decimal(38,18), 7:decimal(38,28), 1:decimal(30,10)
+                        valueColumns: 4:decimal(38,18), 7:decimal(24,14), 1:decimal(30,10)
                     Statistics: Num rows: 17 Data size: 5780 Basic stats: COMPLETE Column stats: COMPLETE
-                    value expressions: _col1 (type: decimal(38,18)), _col2 (type: decimal(38,28)), _col3 (type: decimal(30,10))
+                    value expressions: _col1 (type: decimal(38,18)), _col2 (type: decimal(24,14)), _col3 (type: decimal(30,10))
         Reducer 3 
             Execution mode: vectorized, llap
             Reduce Vectorization:
@@ -2488,12 +2488,12 @@ STAGE PLANS:
                 vectorized: true
                 rowBatchContext:
                     dataColumnCount: 4
-                    dataColumns: KEY.reducesinkkey0:int, VALUE._col0:decimal(38,18), VALUE._col1:decimal(38,28), VALUE._col2:decimal(30,10)
+                    dataColumns: KEY.reducesinkkey0:int, VALUE._col0:decimal(38,18), VALUE._col1:decimal(24,14), VALUE._col2:decimal(30,10)
                     partitionColumnCount: 0
                     scratchColumnTypeNames: []
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,18)), VALUE._col1 (type: decimal(38,28)), VALUE._col2 (type: decimal(30,10))
+                expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,18)), VALUE._col1 (type: decimal(24,14)), VALUE._col2 (type: decimal(30,10))
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Select Vectorization:
                     className: VectorSelectOperator
@@ -2525,23 +2525,23 @@ POSTHOOK: query: SELECT value, sum(key) / count(key), avg(key), sum(key) FROM DE
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf_n0
 #### A masked pattern was here ####
--1	-1.120000000000000000	-1.1200000000000000000000000000	-2.2400000000
--11	-1.122000000000000000	-1.1220000000000000000000000000	-1.1220000000
--1234567890	-1234567890.123456789000000000	-1234567890.1234567890000000000000000000	-1234567890.1234567890
--1255	-1255.490000000000000000	-1255.4900000000000000000000000000	-1255.4900000000
-0	0.025384615384615385	0.0253846153846153846153846154	0.3300000000
-1	1.048400000000000000	1.0484000000000000000000000000	5.2420000000
-10	10.000000000000000000	10.0000000000000000000000000000	10.0000000000
-100	100.000000000000000000	100.0000000000000000000000000000	100.0000000000
-1234567890	1234567890.123456780000000000	1234567890.1234567800000000000000000000	1234567890.1234567800
-124	124.000000000000000000	124.0000000000000000000000000000	124.0000000000
-125	125.200000000000000000	125.2000000000000000000000000000	125.2000000000
-2	2.000000000000000000	2.0000000000000000000000000000	4.0000000000
-20	20.000000000000000000	20.0000000000000000000000000000	20.0000000000
-200	200.000000000000000000	200.0000000000000000000000000000	200.0000000000
-3	3.140000000000000000	3.1400000000000000000000000000	9.4200000000
-4	3.140000000000000000	3.1400000000000000000000000000	3.1400000000
-4400	-4400.000000000000000000	-4400.0000000000000000000000000000	-4400.0000000000
+-1	-1.120000000000000000	-1.12000000000000	-2.2400000000
+-11	-1.122000000000000000	-1.12200000000000	-1.1220000000
+-1234567890	-1234567890.123456789000000000	-1234567890.12345678900000	-1234567890.1234567890
+-1255	-1255.490000000000000000	-1255.49000000000000	-1255.4900000000
+0	0.025384615384615385	0.02538461538462	0.3300000000
+1	1.048400000000000000	1.04840000000000	5.2420000000
+10	10.000000000000000000	10.00000000000000	10.0000000000
+100	100.000000000000000000	100.00000000000000	100.0000000000
+1234567890	1234567890.123456780000000000	1234567890.12345678000000	1234567890.1234567800
+124	124.000000000000000000	124.00000000000000	124.0000000000
+125	125.200000000000000000	125.20000000000000	125.2000000000
+2	2.000000000000000000	2.00000000000000	4.0000000000
+20	20.000000000000000000	20.00000000000000	20.0000000000
+200	200.000000000000000000	200.00000000000000	200.0000000000
+3	3.140000000000000000	3.14000000000000	9.4200000000
+4	3.140000000000000000	3.14000000000000	3.1400000000
+4400	-4400.000000000000000000	-4400.00000000000000	-4400.0000000000
 NULL	NULL	NULL	NULL
 PREHOOK: query: EXPLAIN VECTORIZATION DETAIL
 SELECT -key FROM DECIMAL_UDF_n0
@@ -6581,13 +6581,13 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,16)), (CAST( _col1 AS decimal(19,7)) / _col2) (type: decimal(38,26)), _col1 (type: decimal(25,3))
+                  expressions: _col0 (type: int), (_col1 / CAST( _col2 AS decimal(19,0))) (type: decimal(38,16)), CAST( (_col1 / _col2) AS decimal(19,7)) (type: decimal(19,7)), _col1 (type: decimal(25,3))
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
                       projectedOutputColumnNums: [0, 4, 7, 1]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 1:decimal(25,3), col 3:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 3:decimal(19,0)) -> 4:decimal(38,16), DecimalColDivideDecimalColumn(col 5:decimal(19,7), col 6:decimal(19,0))(children: CastDecimalToDecimal(col 1:decimal(25,3)) -> 5:decimal(19,7), CastLongToDecimal(col 2:bigint) -> 6:decimal(19,0)) -> 7:decimal(38,26)
+                      selectExpressions: DecimalColDivideDecimalColumn(col 1:decimal(25,3), col 3:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 3:decimal(19,0)) -> 4:decimal(38,16), CastDecimalToDecimal(col 6:decimal(38,16))(children: DecimalColDivideDecimalColumn(col 1:decimal(25,3), col 5:decimal(19,0))(children: CastLongToDecimal(col 2:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,16)) -> 7:decimal(19,7)
                   Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
                     key expressions: _col0 (type: int)
@@ -6598,9 +6598,9 @@ STAGE PLANS:
                         keyColumns: 0:int
                         native: true
                         nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, hive.execution.engine tez IN [tez, spark] IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true
-                        valueColumns: 4:decimal(38,16), 7:decimal(38,26), 1:decimal(25,3)
+                        valueColumns: 4:decimal(38,16), 7:decimal(19,7), 1:decimal(25,3)
                     Statistics: Num rows: 1 Data size: 116 Basic stats: COMPLETE Column stats: NONE
-                    value expressions: _col1 (type: decimal(38,16)), _col2 (type: decimal(38,26)), _col3 (type: decimal(25,3))
+                    value expressions: _col1 (type: decimal(38,16)), _col2 (type: decimal(19,7)), _col3 (type: decimal(25,3))
         Reducer 3 
             Execution mode: vectorized, llap
             Reduce Vectorization:
@@ -6613,12 +6613,12 @@ STAGE PLANS:
                 vectorized: true
                 rowBatchContext:
                     dataColumnCount: 4
-                    dataColumns: KEY.reducesinkkey0:int, VALUE._col0:decimal(38,16), VALUE._col1:decimal(38,26), VALUE._col2:decimal(25,3)
+                    dataColumns: KEY.reducesinkkey0:int, VALUE._col0:decimal(38,16), VALUE._col1:decimal(19,7), VALUE._col2:decimal(25,3)
                     partitionColumnCount: 0
                     scratchColumnTypeNames: []
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,16)), VALUE._col1 (type: decimal(38,26)), VALUE._col2 (type: decimal(25,3))
+                expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: decimal(38,16)), VALUE._col1 (type: decimal(19,7)), VALUE._col2 (type: decimal(25,3))
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Select Vectorization:
                     className: VectorSelectOperator
@@ -6650,23 +6650,23 @@ POSTHOOK: query: SELECT value, sum(key) / count(key), avg(key), sum(key) FROM DE
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_udf_txt_small
 #### A masked pattern was here ####
--1	-1.1200000000000000	-1.12000000000000000000000000	-2.240
--11	-1.1220000000000000	-1.12200000000000000000000000	-1.122
--1234567890	-1234567890.1230000000000000	-1234567890.12300000000000000000000000	-1234567890.123
--1255	-1255.4900000000000000	-1255.49000000000000000000000000	-1255.490
-0	0.0253846153846154	0.02538461538461538461538462	0.330
-1	1.0484000000000000	1.04840000000000000000000000	5.242
-10	10.0000000000000000	10.00000000000000000000000000	10.000
-100	100.0000000000000000	100.00000000000000000000000000	100.000
-1234567890	1234567890.1230000000000000	1234567890.12300000000000000000000000	1234567890.123
-124	124.0000000000000000	124.00000000000000000000000000	124.000
-125	125.2000000000000000	125.20000000000000000000000000	125.200
-2	2.0000000000000000	2.00000000000000000000000000	4.000
-20	20.0000000000000000	20.00000000000000000000000000	20.000
-200	200.0000000000000000	200.00000000000000000000000000	200.000
-3	3.1400000000000000	3.14000000000000000000000000	9.420
-4	3.1400000000000000	3.14000000000000000000000000	3.140
-4400	-4400.0000000000000000	-4400.00000000000000000000000000	-4400.000
+-1	-1.1200000000000000	-1.1200000	-2.240
+-11	-1.1220000000000000	-1.1220000	-1.122
+-1234567890	-1234567890.1230000000000000	-1234567890.1230000	-1234567890.123
+-1255	-1255.4900000000000000	-1255.4900000	-1255.490
+0	0.0253846153846154	0.0253846	0.330
+1	1.0484000000000000	1.0484000	5.242
+10	10.0000000000000000	10.0000000	10.000
+100	100.0000000000000000	100.0000000	100.000
+1234567890	1234567890.1230000000000000	1234567890.1230000	1234567890.123
+124	124.0000000000000000	124.0000000	124.000
+125	125.2000000000000000	125.2000000	125.200
+2	2.0000000000000000	2.0000000	4.000
+20	20.0000000000000000	20.0000000	20.000
+200	200.0000000000000000	200.0000000	200.000
+3	3.1400000000000000	3.1400000	9.420
+4	3.1400000000000000	3.1400000	3.140
+4400	-4400.0000000000000000	-4400.0000000	-4400.000
 NULL	NULL	NULL	NULL
 PREHOOK: query: EXPLAIN VECTORIZATION DETAIL
 SELECT -key FROM DECIMAL_UDF_txt_small
diff --git a/ql/src/test/results/clientpositive/llap/vector_groupby_grouping_sets3_dec.q.out b/ql/src/test/results/clientpositive/llap/vector_groupby_grouping_sets3_dec.q.out
index 5ad1838..3c79f3e 100644
--- a/ql/src/test/results/clientpositive/llap/vector_groupby_grouping_sets3_dec.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_groupby_grouping_sets3_dec.q.out
@@ -156,13 +156,13 @@ STAGE PLANS:
                 Statistics: Num rows: 24 Data size: 7344 Basic stats: COMPLETE Column stats: COMPLETE
                 pruneGroupingSetId: true
                 Select Operator
-                  expressions: _col0 (type: string), _col1 (type: string), (_col3 / _col4) (type: decimal(38,20)), _col5 (type: bigint)
+                  expressions: _col0 (type: string), _col1 (type: string), CAST( (_col3 / _col4) AS decimal(14,6)) (type: decimal(14,6)), _col5 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
-                      projectedOutputColumnNums: [0, 1, 6, 4]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)
+                      projectedOutputColumnNums: [0, 1, 7, 4]
+                      selectExpressions: CastDecimalToDecimal(col 6:decimal(38,20))(children: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)) -> 7:decimal(14,6)
                   Statistics: Num rows: 24 Data size: 6960 Basic stats: COMPLETE Column stats: COMPLETE
                   File Output Operator
                     compressed: false
@@ -301,13 +301,13 @@ STAGE PLANS:
                 Statistics: Num rows: 24 Data size: 7344 Basic stats: COMPLETE Column stats: COMPLETE
                 pruneGroupingSetId: true
                 Select Operator
-                  expressions: _col0 (type: string), _col1 (type: string), (_col3 / _col4) (type: decimal(38,20)), _col5 (type: bigint)
+                  expressions: _col0 (type: string), _col1 (type: string), CAST( (_col3 / _col4) AS decimal(14,6)) (type: decimal(14,6)), _col5 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
-                      projectedOutputColumnNums: [0, 1, 6, 4]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)
+                      projectedOutputColumnNums: [0, 1, 7, 4]
+                      selectExpressions: CastDecimalToDecimal(col 6:decimal(38,20))(children: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)) -> 7:decimal(14,6)
                   Statistics: Num rows: 24 Data size: 6960 Basic stats: COMPLETE Column stats: COMPLETE
                   File Output Operator
                     compressed: false
@@ -335,22 +335,22 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1_n115
 #### A masked pattern was here ####
 a	b	_c2	_c3
-1	1	3.00000000000000000000	2
-1	2	2.00000000000000000000	1
-1	NULL	2.66666666666666666667	3
-2	2	5.33333333333333333333	3
-2	3	5.00000000000000000000	2
-2	NULL	5.20000000000000000000	5
-3	2	8.00000000000000000000	1
-3	NULL	8.00000000000000000000	1
-5	1	2.00000000000000000000	1
-5	NULL	2.00000000000000000000	1
-8	1	1.00000000000000000000	2
-8	NULL	1.00000000000000000000	2
-NULL	1	2.00000000000000000000	5
-NULL	2	5.20000000000000000000	5
-NULL	3	5.00000000000000000000	2
-NULL	NULL	3.83333333333333333333	12
+1	1	3.000000	2
+1	2	2.000000	1
+1	NULL	2.666667	3
+2	2	5.333333	3
+2	3	5.000000	2
+2	NULL	5.200000	5
+3	2	8.000000	1
+3	NULL	8.000000	1
+5	1	2.000000	1
+5	NULL	2.000000	1
+8	1	1.000000	2
+8	NULL	1.000000	2
+NULL	1	2.000000	5
+NULL	2	5.200000	5
+NULL	3	5.000000	2
+NULL	NULL	3.833333	12
 PREHOOK: query: EXPLAIN VECTORIZATION DETAIL
 SELECT a, b, avg(c_dec), count(*) from T1_n115 group by a, b with cube
 PREHOOK: type: QUERY
@@ -515,13 +515,13 @@ STAGE PLANS:
                 Statistics: Num rows: 24 Data size: 7344 Basic stats: COMPLETE Column stats: COMPLETE
                 pruneGroupingSetId: true
                 Select Operator
-                  expressions: _col0 (type: string), _col1 (type: string), (_col3 / _col4) (type: decimal(38,20)), _col5 (type: bigint)
+                  expressions: _col0 (type: string), _col1 (type: string), CAST( (_col3 / _col4) AS decimal(14,6)) (type: decimal(14,6)), _col5 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Select Vectorization:
                       className: VectorSelectOperator
                       native: true
-                      projectedOutputColumnNums: [0, 1, 6, 4]
-                      selectExpressions: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)
+                      projectedOutputColumnNums: [0, 1, 7, 4]
+                      selectExpressions: CastDecimalToDecimal(col 6:decimal(38,20))(children: DecimalColDivideDecimalColumn(col 2:decimal(20,2), col 5:decimal(19,0))(children: CastLongToDecimal(col 3:bigint) -> 5:decimal(19,0)) -> 6:decimal(38,20)) -> 7:decimal(14,6)
                   Statistics: Num rows: 24 Data size: 6960 Basic stats: COMPLETE Column stats: COMPLETE
                   File Output Operator
                     compressed: false
@@ -549,19 +549,19 @@ POSTHOOK: type: QUERY
 POSTHOOK: Input: default@t1_n115
 #### A masked pattern was here ####
 a	b	_c2	_c3
-1	1	3.00000000000000000000	2
-1	2	2.00000000000000000000	1
-1	NULL	2.66666666666666666667	3
-2	2	5.33333333333333333333	3
-2	3	5.00000000000000000000	2
-2	NULL	5.20000000000000000000	5
-3	2	8.00000000000000000000	1
-3	NULL	8.00000000000000000000	1
-5	1	2.00000000000000000000	1
-5	NULL	2.00000000000000000000	1
-8	1	1.00000000000000000000	2
-8	NULL	1.00000000000000000000	2
-NULL	1	2.00000000000000000000	5
-NULL	2	5.20000000000000000000	5
-NULL	3	5.00000000000000000000	2
-NULL	NULL	3.83333333333333333333	12
+1	1	3.000000	2
+1	2	2.000000	1
+1	NULL	2.666667	3
+2	2	5.333333	3
+2	3	5.000000	2
+2	NULL	5.200000	5
+3	2	8.000000	1
+3	NULL	8.000000	1
+5	1	2.000000	1
+5	NULL	2.000000	1
+8	1	1.000000	2
+8	NULL	1.000000	2
+NULL	1	2.000000	5
+NULL	2	5.200000	5
+NULL	3	5.000000	2
+NULL	NULL	3.833333	12
diff --git a/ql/src/test/results/clientpositive/perf/spark/query1.q.out b/ql/src/test/results/clientpositive/perf/spark/query1.q.out
index ad48037..9c51153 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query1.q.out
@@ -246,10 +246,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 15837566 Data size: 1227103566 Basic stats: COMPLETE Column stats: NONE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 15837566 Data size: 1227103566 Basic stats: COMPLETE Column stats: NONE
                       Select Operator
-                        expressions: ((_col1 / _col2) * 1.2) (type: decimal(38,11)), _col0 (type: int)
+                        expressions: (CAST( (_col1 / _col2) AS decimal(21,6)) * 1.2) (type: decimal(24,7)), _col0 (type: int)
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 15837566 Data size: 1227103566 Basic stats: COMPLETE Column stats: NONE
                         Reduce Output Operator
@@ -258,7 +258,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col1 (type: int)
                           Statistics: Num rows: 15837566 Data size: 1227103566 Basic stats: COMPLETE Column stats: NONE
-                          value expressions: _col0 (type: decimal(38,11))
+                          value expressions: _col0 (type: decimal(24,7))
         Reducer 3 
             Reduce Operator Tree:
               Join Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query13.q.out b/ql/src/test/results/clientpositive/perf/spark/query13.q.out
index ddb01e3..e78c9ee 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query13.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query13.q.out
@@ -355,7 +355,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
                 Statistics: Num rows: 1 Data size: 256 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (UDFToDouble(_col0) / _col1) (type: double), (_col2 / _col3) (type: decimal(37,22)), (_col4 / _col5) (type: decimal(37,22)), CAST( _col4 AS decimal(17,2)) (type: decimal(17,2))
+                  expressions: (UDFToDouble(_col0) / _col1) (type: double), CAST( (_col2 / _col3) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col4 / _col5) AS decimal(11,6)) (type: decimal(11,6)), CAST( _col4 AS decimal(17,2)) (type: decimal(17,2))
                   outputColumnNames: _col0, _col1, _col2, _col3
                   Statistics: Num rows: 1 Data size: 256 Basic stats: COMPLETE Column stats: NONE
                   File Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query18.q.out b/ql/src/test/results/clientpositive/perf/spark/query18.q.out
index bac68f2..9b93232 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query18.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query18.q.out
@@ -365,7 +365,7 @@ STAGE PLANS:
                 Statistics: Num rows: 1054114882 Data size: 142748330969 Basic stats: COMPLETE Column stats: NONE
                 pruneGroupingSetId: true
                 Select Operator
-                  expressions: _col0 (type: string), _col3 (type: string), _col2 (type: string), _col1 (type: string), (_col5 / _col6) (type: decimal(38,18)), (_col7 / _col8) (type: decimal(38,18)), (_col9 / _col10) (type: decimal(38,18)), (_col11 / _col12) (type: decimal(38,18)), (_col13 / _col14) (type: decimal(38,18)), (_col15 / _col16) (type: decimal(38,18)), (_col17 / _col18) (type: decimal(38,18))
+                  expressions: _col0 (type: string), _col3 (type: string), _col2 (type: string), _col1 (type: string), CAST( (_col5 / _col6) AS decimal(16,6)) (type: decimal(16,6)), CAST( (_col7 / _col8) AS decimal(16,6)) (type: decimal(16,6)), CAST( (_col9 / _col10) AS decimal(16,6)) (type: decimal(16,6)), CAST( (_col11 / _col12) AS decimal(16,6)) (type: decimal(16,6)), CAST( (_col13 / _col14) AS decimal(16,6)) (type: decimal(16,6)), CAST( (_col15 / _col16) AS decimal(16,6)) (type: deci [...]
                   outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10
                   Statistics: Num rows: 1054114882 Data size: 142748330969 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
@@ -374,12 +374,12 @@ STAGE PLANS:
                     sort order: ++++
                     Statistics: Num rows: 1054114882 Data size: 142748330969 Basic stats: COMPLETE Column stats: NONE
                     TopN Hash Memory Usage: 0.1
-                    value expressions: _col4 (type: decimal(38,18)), _col5 (type: decimal(38,18)), _col6 (type: decimal(38,18)), _col7 (type: decimal(38,18)), _col8 (type: decimal(38,18)), _col9 (type: decimal(38,18)), _col10 (type: decimal(38,18))
+                    value expressions: _col4 (type: decimal(16,6)), _col5 (type: decimal(16,6)), _col6 (type: decimal(16,6)), _col7 (type: decimal(16,6)), _col8 (type: decimal(16,6)), _col9 (type: decimal(16,6)), _col10 (type: decimal(16,6))
         Reducer 7 
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey3 (type: string), KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: string), KEY.reducesinkkey2 (type: string), VALUE._col0 (type: decimal(38,18)), VALUE._col1 (type: decimal(38,18)), VALUE._col2 (type: decimal(38,18)), VALUE._col3 (type: decimal(38,18)), VALUE._col4 (type: decimal(38,18)), VALUE._col5 (type: decimal(38,18)), VALUE._col6 (type: decimal(38,18))
+                expressions: KEY.reducesinkkey3 (type: string), KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: string), KEY.reducesinkkey2 (type: string), VALUE._col0 (type: decimal(16,6)), VALUE._col1 (type: decimal(16,6)), VALUE._col2 (type: decimal(16,6)), VALUE._col3 (type: decimal(16,6)), VALUE._col4 (type: decimal(16,6)), VALUE._col5 (type: decimal(16,6)), VALUE._col6 (type: decimal(16,6))
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10
                 Statistics: Num rows: 1054114882 Data size: 142748330969 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/perf/spark/query24.q.out b/ql/src/test/results/clientpositive/perf/spark/query24.q.out
index 1bf3b36..99b477b 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query24.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query24.q.out
@@ -386,10 +386,10 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: (_col0 is not null and _col1 is not null) (type: boolean)
+                  predicate: CAST( (_col0 / _col1) AS decimal(21,6)) is not null (type: boolean)
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: (0.05 * (_col0 / _col1)) (type: decimal(38,12))
+                    expressions: (0.05 * CAST( (_col0 / _col1) AS decimal(21,6))) (type: decimal(24,8))
                     outputColumnNames: _col0
                     Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                     Spark HashTable Sink Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query26.q.out b/ql/src/test/results/clientpositive/perf/spark/query26.q.out
index cd5d46e..9e65060 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query26.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query26.q.out
@@ -254,7 +254,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8
                 Statistics: Num rows: 210822976 Data size: 28549666139 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: _col0 (type: string), (UDFToDouble(_col1) / _col2) (type: double), (_col3 / _col4) (type: decimal(37,22)), (_col5 / _col6) (type: decimal(37,22)), (_col7 / _col8) (type: decimal(37,22))
+                  expressions: _col0 (type: string), (UDFToDouble(_col1) / _col2) (type: double), CAST( (_col3 / _col4) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col5 / _col6) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col7 / _col8) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0, _col1, _col2, _col3, _col4
                   Statistics: Num rows: 210822976 Data size: 28549666139 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
@@ -263,12 +263,12 @@ STAGE PLANS:
                     sort order: +
                     Statistics: Num rows: 210822976 Data size: 28549666139 Basic stats: COMPLETE Column stats: NONE
                     TopN Hash Memory Usage: 0.1
-                    value expressions: _col1 (type: double), _col2 (type: decimal(37,22)), _col3 (type: decimal(37,22)), _col4 (type: decimal(37,22))
+                    value expressions: _col1 (type: double), _col2 (type: decimal(11,6)), _col3 (type: decimal(11,6)), _col4 (type: decimal(11,6))
         Reducer 6 
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: double), VALUE._col1 (type: decimal(37,22)), VALUE._col2 (type: decimal(37,22)), VALUE._col3 (type: decimal(37,22))
+                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: double), VALUE._col1 (type: decimal(11,6)), VALUE._col2 (type: decimal(11,6)), VALUE._col3 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4
                 Statistics: Num rows: 210822976 Data size: 28549666139 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/perf/spark/query27.q.out b/ql/src/test/results/clientpositive/perf/spark/query27.q.out
index 9adfe94..7192f8d 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query27.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query27.q.out
@@ -262,7 +262,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10
                 Statistics: Num rows: 1264972921 Data size: 111596278389 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: _col0 (type: string), _col1 (type: string), grouping(_col2, 0L) (type: bigint), (UDFToDouble(_col3) / _col4) (type: double), (_col5 / _col6) (type: decimal(37,22)), (_col7 / _col8) (type: decimal(37,22)), (_col9 / _col10) (type: decimal(37,22))
+                  expressions: _col0 (type: string), _col1 (type: string), grouping(_col2, 0L) (type: bigint), (UDFToDouble(_col3) / _col4) (type: double), CAST( (_col5 / _col6) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col7 / _col8) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col9 / _col10) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6
                   Statistics: Num rows: 1264972921 Data size: 111596278389 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
@@ -271,12 +271,12 @@ STAGE PLANS:
                     sort order: ++
                     Statistics: Num rows: 1264972921 Data size: 111596278389 Basic stats: COMPLETE Column stats: NONE
                     TopN Hash Memory Usage: 0.1
-                    value expressions: _col2 (type: bigint), _col3 (type: double), _col4 (type: decimal(37,22)), _col5 (type: decimal(37,22)), _col6 (type: decimal(37,22))
+                    value expressions: _col2 (type: bigint), _col3 (type: double), _col4 (type: decimal(11,6)), _col5 (type: decimal(11,6)), _col6 (type: decimal(11,6))
         Reducer 6 
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: string), VALUE._col0 (type: bigint), VALUE._col1 (type: double), VALUE._col2 (type: decimal(37,22)), VALUE._col3 (type: decimal(37,22)), VALUE._col4 (type: decimal(37,22))
+                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: string), VALUE._col0 (type: bigint), VALUE._col1 (type: double), VALUE._col2 (type: decimal(11,6)), VALUE._col3 (type: decimal(11,6)), VALUE._col4 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6
                 Statistics: Num rows: 1264972921 Data size: 111596278389 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/perf/spark/query28.q.out b/ql/src/test/results/clientpositive/perf/spark/query28.q.out
index 3b657fb..f750bc9 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query28.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query28.q.out
@@ -298,7 +298,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -339,7 +339,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -380,7 +380,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -421,7 +421,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -462,7 +462,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -539,7 +539,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint)
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint)
                   outputColumnNames: _col0, _col1, _col2
                   Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
                   Map Join Operator
@@ -565,7 +565,7 @@ STAGE PLANS:
                       5 Reducer 18
                     Statistics: Num rows: 1 Data size: 1393 Basic stats: COMPLETE Column stats: NONE
                     Select Operator
-                      expressions: _col0 (type: decimal(37,22)), _col1 (type: bigint), _col2 (type: bigint), _col15 (type: decimal(37,22)), _col16 (type: bigint), _col17 (type: bigint), _col12 (type: decimal(37,22)), _col13 (type: bigint), _col14 (type: bigint), _col9 (type: decimal(37,22)), _col10 (type: bigint), _col11 (type: bigint), _col6 (type: decimal(37,22)), _col7 (type: bigint), _col8 (type: bigint), _col3 (type: decimal(37,22)), _col4 (type: bigint), _col5 (type: bigint)
+                      expressions: _col0 (type: decimal(11,6)), _col1 (type: bigint), _col2 (type: bigint), _col15 (type: decimal(11,6)), _col16 (type: bigint), _col17 (type: bigint), _col12 (type: decimal(11,6)), _col13 (type: bigint), _col14 (type: bigint), _col9 (type: decimal(11,6)), _col10 (type: bigint), _col11 (type: bigint), _col6 (type: decimal(11,6)), _col7 (type: bigint), _col8 (type: bigint), _col3 (type: decimal(11,6)), _col4 (type: bigint), _col5 (type: bigint)
                       outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17
                       Statistics: Num rows: 1 Data size: 1393 Basic stats: COMPLETE Column stats: NONE
                       File Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query30.q.out b/ql/src/test/results/clientpositive/perf/spark/query30.q.out
index d967209..24cf5f6 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query30.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query30.q.out
@@ -338,10 +338,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                       Select Operator
-                        expressions: ((_col1 / _col2) * 1.2) (type: decimal(38,11)), _col0 (type: string)
+                        expressions: (CAST( (_col1 / _col2) AS decimal(21,6)) * 1.2) (type: decimal(24,7)), _col0 (type: string)
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                         Reduce Output Operator
@@ -350,7 +350,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col1 (type: string)
                           Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
-                          value expressions: _col0 (type: decimal(38,11))
+                          value expressions: _col0 (type: decimal(24,7))
         Reducer 2 
             Reduce Operator Tree:
               Join Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query32.q.out b/ql/src/test/results/clientpositive/perf/spark/query32.q.out
index 5a5b4e9..4af34f2 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query32.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query32.q.out
@@ -289,10 +289,10 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 158394413 Data size: 21449785388 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null (type: boolean)
+                  predicate: CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null (type: boolean)
                   Statistics: Num rows: 158394413 Data size: 21449785388 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) (type: decimal(14,7))
+                    expressions: _col0 (type: int), CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) (type: decimal(14,7))
                     outputColumnNames: _col0, _col1
                     Statistics: Num rows: 158394413 Data size: 21449785388 Basic stats: COMPLETE Column stats: NONE
                     Reduce Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query44.q.out b/ql/src/test/results/clientpositive/perf/spark/query44.q.out
index 2b11f9b..4e169e6 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query44.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query44.q.out
@@ -208,17 +208,17 @@ STAGE PLANS:
                   outputColumnNames: _col1, _col2
                   Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                   Filter Operator
-                    predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                    predicate: CAST( (_col1 / _col2) AS decimal(11,6)) is not null (type: boolean)
                     Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                     Select Operator
-                      expressions: (_col1 / _col2) (type: decimal(37,22))
+                      expressions: CAST( (_col1 / _col2) AS decimal(11,6)) (type: decimal(11,6))
                       outputColumnNames: _col0
                       Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                       Reduce Output Operator
                         null sort order: 
                         sort order: 
                         Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
-                        value expressions: _col0 (type: decimal(37,22))
+                        value expressions: _col0 (type: decimal(11,6))
         Reducer 12 
             Execution mode: vectorized
             Reduce Operator Tree:
@@ -229,17 +229,17 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                  predicate: CAST( (_col1 / _col2) AS decimal(11,6)) is not null (type: boolean)
                   Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), (_col1 / _col2) (type: decimal(37,22))
+                    expressions: _col0 (type: int), CAST( (_col1 / _col2) AS decimal(11,6)) (type: decimal(11,6))
                     outputColumnNames: _col0, _col1
                     Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                     Reduce Output Operator
                       null sort order: 
                       sort order: 
                       Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
-                      value expressions: _col0 (type: int), _col1 (type: decimal(37,22))
+                      value expressions: _col0 (type: int), _col1 (type: decimal(11,6))
         Reducer 13 
             Reduce Operator Tree:
               Join Operator
@@ -254,7 +254,7 @@ STAGE PLANS:
                   predicate: (_col1 > (0.9 * _col2)) (type: boolean)
                   Statistics: Num rows: 3455947584198744 Data size: 613225345280533248 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
-                    key expressions: 0 (type: int), _col1 (type: decimal(37,22))
+                    key expressions: 0 (type: int), _col1 (type: decimal(11,6))
                     null sort order: az
                     sort order: +-
                     Map-reduce partition columns: 0 (type: int)
@@ -265,14 +265,14 @@ STAGE PLANS:
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: VALUE._col0 (type: int), KEY.reducesinkkey1 (type: decimal(37,22))
+                expressions: VALUE._col0 (type: int), KEY.reducesinkkey1 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 3455947584198744 Data size: 613225345280533248 Basic stats: COMPLETE Column stats: NONE
                 PTF Operator
                   Function definitions:
                       Input definition
                         input alias: ptf_0
-                        output shape: _col0: int, _col1: decimal(37,22)
+                        output shape: _col0: int, _col1: decimal(11,6)
                         type: WINDOWING
                       Windowing table definition
                         input alias: ptf_1
@@ -317,17 +317,17 @@ STAGE PLANS:
                   outputColumnNames: _col1, _col2
                   Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                   Filter Operator
-                    predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                    predicate: CAST( (_col1 / _col2) AS decimal(11,6)) is not null (type: boolean)
                     Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                     Select Operator
-                      expressions: (_col1 / _col2) (type: decimal(37,22))
+                      expressions: CAST( (_col1 / _col2) AS decimal(11,6)) (type: decimal(11,6))
                       outputColumnNames: _col0
                       Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
                       Reduce Output Operator
                         null sort order: 
                         sort order: 
                         Statistics: Num rows: 71999454 Data size: 6351812727 Basic stats: COMPLETE Column stats: NONE
-                        value expressions: _col0 (type: decimal(37,22))
+                        value expressions: _col0 (type: decimal(11,6))
         Reducer 2 
             Execution mode: vectorized
             Reduce Operator Tree:
@@ -338,17 +338,17 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                  predicate: CAST( (_col1 / _col2) AS decimal(11,6)) is not null (type: boolean)
                   Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), (_col1 / _col2) (type: decimal(37,22))
+                    expressions: _col0 (type: int), CAST( (_col1 / _col2) AS decimal(11,6)) (type: decimal(11,6))
                     outputColumnNames: _col0, _col1
                     Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
                     Reduce Output Operator
                       null sort order: 
                       sort order: 
                       Statistics: Num rows: 143998908 Data size: 12703625455 Basic stats: COMPLETE Column stats: NONE
-                      value expressions: _col0 (type: int), _col1 (type: decimal(37,22))
+                      value expressions: _col0 (type: int), _col1 (type: decimal(11,6))
         Reducer 3 
             Reduce Operator Tree:
               Join Operator
@@ -363,7 +363,7 @@ STAGE PLANS:
                   predicate: (_col1 > (0.9 * _col2)) (type: boolean)
                   Statistics: Num rows: 3455947584198744 Data size: 613225345280533248 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
-                    key expressions: 0 (type: int), _col1 (type: decimal(37,22))
+                    key expressions: 0 (type: int), _col1 (type: decimal(11,6))
                     null sort order: az
                     sort order: ++
                     Map-reduce partition columns: 0 (type: int)
@@ -374,14 +374,14 @@ STAGE PLANS:
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: VALUE._col0 (type: int), KEY.reducesinkkey1 (type: decimal(37,22))
+                expressions: VALUE._col0 (type: int), KEY.reducesinkkey1 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 3455947584198744 Data size: 613225345280533248 Basic stats: COMPLETE Column stats: NONE
                 PTF Operator
                   Function definitions:
                       Input definition
                         input alias: ptf_0
-                        output shape: _col0: int, _col1: decimal(37,22)
+                        output shape: _col0: int, _col1: decimal(11,6)
                         type: WINDOWING
                       Windowing table definition
                         input alias: ptf_1
diff --git a/ql/src/test/results/clientpositive/perf/spark/query6.q.out b/ql/src/test/results/clientpositive/perf/spark/query6.q.out
index cf78e34..4c6d99e 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query6.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query6.q.out
@@ -369,10 +369,10 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 231000 Data size: 331780228 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: CAST( (_col1 / _col2) AS decimal(16,6)) is not null (type: boolean)
+                  predicate: CAST( CAST( (_col1 / _col2) AS decimal(11,6)) AS decimal(16,6)) is not null (type: boolean)
                   Statistics: Num rows: 231000 Data size: 331780228 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: string), (1.2 * CAST( (_col1 / _col2) AS decimal(16,6))) (type: decimal(19,7))
+                    expressions: _col0 (type: string), (1.2 * CAST( CAST( (_col1 / _col2) AS decimal(11,6)) AS decimal(16,6))) (type: decimal(19,7))
                     outputColumnNames: _col0, _col1
                     Statistics: Num rows: 231000 Data size: 331780228 Basic stats: COMPLETE Column stats: NONE
                     Reduce Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query65.q.out b/ql/src/test/results/clientpositive/perf/spark/query65.q.out
index 69d8f9b..b3b2e66 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query65.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query65.q.out
@@ -230,10 +230,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 158398803 Data size: 13973988377 Basic stats: COMPLETE Column stats: NONE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 158398803 Data size: 13973988377 Basic stats: COMPLETE Column stats: NONE
                       Select Operator
-                        expressions: _col0 (type: int), (0.1 * (_col1 / _col2)) (type: decimal(38,12))
+                        expressions: _col0 (type: int), (0.1 * CAST( (_col1 / _col2) AS decimal(21,6))) (type: decimal(23,7))
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 158398803 Data size: 13973988377 Basic stats: COMPLETE Column stats: NONE
                         Reduce Output Operator
@@ -242,7 +242,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col0 (type: int)
                           Statistics: Num rows: 158398803 Data size: 13973988377 Basic stats: COMPLETE Column stats: NONE
-                          value expressions: _col1 (type: decimal(38,12))
+                          value expressions: _col1 (type: decimal(23,7))
         Reducer 2 
             Reduce Operator Tree:
               Join Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query7.q.out b/ql/src/test/results/clientpositive/perf/spark/query7.q.out
index 1508d8b..e5e643b 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query7.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query7.q.out
@@ -254,7 +254,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8
                 Statistics: Num rows: 421657640 Data size: 37198759433 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: _col0 (type: string), (UDFToDouble(_col1) / _col2) (type: double), (_col3 / _col4) (type: decimal(37,22)), (_col5 / _col6) (type: decimal(37,22)), (_col7 / _col8) (type: decimal(37,22))
+                  expressions: _col0 (type: string), (UDFToDouble(_col1) / _col2) (type: double), CAST( (_col3 / _col4) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col5 / _col6) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col7 / _col8) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0, _col1, _col2, _col3, _col4
                   Statistics: Num rows: 421657640 Data size: 37198759433 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
@@ -263,12 +263,12 @@ STAGE PLANS:
                     sort order: +
                     Statistics: Num rows: 421657640 Data size: 37198759433 Basic stats: COMPLETE Column stats: NONE
                     TopN Hash Memory Usage: 0.1
-                    value expressions: _col1 (type: double), _col2 (type: decimal(37,22)), _col3 (type: decimal(37,22)), _col4 (type: decimal(37,22))
+                    value expressions: _col1 (type: double), _col2 (type: decimal(11,6)), _col3 (type: decimal(11,6)), _col4 (type: decimal(11,6))
         Reducer 6 
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: double), VALUE._col1 (type: decimal(37,22)), VALUE._col2 (type: decimal(37,22)), VALUE._col3 (type: decimal(37,22))
+                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: double), VALUE._col1 (type: decimal(11,6)), VALUE._col2 (type: decimal(11,6)), VALUE._col3 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4
                 Statistics: Num rows: 421657640 Data size: 37198759433 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/perf/spark/query81.q.out b/ql/src/test/results/clientpositive/perf/spark/query81.q.out
index 41a561f..8845e75 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query81.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query81.q.out
@@ -339,10 +339,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                       Select Operator
-                        expressions: ((_col1 / _col2) * 1.2) (type: decimal(38,11)), _col0 (type: string)
+                        expressions: (CAST( (_col1 / _col2) AS decimal(21,6)) * 1.2) (type: decimal(24,7)), _col0 (type: string)
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
                         Reduce Output Operator
@@ -351,7 +351,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col1 (type: string)
                           Statistics: Num rows: 11000000 Data size: 11163678945 Basic stats: COMPLETE Column stats: NONE
-                          value expressions: _col0 (type: decimal(38,11))
+                          value expressions: _col0 (type: decimal(24,7))
         Reducer 2 
             Reduce Operator Tree:
               Join Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query85.q.out b/ql/src/test/results/clientpositive/perf/spark/query85.q.out
index 709c0cd..afe1c60 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query85.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query85.q.out
@@ -473,11 +473,11 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6
                 Statistics: Num rows: 26953250 Data size: 3664862518 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (UDFToDouble(_col1) / _col2) (type: double), (_col3 / _col4) (type: decimal(37,22)), (_col5 / _col6) (type: decimal(37,22)), substr(_col0, 1, 20) (type: string)
+                  expressions: (UDFToDouble(_col1) / _col2) (type: double), CAST( (_col3 / _col4) AS decimal(11,6)) (type: decimal(11,6)), CAST( (_col5 / _col6) AS decimal(11,6)) (type: decimal(11,6)), substr(_col0, 1, 20) (type: string)
                   outputColumnNames: _col4, _col5, _col6, _col7
                   Statistics: Num rows: 26953250 Data size: 3664862518 Basic stats: COMPLETE Column stats: NONE
                   Reduce Output Operator
-                    key expressions: _col7 (type: string), _col4 (type: double), _col5 (type: decimal(37,22)), _col6 (type: decimal(37,22))
+                    key expressions: _col7 (type: string), _col4 (type: double), _col5 (type: decimal(11,6)), _col6 (type: decimal(11,6))
                     null sort order: zzzz
                     sort order: ++++
                     Statistics: Num rows: 26953250 Data size: 3664862518 Basic stats: COMPLETE Column stats: NONE
@@ -486,7 +486,7 @@ STAGE PLANS:
             Execution mode: vectorized
             Reduce Operator Tree:
               Select Operator
-                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: double), KEY.reducesinkkey2 (type: decimal(37,22)), KEY.reducesinkkey3 (type: decimal(37,22))
+                expressions: KEY.reducesinkkey0 (type: string), KEY.reducesinkkey1 (type: double), KEY.reducesinkkey2 (type: decimal(11,6)), KEY.reducesinkkey3 (type: decimal(11,6))
                 outputColumnNames: _col0, _col1, _col2, _col3
                 Statistics: Num rows: 26953250 Data size: 3664862518 Basic stats: COMPLETE Column stats: NONE
                 Limit
diff --git a/ql/src/test/results/clientpositive/perf/spark/query9.q.out b/ql/src/test/results/clientpositive/perf/spark/query9.q.out
index a106b47..1719eab 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query9.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query9.q.out
@@ -519,7 +519,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -537,7 +537,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -573,7 +573,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -591,7 +591,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -627,7 +627,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -645,7 +645,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -681,7 +681,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -717,7 +717,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -735,7 +735,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -753,7 +753,7 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1
                 Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
-                  expressions: (_col0 / _col1) (type: decimal(37,22))
+                  expressions: CAST( (_col0 / _col1) AS decimal(11,6)) (type: decimal(11,6))
                   outputColumnNames: _col0
                   Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: NONE
                   Spark HashTable Sink Operator
@@ -945,7 +945,7 @@ STAGE PLANS:
                                                       1 Reducer 31
                                                     Statistics: Num rows: 36 Data size: 52380 Basic stats: COMPLETE Column stats: NONE
                                                     Select Operator
-                                                      expressions: CASE WHEN (_col1) THEN (_col2) ELSE (_col3) END (type: decimal(37,22)), CASE WHEN (_col4) THEN (_col5) ELSE (_col6) END (type: decimal(37,22)), CASE WHEN (_col7) THEN (_col8) ELSE (_col9) END (type: decimal(37,22)), CASE WHEN (_col10) THEN (_col11) ELSE (_col12) END (type: decimal(37,22)), CASE WHEN (_col13) THEN (_col14) ELSE (_col15) END (type: decimal(37,22))
+                                                      expressions: CASE WHEN (_col1) THEN (_col2) ELSE (_col3) END (type: decimal(11,6)), CASE WHEN (_col4) THEN (_col5) ELSE (_col6) END (type: decimal(11,6)), CASE WHEN (_col7) THEN (_col8) ELSE (_col9) END (type: decimal(11,6)), CASE WHEN (_col10) THEN (_col11) ELSE (_col12) END (type: decimal(11,6)), CASE WHEN (_col13) THEN (_col14) ELSE (_col15) END (type: decimal(11,6))
                                                       outputColumnNames: _col0, _col1, _col2, _col3, _col4
                                                       Statistics: Num rows: 36 Data size: 52380 Basic stats: COMPLETE Column stats: NONE
                                                       File Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/spark/query92.q.out b/ql/src/test/results/clientpositive/perf/spark/query92.q.out
index cbbdbfa..16b6926 100644
--- a/ql/src/test/results/clientpositive/perf/spark/query92.q.out
+++ b/ql/src/test/results/clientpositive/perf/spark/query92.q.out
@@ -293,10 +293,10 @@ STAGE PLANS:
                 outputColumnNames: _col0, _col1, _col2
                 Statistics: Num rows: 79201469 Data size: 10769109250 Basic stats: COMPLETE Column stats: NONE
                 Filter Operator
-                  predicate: CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null (type: boolean)
+                  predicate: CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null (type: boolean)
                   Statistics: Num rows: 79201469 Data size: 10769109250 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) (type: decimal(14,7))
+                    expressions: _col0 (type: int), CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) (type: decimal(14,7))
                     outputColumnNames: _col0, _col1
                     Statistics: Num rows: 79201469 Data size: 10769109250 Basic stats: COMPLETE Column stats: NONE
                     Reduce Output Operator
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_ext_query1.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_ext_query1.q.out
index f318110..2cda493 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_ext_query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_ext_query1.q.out
@@ -78,8 +78,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cum
                   HiveProject(d_date_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                     HiveFilter(condition=[AND(=($6, 2000), IS NOT NULL($0))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-      HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-        HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+      HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+        HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
           HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
             HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
               HiveAggregate(group=[{1, 2}], agg#0=[sum($3)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
@@ -152,7 +152,7 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
   HiveProject(c_customer_id=[$1]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-    HiveJoin(condition=[AND(=($4, $7), >($5, $6))], joinType=[inner], algorithm=[none], cost=[{374952.69636986067 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+    HiveJoin(condition=[AND(=($4, $7), >($5, $6))], joinType=[inner], algorithm=[none], cost=[{9294.436653471346 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
       HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[{8.000928883962971E7 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
         HiveProject(c_customer_sk=[$0], c_customer_id=[$1]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
           HiveFilter(condition=[IS NOT NULL($0)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
@@ -171,8 +171,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cum
                   HiveProject(d_date_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                     HiveFilter(condition=[AND(=($6, 2000), IS NOT NULL($0))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-      HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-        HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+      HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+        HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
           HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
             HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
               HiveAggregate(group=[{1, 2}], agg#0=[sum($3)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query1.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query1.q.out
index 701ffb1..0492553 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query1.q.out
@@ -78,8 +78,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
                   HiveProject(d_date_sk=[$0])
                     HiveFilter(condition=[AND(=($6, 2000), IS NOT NULL($0))])
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-      HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0])
-        HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+      HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0])
+        HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
           HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
             HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2])
               HiveAggregate(group=[{1, 2}], agg#0=[sum($3)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query13.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query13.q.out
index cc9a306..9fab0cb 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query13.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query13.q.out
@@ -113,7 +113,7 @@ POSTHOOK: Input: default@store
 POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
-HiveProject($f0=[/(CAST($0):DOUBLE, $1)], $f1=[/($2, $3)], $f2=[/($4, $5)], $f3=[CAST($4):DECIMAL(17, 2)])
+HiveProject($f0=[/(CAST($0):DOUBLE, $1)], $f1=[CAST(/($2, $3)):DECIMAL(11, 6)], $f2=[CAST(/($4, $5)):DECIMAL(11, 6)], $f3=[CAST($4):DECIMAL(17, 2)])
   HiveAggregate(group=[{}], agg#0=[sum($9)], agg#1=[count($9)], agg#2=[sum($10)], agg#3=[count($10)], agg#4=[sum($11)], agg#5=[count($11)])
     HiveJoin(condition=[=($29, $8)], joinType=[inner], algorithm=[none], cost=[not available])
       HiveJoin(condition=[AND(=($6, $26), OR(AND($20, $21, $15, $27), AND($22, $23, $16, $28), AND($24, $25, $17, $28)))], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query14.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query14.q.out
index 753b01f..adb4a9b 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query14.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query14.q.out
@@ -292,8 +292,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                                             HiveProject(i_item_sk=[$0], i_brand_id=[$7], i_class_id=[$9], i_category_id=[$11])
                                               HiveFilter(condition=[AND(IS NOT NULL($11), IS NOT NULL($7), IS NOT NULL($9), IS NOT NULL($0))])
                                                 HiveTableScan(table=[[default, item]], table:alias=[iws])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
@@ -389,8 +389,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                                             HiveProject(i_item_sk=[$0], i_brand_id=[$7], i_class_id=[$9], i_category_id=[$11])
                                               HiveFilter(condition=[AND(IS NOT NULL($11), IS NOT NULL($7), IS NOT NULL($9), IS NOT NULL($0))])
                                                 HiveTableScan(table=[[default, item]], table:alias=[iws])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
@@ -486,8 +486,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                                             HiveProject(i_item_sk=[$0], i_brand_id=[$7], i_class_id=[$9], i_category_id=[$11])
                                               HiveFilter(condition=[AND(IS NOT NULL($11), IS NOT NULL($7), IS NOT NULL($9), IS NOT NULL($0))])
                                                 HiveTableScan(table=[[default, item]], table:alias=[iws])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query18.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query18.q.out
index c527b42..c848aea 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query18.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query18.q.out
@@ -80,7 +80,7 @@ POSTHOOK: Input: default@item
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$1], sort1=[$2], sort2=[$3], sort3=[$0], dir0=[ASC], dir1=[ASC], dir2=[ASC], dir3=[ASC], fetch=[100])
-  HiveProject($f0=[$3], $f1=[$2], $f2=[$1], $f3=[$0], $f4=[/($4, $5)], $f5=[/($6, $7)], $f6=[/($8, $9)], $f7=[/($10, $11)], $f8=[/($12, $13)], $f9=[/($14, $15)], $f10=[/($16, $17)])
+  HiveProject($f0=[$3], $f1=[$2], $f2=[$1], $f3=[$0], $f4=[CAST(/($4, $5)):DECIMAL(16, 6)], $f5=[CAST(/($6, $7)):DECIMAL(16, 6)], $f6=[CAST(/($8, $9)):DECIMAL(16, 6)], $f7=[CAST(/($10, $11)):DECIMAL(16, 6)], $f8=[CAST(/($12, $13)):DECIMAL(16, 6)], $f9=[CAST(/($14, $15)):DECIMAL(16, 6)], $f10=[CAST(/($16, $17)):DECIMAL(16, 6)])
     HiveAggregate(group=[{5, 6, 7, 10}], groups=[[{5, 6, 7, 10}, {6, 7, 10}, {7, 10}, {10}, {}]], agg#0=[sum($15)], agg#1=[count($15)], agg#2=[sum($16)], agg#3=[count($16)], agg#4=[sum($17)], agg#5=[count($17)], agg#6=[sum($18)], agg#7=[count($18)], agg#8=[sum($19)], agg#9=[count($19)], agg#10=[sum($3)], agg#11=[count($3)], agg#12=[sum($22)], agg#13=[count($22)])
       HiveJoin(condition=[=($12, $0)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveJoin(condition=[=($1, $8)], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query24.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query24.q.out
index 287f03b..a210632 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query24.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query24.q.out
@@ -146,8 +146,8 @@ HiveProject($f0=[$0], $f1=[$1], $f2=[$2], $f3=[$3])
                           HiveProject(s_store_sk=[$0], s_store_name=[$5], s_state=[$24], s_zip=[$25])
                             HiveFilter(condition=[AND(=($10, 7), IS NOT NULL($0), IS NOT NULL($25))])
                               HiveTableScan(table=[[default, store]], table:alias=[store])
-    HiveProject(_o__c0=[*(0.05:DECIMAL(3, 2), /($0, $1))])
-      HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+    HiveProject(_o__c0=[*(0.05:DECIMAL(3, 2), CAST(/($0, $1)):DECIMAL(21, 6))])
+      HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(21, 6))])
         HiveProject($f0=[$0], $f1=[$1])
           HiveAggregate(group=[{}], agg#0=[sum($10)], agg#1=[count($10)])
             HiveProject(c_first_name=[$0], c_last_name=[$1], ca_state=[$2], s_store_name=[$3], s_state=[$4], i_current_price=[$5], i_size=[$6], i_color=[$7], i_units=[$8], i_manager_id=[$9], $f10=[$10])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query26.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query26.q.out
index 8437af1..dcab8e8 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query26.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query26.q.out
@@ -52,7 +52,7 @@ POSTHOOK: Input: default@promotion
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
-  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[/($3, $4)], $f3=[/($5, $6)], $f4=[/($7, $8)])
+  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[CAST(/($3, $4)):DECIMAL(11, 6)], $f3=[CAST(/($5, $6)):DECIMAL(11, 6)], $f4=[CAST(/($7, $8)):DECIMAL(11, 6)])
     HiveAggregate(group=[{1}], agg#0=[sum($6)], agg#1=[count($6)], agg#2=[sum($7)], agg#3=[count($7)], agg#4=[sum($9)], agg#5=[count($9)], agg#6=[sum($8)], agg#7=[count($8)])
       HiveJoin(condition=[=($4, $0)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveProject(i_item_sk=[$0], i_item_id=[$1])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query27.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query27.q.out
index 601364a..c0f1462 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query27.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query27.q.out
@@ -56,7 +56,7 @@ POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC], fetch=[100])
-  HiveProject(i_item_id=[$0], s_state=[$1], g_state=[grouping($10, 0:BIGINT)], agg1=[/(CAST($2):DOUBLE, $3)], agg2=[/($4, $5)], agg3=[/($6, $7)], agg4=[/($8, $9)])
+  HiveProject(i_item_id=[$0], s_state=[$1], g_state=[grouping($10, 0:BIGINT)], agg1=[/(CAST($2):DOUBLE, $3)], agg2=[CAST(/($4, $5)):DECIMAL(11, 6)], agg3=[CAST(/($6, $7)):DECIMAL(11, 6)], agg4=[CAST(/($8, $9)):DECIMAL(11, 6)])
     HiveAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], agg#0=[sum($2)], agg#1=[count($2)], agg#2=[sum($3)], agg#3=[count($3)], agg#4=[sum($4)], agg#5=[count($4)], agg#6=[sum($5)], agg#7=[count($5)], GROUPING__ID=[GROUPING__ID()])
       HiveProject($f0=[$1], $f1=[$13], $f2=[$6], $f3=[$7], $f4=[$9], $f5=[$8])
         HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query28.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query28.q.out
index 5fe992a..7e76f6d 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query28.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query28.q.out
@@ -118,27 +118,27 @@ HiveProject($f0=[$0], $f1=[$1], $f2=[$2], $f00=[$15], $f10=[$16], $f20=[$17], $f
       HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
         HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
           HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
-            HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
               HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
                 HiveFilter(condition=[AND(BETWEEN(false, $10, 0, 5), OR(BETWEEN(false, $12, 11:DECIMAL(12, 2), 21:DECIMAL(2, 0)), BETWEEN(false, $19, 460:DECIMAL(12, 2), 1460:DECIMAL(4, 0)), BETWEEN(false, $11, 14:DECIMAL(12, 2), 34:DECIMAL(2, 0))))])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-            HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
               HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
                 HiveFilter(condition=[AND(BETWEEN(false, $10, 26, 30), OR(BETWEEN(false, $12, 28:DECIMAL(12, 2), 38:DECIMAL(2, 0)), BETWEEN(false, $19, 2513:DECIMAL(12, 2), 3513:DECIMAL(4, 0)), BETWEEN(false, $11, 42:DECIMAL(12, 2), 62:DECIMAL(2, 0))))])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-          HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+          HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
             HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
               HiveFilter(condition=[AND(BETWEEN(false, $10, 21, 25), OR(BETWEEN(false, $12, 135:DECIMAL(12, 2), 145:DECIMAL(3, 0)), BETWEEN(false, $19, 14180:DECIMAL(12, 2), 15180:DECIMAL(5, 0)), BETWEEN(false, $11, 38:DECIMAL(12, 2), 58:DECIMAL(2, 0))))])
                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-        HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+        HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
           HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
             HiveFilter(condition=[AND(BETWEEN(false, $10, 16, 20), OR(BETWEEN(false, $12, 142:DECIMAL(12, 2), 152:DECIMAL(3, 0)), BETWEEN(false, $19, 3054:DECIMAL(12, 2), 4054:DECIMAL(4, 0)), BETWEEN(false, $11, 80:DECIMAL(12, 2), 100:DECIMAL(3, 0))))])
               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-      HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
         HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
           HiveFilter(condition=[AND(BETWEEN(false, $10, 11, 15), OR(BETWEEN(false, $12, 66:DECIMAL(12, 2), 76:DECIMAL(2, 0)), BETWEEN(false, $19, 920:DECIMAL(12, 2), 1920:DECIMAL(4, 0)), BETWEEN(false, $11, 4:DECIMAL(12, 2), 24:DECIMAL(2, 0))))])
             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
       HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
         HiveFilter(condition=[AND(BETWEEN(false, $10, 6, 10), OR(BETWEEN(false, $12, 91:DECIMAL(12, 2), 101:DECIMAL(3, 0)), BETWEEN(false, $19, 1430:DECIMAL(12, 2), 2430:DECIMAL(4, 0)), BETWEEN(false, $11, 32:DECIMAL(12, 2), 52:DECIMAL(2, 0))))])
           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query30.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query30.q.out
index e1cc171..6fd6bfc 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query30.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query30.q.out
@@ -96,8 +96,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], sort4=[$4], sort5=
                       HiveProject(d_date_sk=[$0])
                         HiveFilter(condition=[AND(=($6, 2002), IS NOT NULL($0))])
                           HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-          HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
-            HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+          HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
+            HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
               HiveAggregate(group=[{0}], agg#0=[sum($2)], agg#1=[count($2)])
                 HiveProject(ca_state=[$0], wr_returning_customer_sk=[$1], $f2=[$2])
                   HiveAggregate(group=[{1, 3}], agg#0=[sum($5)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query32.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query32.q.out
index 9a34c1c..434c31a 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query32.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query32.q.out
@@ -74,8 +74,8 @@ HiveAggregate(group=[{}], agg#0=[sum($2)])
       HiveProject(i_item_sk=[$0])
         HiveFilter(condition=[AND(=($13, 269), IS NOT NULL($0))])
           HiveTableScan(table=[[default, item]], table:alias=[item])
-    HiveProject(cs_item_sk=[$0], CAST=[CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7)])
-      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7))])
+    HiveProject(cs_item_sk=[$0], CAST=[CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7)])
+      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7))])
         HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
           HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
             HiveProject(cs_sold_date_sk=[$0], cs_item_sk=[$15], cs_ext_discount_amt=[$22])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query6.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query6.q.out
index 19410a8..29e0d43 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query6.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query6.q.out
@@ -94,8 +94,8 @@ HiveSortLimit(sort0=[$1], dir0=[ASC], fetch=[100])
                 HiveFilter(condition=[AND(IS NOT NULL($5), IS NOT NULL($0), IS NOT NULL($12))])
                   HiveTableScan(table=[[default, item]], table:alias=[i])
               HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
-                HiveProject(i_category=[$0], *=[*(1.2:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(16, 6))])
-                  HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(16, 6))])
+                HiveProject(i_category=[$0], *=[*(1.2:DECIMAL(2, 1), CAST(CAST(/($1, $2)):DECIMAL(11, 6)):DECIMAL(16, 6))])
+                  HiveFilter(condition=[IS NOT NULL(CAST(CAST(/($1, $2)):DECIMAL(11, 6)):DECIMAL(16, 6))])
                     HiveAggregate(group=[{12}], agg#0=[sum($5)], agg#1=[count($5)])
                       HiveFilter(condition=[IS NOT NULL($12)])
                         HiveTableScan(table=[[default, item]], table:alias=[j])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query65.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query65.q.out
index 5d7486c..ef48ec3 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query65.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query65.q.out
@@ -87,8 +87,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC], fetch=[100])
                     HiveProject(d_date_sk=[$0])
                       HiveFilter(condition=[AND(BETWEEN(false, $3, 1212, 1223), IS NOT NULL($0))])
                         HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-          HiveProject($f0=[$0], *=[*(0.1:DECIMAL(2, 1), /($1, $2))])
-            HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+          HiveProject($f0=[$0], *=[*(0.1:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(21, 6))])
+            HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
               HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
                 HiveProject(ss_item_sk=[$0], ss_store_sk=[$1], $f2=[$2])
                   HiveAggregate(group=[{1, 2}], agg#0=[sum($3)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query7.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query7.q.out
index 61e2ea4..ff14d6d 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query7.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query7.q.out
@@ -52,7 +52,7 @@ POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
-  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[/($3, $4)], $f3=[/($5, $6)], $f4=[/($7, $8)])
+  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[CAST(/($3, $4)):DECIMAL(11, 6)], $f3=[CAST(/($5, $6)):DECIMAL(11, 6)], $f4=[CAST(/($7, $8)):DECIMAL(11, 6)])
     HiveAggregate(group=[{1}], agg#0=[sum($6)], agg#1=[count($6)], agg#2=[sum($7)], agg#3=[count($7)], agg#4=[sum($9)], agg#5=[count($9)], agg#6=[sum($8)], agg#7=[count($8)])
       HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveProject(i_item_sk=[$0], i_item_id=[$1])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query81.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query81.q.out
index 0ce5feb..a4534d2 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query81.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query81.q.out
@@ -97,8 +97,8 @@ HiveProject(c_customer_id=[$0], c_salutation=[$1], c_first_name=[$2], c_last_nam
                         HiveProject(d_date_sk=[$0])
                           HiveFilter(condition=[AND(=($6, 1998), IS NOT NULL($0))])
                             HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-            HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
-              HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+            HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
+              HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
                 HiveAggregate(group=[{0}], agg#0=[sum($2)], agg#1=[count($2)])
                   HiveProject(ca_state=[$0], cr_returning_customer_sk=[$1], $f2=[$2])
                     HiveAggregate(group=[{1, 3}], agg#0=[sum($5)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query85.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query85.q.out
index 5e69ad8..c8f6ded 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query85.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query85.q.out
@@ -183,7 +183,7 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveProject(_o__c0=[$0], _o__c1=[$1], _o__c2=[$2], _o__c3=[$3])
   HiveSortLimit(sort0=[$7], sort1=[$4], sort2=[$5], sort3=[$6], dir0=[ASC], dir1=[ASC], dir2=[ASC], dir3=[ASC], fetch=[100])
-    HiveProject(_o__c0=[substr($0, 1, 20)], _o__c1=[/(CAST($1):DOUBLE, $2)], _o__c2=[/($3, $4)], _o__c3=[/($5, $6)], (tok_function avg (tok_table_or_col ws_quantity))=[/(CAST($1):DOUBLE, $2)], (tok_function avg (tok_table_or_col wr_refunded_cash))=[/($3, $4)], (tok_function avg (tok_table_or_col wr_fee))=[/($5, $6)], (tok_function substr (tok_table_or_col r_reason_desc) 1 20)=[substr($0, 1, 20)])
+    HiveProject(_o__c0=[substr($0, 1, 20)], _o__c1=[/(CAST($1):DOUBLE, $2)], _o__c2=[CAST(/($3, $4)):DECIMAL(11, 6)], _o__c3=[CAST(/($5, $6)):DECIMAL(11, 6)], (tok_function avg (tok_table_or_col ws_quantity))=[/(CAST($1):DOUBLE, $2)], (tok_function avg (tok_table_or_col wr_refunded_cash))=[CAST(/($3, $4)):DECIMAL(11, 6)], (tok_function avg (tok_table_or_col wr_fee))=[CAST(/($5, $6)):DECIMAL(11, 6)], (tok_function substr (tok_table_or_col r_reason_desc) 1 20)=[substr($0, 1, 20)])
       HiveAggregate(group=[{37}], agg#0=[sum($4)], agg#1=[count($4)], agg#2=[sum($28)], agg#3=[count($28)], agg#4=[sum($27)], agg#5=[count($27)])
         HiveJoin(condition=[=($2, $38)], joinType=[inner], algorithm=[none], cost=[not available])
           HiveJoin(condition=[AND(=($1, $21), =($3, $26), OR(AND($15, $16, $8), AND($17, $18, $9), AND($19, $20, $10)), OR(AND($30, $5), AND($31, $6), AND($32, $7)))], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query9.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query9.q.out
index 3a1e199..cb436c5 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query9.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query9.q.out
@@ -141,11 +141,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                                   HiveAggregate(group=[{}], agg#0=[count()])
                                     HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                       HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                              HiveProject($f0=[/($0, $1)])
+                              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                                 HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                                   HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                     HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                            HiveProject($f0=[/($0, $1)])
+                            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                               HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                                 HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -153,11 +153,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                             HiveAggregate(group=[{}], agg#0=[count()])
                               HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                        HiveProject($f0=[/($0, $1)])
+                        HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                           HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                             HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                      HiveProject($f0=[/($0, $1)])
+                      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                         HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                           HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -165,11 +165,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                       HiveAggregate(group=[{}], agg#0=[count()])
                         HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                  HiveProject($f0=[/($0, $1)])
+                  HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                     HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                       HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                         HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                HiveProject($f0=[/($0, $1)])
+                HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                   HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                     HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                       HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -177,11 +177,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                 HiveAggregate(group=[{}], agg#0=[count()])
                   HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                     HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-            HiveProject($f0=[/($0, $1)])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
               HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                 HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-          HiveProject($f0=[/($0, $1)])
+          HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
             HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
               HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -189,11 +189,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
           HiveAggregate(group=[{}], agg#0=[count()])
             HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-      HiveProject($f0=[/($0, $1)])
+      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
         HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
           HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
       HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
         HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
diff --git a/ql/src/test/results/clientpositive/perf/tez/cbo_query92.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query92.q.out
index f1640b1..7c9f736 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query92.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query92.q.out
@@ -78,8 +78,8 @@ HiveAggregate(group=[{}], agg#0=[sum($2)])
       HiveProject(i_item_sk=[$0])
         HiveFilter(condition=[AND(=($13, 269), IS NOT NULL($0))])
           HiveTableScan(table=[[default, item]], table:alias=[item])
-    HiveProject(ws_item_sk=[$0], CAST=[CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7)])
-      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7))])
+    HiveProject(ws_item_sk=[$0], CAST=[CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7)])
+      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7))])
         HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
           HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
             HiveProject(ws_sold_date_sk=[$0], ws_item_sk=[$3], ws_ext_discount_amt=[$22])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_ext_query1.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_ext_query1.q.out
index ac1394e..cc80973 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_ext_query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_ext_query1.q.out
@@ -77,8 +77,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cum
                   HiveProject(d_date_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                     HiveFilter(condition=[=($6, 2000)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-        HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-          HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+        HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+          HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
             HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
               HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                 HiveAggregate(group=[{1, 2}], agg#0=[sum($3)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
@@ -151,10 +151,10 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
   HiveProject(c_customer_id=[$1]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-    HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[{8.036998822876796E7 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+    HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[{8.000000566321465E7 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
       HiveProject(c_customer_sk=[$0], c_customer_id=[$1]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
         HiveTableScan(table=[[default, customer]], table:alias=[customer]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-      HiveJoin(condition=[AND(=($2, $5), >($3, $4))], joinType=[inner], algorithm=[none], cost=[{374952.69636986067 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+      HiveJoin(condition=[AND(=($2, $5), >($3, $4))], joinType=[inner], algorithm=[none], cost=[{9294.436653471346 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
         HiveJoin(condition=[=($0, $2)], joinType=[inner], algorithm=[none], cost=[{455187.9173657213 rows, 0.0 cpu, 0.0 io}]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
           HiveProject(s_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
             HiveFilter(condition=[=($24, _UTF-16LE'NM')]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
@@ -169,8 +169,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100]): rowcount = ###Masked###, cum
                   HiveProject(d_date_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                     HiveFilter(condition=[=($6, 2000)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-        HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
-          HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+        HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
+          HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
             HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
               HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
                 HiveAggregate(group=[{1, 2}], agg#0=[sum($3)]): rowcount = ###Masked###, cumulative cost = ###Masked###, id = ###Masked###
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query1.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query1.q.out
index 6eb5a95..210badb 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query1.q.out
@@ -77,8 +77,8 @@ HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
                   HiveProject(d_date_sk=[$0])
                     HiveFilter(condition=[=($6, 2000)])
                       HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-        HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0])
-          HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+        HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_store_sk=[$0])
+          HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
             HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
               HiveProject(sr_customer_sk=[$0], sr_store_sk=[$1], $f2=[$2])
                 HiveAggregate(group=[{1, 2}], agg#0=[sum($3)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query13.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query13.q.out
index b70f23c..b87661b 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query13.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query13.q.out
@@ -113,7 +113,7 @@ POSTHOOK: Input: default@store
 POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
-HiveProject($f0=[/(CAST($0):DOUBLE, $1)], $f1=[/($2, $3)], $f2=[/($4, $5)], $f3=[CAST($4):DECIMAL(17, 2)])
+HiveProject($f0=[/(CAST($0):DOUBLE, $1)], $f1=[CAST(/($2, $3)):DECIMAL(11, 6)], $f2=[CAST(/($4, $5)):DECIMAL(11, 6)], $f3=[CAST($4):DECIMAL(17, 2)])
   HiveAggregate(group=[{}], agg#0=[sum($15)], agg#1=[count($15)], agg#2=[sum($16)], agg#3=[count($16)], agg#4=[sum($17)], agg#5=[count($17)])
     HiveJoin(condition=[AND(=($13, $25), OR(AND($1, $2, $21, $26), AND($3, $4, $22, $27), AND($5, $6, $23, $27)))], joinType=[inner], algorithm=[none], cost=[not available])
       HiveJoin(condition=[=($0, $12)], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query14.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query14.q.out
index e751d07..eaa1def 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query14.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query14.q.out
@@ -291,8 +291,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                             HiveProject(d_date_sk=[$0])
                               HiveFilter(condition=[AND(=($6, 2000), =($8, 11))])
                                 HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
@@ -387,8 +387,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                             HiveProject(d_date_sk=[$0])
                               HiveFilter(condition=[AND(=($6, 2000), =($8, 11))])
                                 HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
@@ -483,8 +483,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], dir0=[ASC], dir1=[
                             HiveProject(d_date_sk=[$0])
                               HiveFilter(condition=[AND(=($6, 2000), =($8, 11))])
                                 HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-              HiveProject($f0=[/($0, $1)])
-                HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+                HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
                   HiveProject($f0=[$0], $f1=[$1])
                     HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
                       HiveProject($f0=[*(CAST($0):DECIMAL(10, 0), $1)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query18.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query18.q.out
index 82d5661..c5cd8b5 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query18.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query18.q.out
@@ -80,7 +80,7 @@ POSTHOOK: Input: default@item
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$1], sort1=[$2], sort2=[$3], sort3=[$0], dir0=[ASC], dir1=[ASC], dir2=[ASC], dir3=[ASC], fetch=[100])
-  HiveProject($f0=[$0], $f1=[$3], $f2=[$2], $f3=[$1], $f4=[/($4, $5)], $f5=[/($6, $7)], $f6=[/($8, $9)], $f7=[/($10, $11)], $f8=[/($12, $13)], $f9=[/($14, $15)], $f10=[/($16, $17)])
+  HiveProject($f0=[$0], $f1=[$3], $f2=[$2], $f3=[$1], $f4=[CAST(/($4, $5)):DECIMAL(16, 6)], $f5=[CAST(/($6, $7)):DECIMAL(16, 6)], $f6=[CAST(/($8, $9)):DECIMAL(16, 6)], $f7=[CAST(/($10, $11)):DECIMAL(16, 6)], $f8=[CAST(/($12, $13)):DECIMAL(16, 6)], $f9=[CAST(/($14, $15)):DECIMAL(16, 6)], $f10=[CAST(/($16, $17)):DECIMAL(16, 6)])
     HiveAggregate(group=[{1, 7, 8, 9}], groups=[[{1, 7, 8, 9}, {1, 8, 9}, {1, 9}, {1}, {}]], agg#0=[sum($14)], agg#1=[count($14)], agg#2=[sum($15)], agg#3=[count($15)], agg#4=[sum($16)], agg#5=[count($16)], agg#6=[sum($17)], agg#7=[count($17)], agg#8=[sum($18)], agg#9=[count($18)], agg#10=[sum($5)], agg#11=[count($5)], agg#12=[sum($21)], agg#13=[count($21)])
       HiveJoin(condition=[=($3, $22)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveJoin(condition=[=($13, $0)], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query24.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query24.q.out
index 4fe5b3a..8964952 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query24.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query24.q.out
@@ -145,8 +145,8 @@ HiveProject($f0=[$0], $f1=[$1], $f2=[$2], $f3=[$3])
                   HiveProject(i_item_sk=[$0], i_current_price=[$5], i_size=[$15], i_units=[$18], i_manager_id=[$20])
                     HiveFilter(condition=[=($17, _UTF-16LE'orchid')])
                       HiveTableScan(table=[[default, item]], table:alias=[item])
-    HiveProject(_o__c0=[*(0.05:DECIMAL(3, 2), /($0, $1))])
-      HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+    HiveProject(_o__c0=[*(0.05:DECIMAL(3, 2), CAST(/($0, $1)):DECIMAL(21, 6))])
+      HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(21, 6))])
         HiveProject($f0=[$0], $f1=[$1])
           HiveAggregate(group=[{}], agg#0=[sum($10)], agg#1=[count($10)])
             HiveProject(c_first_name=[$0], c_last_name=[$1], ca_state=[$2], s_store_name=[$3], s_state=[$4], i_current_price=[$5], i_size=[$6], i_color=[$7], i_units=[$8], i_manager_id=[$9], $f10=[$10])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query26.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query26.q.out
index e91d2b4..0e89889 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query26.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query26.q.out
@@ -52,7 +52,7 @@ POSTHOOK: Input: default@promotion
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
-  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[/($3, $4)], $f3=[/($5, $6)], $f4=[/($7, $8)])
+  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[CAST(/($3, $4)):DECIMAL(11, 6)], $f3=[CAST(/($5, $6)):DECIMAL(11, 6)], $f4=[CAST(/($7, $8)):DECIMAL(11, 6)])
     HiveAggregate(group=[{1}], agg#0=[sum($6)], agg#1=[count($6)], agg#2=[sum($7)], agg#3=[count($7)], agg#4=[sum($9)], agg#5=[count($9)], agg#6=[sum($8)], agg#7=[count($8)])
       HiveJoin(condition=[=($4, $0)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveProject(i_item_sk=[$0], i_item_id=[$1])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query27.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query27.q.out
index d01e0af..4ce4b8f 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query27.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query27.q.out
@@ -56,7 +56,7 @@ POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC], fetch=[100])
-  HiveProject(i_item_id=[$0], s_state=[$1], g_state=[grouping($10, 0:BIGINT)], agg1=[/(CAST($2):DOUBLE, $3)], agg2=[/($4, $5)], agg3=[/($6, $7)], agg4=[/($8, $9)])
+  HiveProject(i_item_id=[$0], s_state=[$1], g_state=[grouping($10, 0:BIGINT)], agg1=[/(CAST($2):DOUBLE, $3)], agg2=[CAST(/($4, $5)):DECIMAL(11, 6)], agg3=[CAST(/($6, $7)):DECIMAL(11, 6)], agg4=[CAST(/($8, $9)):DECIMAL(11, 6)])
     HiveAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], agg#0=[sum($2)], agg#1=[count($2)], agg#2=[sum($3)], agg#3=[count($3)], agg#4=[sum($4)], agg#5=[count($4)], agg#6=[sum($5)], agg#7=[count($5)], GROUPING__ID=[GROUPING__ID()])
       HiveProject($f0=[$1], $f1=[$13], $f2=[$6], $f3=[$7], $f4=[$9], $f5=[$8])
         HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query28.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query28.q.out
index 5fe992a..7e76f6d 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query28.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query28.q.out
@@ -118,27 +118,27 @@ HiveProject($f0=[$0], $f1=[$1], $f2=[$2], $f00=[$15], $f10=[$16], $f20=[$17], $f
       HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
         HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
           HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
-            HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
               HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
                 HiveFilter(condition=[AND(BETWEEN(false, $10, 0, 5), OR(BETWEEN(false, $12, 11:DECIMAL(12, 2), 21:DECIMAL(2, 0)), BETWEEN(false, $19, 460:DECIMAL(12, 2), 1460:DECIMAL(4, 0)), BETWEEN(false, $11, 14:DECIMAL(12, 2), 34:DECIMAL(2, 0))))])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-            HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
               HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
                 HiveFilter(condition=[AND(BETWEEN(false, $10, 26, 30), OR(BETWEEN(false, $12, 28:DECIMAL(12, 2), 38:DECIMAL(2, 0)), BETWEEN(false, $19, 2513:DECIMAL(12, 2), 3513:DECIMAL(4, 0)), BETWEEN(false, $11, 42:DECIMAL(12, 2), 62:DECIMAL(2, 0))))])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-          HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+          HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
             HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
               HiveFilter(condition=[AND(BETWEEN(false, $10, 21, 25), OR(BETWEEN(false, $12, 135:DECIMAL(12, 2), 145:DECIMAL(3, 0)), BETWEEN(false, $19, 14180:DECIMAL(12, 2), 15180:DECIMAL(5, 0)), BETWEEN(false, $11, 38:DECIMAL(12, 2), 58:DECIMAL(2, 0))))])
                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-        HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+        HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
           HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
             HiveFilter(condition=[AND(BETWEEN(false, $10, 16, 20), OR(BETWEEN(false, $12, 142:DECIMAL(12, 2), 152:DECIMAL(3, 0)), BETWEEN(false, $19, 3054:DECIMAL(12, 2), 4054:DECIMAL(4, 0)), BETWEEN(false, $11, 80:DECIMAL(12, 2), 100:DECIMAL(3, 0))))])
               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-      HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
         HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
           HiveFilter(condition=[AND(BETWEEN(false, $10, 11, 15), OR(BETWEEN(false, $12, 66:DECIMAL(12, 2), 76:DECIMAL(2, 0)), BETWEEN(false, $19, 920:DECIMAL(12, 2), 1920:DECIMAL(4, 0)), BETWEEN(false, $11, 4:DECIMAL(12, 2), 24:DECIMAL(2, 0))))])
             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)], $f1=[$1], $f2=[$2])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)], $f1=[$1], $f2=[$2])
       HiveAggregate(group=[{}], agg#0=[sum($12)], agg#1=[count($12)], agg#2=[count(DISTINCT $12)])
         HiveFilter(condition=[AND(BETWEEN(false, $10, 6, 10), OR(BETWEEN(false, $12, 91:DECIMAL(12, 2), 101:DECIMAL(3, 0)), BETWEEN(false, $19, 1430:DECIMAL(12, 2), 2430:DECIMAL(4, 0)), BETWEEN(false, $11, 32:DECIMAL(12, 2), 52:DECIMAL(2, 0))))])
           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query30.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query30.q.out
index b52604b..ae81e13 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query30.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query30.q.out
@@ -96,8 +96,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], sort3=[$3], sort4=[$4], sort5=
                       HiveProject(d_date_sk=[$0])
                         HiveFilter(condition=[=($6, 2002)])
                           HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-          HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
-            HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+          HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
+            HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
               HiveAggregate(group=[{0}], agg#0=[sum($2)], agg#1=[count($2)])
                 HiveProject(ca_state=[$0], wr_returning_customer_sk=[$1], $f2=[$2])
                   HiveAggregate(group=[{1, 3}], agg#0=[sum($5)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query32.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query32.q.out
index 2041398..ddeb3fd 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query32.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query32.q.out
@@ -74,8 +74,8 @@ HiveAggregate(group=[{}], agg#0=[sum($2)])
       HiveProject(i_item_sk=[$0])
         HiveFilter(condition=[=($13, 269)])
           HiveTableScan(table=[[default, item]], table:alias=[item])
-    HiveProject(cs_item_sk=[$0], CAST3=[CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7)])
-      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7))])
+    HiveProject(cs_item_sk=[$0], CAST3=[CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7)])
+      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7))])
         HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
           HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
             HiveProject(cs_sold_date_sk=[$0], cs_item_sk=[$15], cs_ext_discount_amt=[$22])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query6.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query6.q.out
index c2151f9..a25bb08 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query6.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query6.q.out
@@ -92,8 +92,8 @@ HiveSortLimit(sort0=[$1], dir0=[ASC], fetch=[100])
                   HiveProject(i_item_sk=[$0], i_current_price=[$5], i_category=[$12])
                     HiveFilter(condition=[AND(IS NOT NULL($5), IS NOT NULL($12))])
                       HiveTableScan(table=[[default, item]], table:alias=[i])
-                  HiveProject(i_category=[$0], *=[*(1.2:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(16, 6))])
-                    HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(16, 6))])
+                  HiveProject(i_category=[$0], *=[*(1.2:DECIMAL(2, 1), CAST(CAST(/($1, $2)):DECIMAL(11, 6)):DECIMAL(16, 6))])
+                    HiveFilter(condition=[IS NOT NULL(CAST(CAST(/($1, $2)):DECIMAL(11, 6)):DECIMAL(16, 6))])
                       HiveAggregate(group=[{12}], agg#0=[sum($5)], agg#1=[count($5)])
                         HiveFilter(condition=[IS NOT NULL($12)])
                           HiveTableScan(table=[[default, item]], table:alias=[j])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query65.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query65.q.out
index 6028a5c..af74630 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query65.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query65.q.out
@@ -83,8 +83,8 @@ HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC], fetch=[100])
                     HiveProject(d_date_sk=[$0])
                       HiveFilter(condition=[BETWEEN(false, $3, 1212, 1223)])
                         HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-          HiveProject($f0=[$0], *=[*(0.1:DECIMAL(2, 1), /($1, $2))])
-            HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+          HiveProject($f0=[$0], *=[*(0.1:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(21, 6))])
+            HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
               HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
                 HiveProject(ss_item_sk=[$0], ss_store_sk=[$1], $f2=[$2])
                   HiveAggregate(group=[{1, 2}], agg#0=[sum($3)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query7.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query7.q.out
index 56c09fc..77580d8 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query7.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query7.q.out
@@ -52,7 +52,7 @@ POSTHOOK: Input: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveSortLimit(sort0=[$0], dir0=[ASC], fetch=[100])
-  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[/($3, $4)], $f3=[/($5, $6)], $f4=[/($7, $8)])
+  HiveProject($f0=[$0], $f1=[/(CAST($1):DOUBLE, $2)], $f2=[CAST(/($3, $4)):DECIMAL(11, 6)], $f3=[CAST(/($5, $6)):DECIMAL(11, 6)], $f4=[CAST(/($7, $8)):DECIMAL(11, 6)])
     HiveAggregate(group=[{1}], agg#0=[sum($6)], agg#1=[count($6)], agg#2=[sum($7)], agg#3=[count($7)], agg#4=[sum($9)], agg#5=[count($9)], agg#6=[sum($8)], agg#7=[count($8)])
       HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
         HiveProject(i_item_sk=[$0], i_item_id=[$1])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query81.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query81.q.out
index f94e41d..1b985b5 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query81.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query81.q.out
@@ -97,8 +97,8 @@ HiveProject(c_customer_id=[$0], c_salutation=[$1], c_first_name=[$2], c_last_nam
                         HiveProject(d_date_sk=[$0])
                           HiveFilter(condition=[=($6, 1998)])
                             HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
-            HiveProject(_o__c0=[*(/($1, $2), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
-              HiveFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($2))])
+            HiveProject(_o__c0=[*(CAST(/($1, $2)):DECIMAL(21, 6), 1.2:DECIMAL(2, 1))], ctr_state=[$0])
+              HiveFilter(condition=[IS NOT NULL(CAST(/($1, $2)):DECIMAL(21, 6))])
                 HiveAggregate(group=[{0}], agg#0=[sum($2)], agg#1=[count($2)])
                   HiveProject(ca_state=[$0], cr_returning_customer_sk=[$1], $f2=[$2])
                     HiveAggregate(group=[{1, 3}], agg#0=[sum($5)])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query85.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query85.q.out
index a9a4507..3432003 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query85.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query85.q.out
@@ -183,7 +183,7 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 CBO PLAN:
 HiveProject(_o__c0=[$0], _o__c1=[$1], _o__c2=[$2], _o__c3=[$3])
   HiveSortLimit(sort0=[$7], sort1=[$4], sort2=[$5], sort3=[$6], dir0=[ASC], dir1=[ASC], dir2=[ASC], dir3=[ASC], fetch=[100])
-    HiveProject(_o__c0=[substr($0, 1, 20)], _o__c1=[/(CAST($1):DOUBLE, $2)], _o__c2=[/($3, $4)], _o__c3=[/($5, $6)], (tok_function avg (tok_table_or_col ws_quantity))=[/(CAST($1):DOUBLE, $2)], (tok_function avg (tok_table_or_col wr_refunded_cash))=[/($3, $4)], (tok_function avg (tok_table_or_col wr_fee))=[/($5, $6)], (tok_function substr (tok_table_or_col r_reason_desc) 1 20)=[substr($0, 1, 20)])
+    HiveProject(_o__c0=[substr($0, 1, 20)], _o__c1=[/(CAST($1):DOUBLE, $2)], _o__c2=[CAST(/($3, $4)):DECIMAL(11, 6)], _o__c3=[CAST(/($5, $6)):DECIMAL(11, 6)], (tok_function avg (tok_table_or_col ws_quantity))=[/(CAST($1):DOUBLE, $2)], (tok_function avg (tok_table_or_col wr_refunded_cash))=[CAST(/($3, $4)):DECIMAL(11, 6)], (tok_function avg (tok_table_or_col wr_fee))=[CAST(/($5, $6)):DECIMAL(11, 6)], (tok_function substr (tok_table_or_col r_reason_desc) 1 20)=[substr($0, 1, 20)])
       HiveAggregate(group=[{1}], agg#0=[sum($5)], agg#1=[count($5)], agg#2=[sum($29)], agg#3=[count($29)], agg#4=[sum($28)], agg#5=[count($28)])
         HiveJoin(condition=[=($0, $26)], joinType=[inner], algorithm=[none], cost=[not available])
           HiveProject(r_reason_sk=[$0], r_reason_desc=[$2])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query9.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query9.q.out
index 4a92def..56541f2 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query9.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query9.q.out
@@ -141,11 +141,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                                   HiveAggregate(group=[{}], agg#0=[count()])
                                     HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                       HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                              HiveProject($f0=[/($0, $1)])
+                              HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                                 HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                                   HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                     HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                            HiveProject($f0=[/($0, $1)])
+                            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                               HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                                 HiveFilter(condition=[BETWEEN(false, $10, 1, 20)])
                                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -153,11 +153,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                             HiveAggregate(group=[{}], agg#0=[count()])
                               HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                        HiveProject($f0=[/($0, $1)])
+                        HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                           HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                             HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                      HiveProject($f0=[/($0, $1)])
+                      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                         HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                           HiveFilter(condition=[BETWEEN(false, $10, 21, 40)])
                             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -165,11 +165,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                       HiveAggregate(group=[{}], agg#0=[count()])
                         HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                  HiveProject($f0=[/($0, $1)])
+                  HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                     HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                       HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                         HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-                HiveProject($f0=[/($0, $1)])
+                HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
                   HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
                     HiveFilter(condition=[BETWEEN(false, $10, 41, 60)])
                       HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -177,11 +177,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
                 HiveAggregate(group=[{}], agg#0=[count()])
                   HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                     HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-            HiveProject($f0=[/($0, $1)])
+            HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
               HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
                 HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                   HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-          HiveProject($f0=[/($0, $1)])
+          HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
             HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
               HiveFilter(condition=[BETWEEN(false, $10, 61, 80)])
                 HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
@@ -189,11 +189,11 @@ HiveProject(bucket1=[CASE($1, $2, $3)], bucket2=[CASE($4, $5, $6)], bucket3=[CAS
           HiveAggregate(group=[{}], agg#0=[count()])
             HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
               HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-      HiveProject($f0=[/($0, $1)])
+      HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
         HiveAggregate(group=[{}], agg#0=[sum($17)], agg#1=[count($17)])
           HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
             HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(11, 6)])
       HiveAggregate(group=[{}], agg#0=[sum($21)], agg#1=[count($21)])
         HiveFilter(condition=[BETWEEN(false, $10, 81, 100)])
           HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query92.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query92.q.out
index b1cbf0c..28774eb 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query92.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query92.q.out
@@ -78,8 +78,8 @@ HiveAggregate(group=[{}], agg#0=[sum($2)])
       HiveProject(i_item_sk=[$0])
         HiveFilter(condition=[=($13, 269)])
           HiveTableScan(table=[[default, item]], table:alias=[item])
-    HiveProject(ws_item_sk=[$0], CAST3=[CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7)])
-      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), /($1, $2))):DECIMAL(14, 7))])
+    HiveProject(ws_item_sk=[$0], CAST3=[CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7)])
+      HiveFilter(condition=[IS NOT NULL(CAST(*(1.3:DECIMAL(2, 1), CAST(/($1, $2)):DECIMAL(11, 6))):DECIMAL(14, 7))])
         HiveAggregate(group=[{1}], agg#0=[sum($2)], agg#1=[count($2)])
           HiveJoin(condition=[=($3, $0)], joinType=[inner], algorithm=[none], cost=[not available])
             HiveProject(ws_sold_date_sk=[$0], ws_item_sk=[$3], ws_ext_discount_amt=[$22])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/mv_query44.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/mv_query44.q.out
index 195a7e4..1fcd766 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/mv_query44.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/mv_query44.q.out
@@ -171,7 +171,7 @@ Stage-0
                                                 Select Operator [SEL_132] (rows=1 width=112)
                                                   Output:["_col0"]
                                                   Filter Operator [FIL_131] (rows=1 width=120)
-                                                    predicate:(_col1 is not null and _col2 is not null)
+                                                    predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                     Select Operator [SEL_130] (rows=1 width=120)
                                                       Output:["_col1","_col2"]
                                                       Group By Operator [GBY_129] (rows=1 width=124)
@@ -192,7 +192,7 @@ Stage-0
                                                 Select Operator [SEL_123] (rows=62562 width=116)
                                                   Output:["_col0","_col1"]
                                                   Filter Operator [FIL_122] (rows=62562 width=124)
-                                                    predicate:(_col1 is not null and _col2 is not null)
+                                                    predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                     Group By Operator [GBY_121] (rows=62562 width=124)
                                                       Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                                                     <-Map 1 [SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query1.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query1.q.out
index 6358930..a5a177d 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query1.q.out
@@ -106,7 +106,7 @@ Stage-0
                             Select Operator [SEL_159] (rows=85 width=115)
                               Output:["_col0","_col1"]
                               Filter Operator [FIL_158] (rows=85 width=123)
-                                predicate:(_col1 is not null and _col2 is not null)
+                                predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                 Group By Operator [GBY_157] (rows=85 width=123)
                                   Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col1
                                   Select Operator [SEL_156] (rows=53634860 width=119)
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query14.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query14.q.out
index 4f811c0..69c570f 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query14.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query14.q.out
@@ -568,7 +568,7 @@ Stage-0
                                   Select Operator [SEL_1381] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1380] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1379] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 58 [CUSTOM_SIMPLE_EDGE]
@@ -813,7 +813,7 @@ Stage-0
                                   Select Operator [SEL_1397] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1396] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1395] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 61 [CUSTOM_SIMPLE_EDGE]
@@ -1000,7 +1000,7 @@ Stage-0
                                   Select Operator [SEL_1359] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1358] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1357] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 54 [CUSTOM_SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query1b.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query1b.q.out
index f6a9f09..a6d0d1a 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query1b.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query1b.q.out
@@ -389,10 +389,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 85 Data size: 10532 Basic stats: COMPLETE Column stats: COMPLETE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 85 Data size: 10532 Basic stats: COMPLETE Column stats: COMPLETE
                       Select Operator
-                        expressions: ((_col1 / _col2) * 1.2) (type: decimal(38,11)), _col0 (type: int)
+                        expressions: (CAST( (_col1 / _col2) AS decimal(21,6)) * 1.2) (type: decimal(24,7)), _col0 (type: int)
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 85 Data size: 9852 Basic stats: COMPLETE Column stats: COMPLETE
                         Reduce Output Operator
@@ -401,7 +401,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col1 (type: int)
                           Statistics: Num rows: 85 Data size: 9852 Basic stats: COMPLETE Column stats: COMPLETE
-                          value expressions: _col0 (type: decimal(38,11))
+                          value expressions: _col0 (type: decimal(24,7))
 
   Stage: Stage-0
     Fetch Operator
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query24.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query24.q.out
index eb60b78..87895bd 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query24.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query24.q.out
@@ -150,7 +150,7 @@ Stage-0
                 Select Operator [SEL_344] (rows=1 width=112)
                   Output:["_col0"]
                   Filter Operator [FIL_343] (rows=1 width=120)
-                    predicate:(_col0 is not null and _col1 is not null)
+                    predicate:CAST( (_col0 / _col1) AS decimal(21,6)) is not null
                     Group By Operator [GBY_342] (rows=1 width=120)
                       Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                     <-Reducer 11 [CUSTOM_SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query30.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query30.q.out
index cd52a25..e8f1957 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query30.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query30.q.out
@@ -138,7 +138,7 @@ Stage-0
                               Select Operator [SEL_212] (rows=17 width=198)
                                 Output:["_col0","_col1"]
                                 Filter Operator [FIL_211] (rows=17 width=206)
-                                  predicate:(_col1 is not null and _col2 is not null)
+                                  predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                   Group By Operator [GBY_210] (rows=17 width=206)
                                     Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col0
                                     Select Operator [SEL_209] (rows=13130761 width=201)
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query32.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query32.q.out
index c93fad2..2f94f86 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query32.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query32.q.out
@@ -144,7 +144,7 @@ Stage-0
                       Select Operator [SEL_124] (rows=62562 width=116)
                         Output:["_col0","_col1"]
                         Filter Operator [FIL_123] (rows=62562 width=124)
-                          predicate:CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null
+                          predicate:CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null
                           Group By Operator [GBY_122] (rows=62562 width=124)
                             Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                           <-Reducer 6 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query44.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query44.q.out
index 8591d36..e1691b5 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query44.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query44.q.out
@@ -150,7 +150,7 @@ Stage-0
                                                 Select Operator [SEL_132] (rows=1 width=112)
                                                   Output:["_col0"]
                                                   Filter Operator [FIL_131] (rows=1 width=120)
-                                                    predicate:(_col1 is not null and _col2 is not null)
+                                                    predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                     Select Operator [SEL_130] (rows=1 width=120)
                                                       Output:["_col1","_col2"]
                                                       Group By Operator [GBY_129] (rows=1 width=124)
@@ -171,7 +171,7 @@ Stage-0
                                                 Select Operator [SEL_123] (rows=62562 width=116)
                                                   Output:["_col0","_col1"]
                                                   Filter Operator [FIL_122] (rows=62562 width=124)
-                                                    predicate:(_col1 is not null and _col2 is not null)
+                                                    predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                     Group By Operator [GBY_121] (rows=62562 width=124)
                                                       Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                                                     <-Map 1 [SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query6.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query6.q.out
index 8d83692..0c82254 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query6.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query6.q.out
@@ -152,7 +152,7 @@ Stage-0
                                           Select Operator [SEL_209] (rows=10 width=202)
                                             Output:["_col0","_col1"]
                                             Filter Operator [FIL_208] (rows=10 width=210)
-                                              predicate:CAST( (_col1 / _col2) AS decimal(16,6)) is not null
+                                              predicate:CAST( CAST( (_col1 / _col2) AS decimal(11,6)) AS decimal(16,6)) is not null
                                               Group By Operator [GBY_207] (rows=10 width=210)
                                                 Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                                               <-Map 12 [SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query65.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query65.q.out
index a117443..4582eb6 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query65.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query65.q.out
@@ -170,7 +170,7 @@ Stage-0
                                 Select Operator [SEL_157] (rows=84 width=115)
                                   Output:["_col0","_col1"]
                                   Filter Operator [FIL_156] (rows=84 width=123)
-                                    predicate:(_col1 is not null and _col2 is not null)
+                                    predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                     Group By Operator [GBY_155] (rows=84 width=123)
                                       Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col1
                                       Select Operator [SEL_154] (rows=5255208 width=119)
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query81.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query81.q.out
index b18dc77..82e7c05 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query81.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query81.q.out
@@ -117,7 +117,7 @@ Stage-0
                                 Select Operator [SEL_211] (rows=12 width=198)
                                   Output:["_col0","_col1"]
                                   Filter Operator [FIL_210] (rows=12 width=206)
-                                    predicate:(_col1 is not null and _col2 is not null)
+                                    predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                     Group By Operator [GBY_209] (rows=12 width=206)
                                       Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col0
                                       Select Operator [SEL_208] (rows=5266632 width=201)
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query85.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query85.q.out
index 9a550b7..1d52378 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query85.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query85.q.out
@@ -209,7 +209,7 @@ Stage-0
               Select Operator [SEL_205] (rows=72 width=656)
                 Output:["_col4","_col5","_col6","_col7"]
                 Top N Key Operator [TNK_204] (rows=72 width=353)
-                  keys:substr(_col0, 1, 20), (UDFToDouble(_col1) / _col2), (_col3 / _col4), (_col5 / _col6),top n:100
+                  keys:substr(_col0, 1, 20), (UDFToDouble(_col1) / _col2), CAST( (_col3 / _col4) AS decimal(11,6)), CAST( (_col5 / _col6) AS decimal(11,6)),top n:100
                   Group By Operator [GBY_203] (rows=72 width=353)
                     Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)","sum(VALUE._col2)","count(VALUE._col3)","sum(VALUE._col4)","count(VALUE._col5)"],keys:KEY._col0
                   <-Reducer 4 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query92.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query92.q.out
index d379c38..7c846ce 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query92.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query92.q.out
@@ -148,7 +148,7 @@ Stage-0
                       Select Operator [SEL_124] (rows=62562 width=116)
                         Output:["_col0","_col1"]
                         Filter Operator [FIL_123] (rows=62562 width=124)
-                          predicate:CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null
+                          predicate:CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null
                           Group By Operator [GBY_122] (rows=62562 width=124)
                             Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                           <-Reducer 6 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/query1.q.out b/ql/src/test/results/clientpositive/perf/tez/query1.q.out
index 63b6313..bd0a1fe 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query1.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query1.q.out
@@ -94,7 +94,7 @@ Stage-0
                         Select Operator [SEL_162] (rows=85 width=115)
                           Output:["_col0","_col1"]
                           Filter Operator [FIL_161] (rows=85 width=123)
-                            predicate:(_col1 is not null and _col2 is not null)
+                            predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                             Group By Operator [GBY_160] (rows=85 width=123)
                               Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col1
                               Select Operator [SEL_159] (rows=53634860 width=119)
diff --git a/ql/src/test/results/clientpositive/perf/tez/query14.q.out b/ql/src/test/results/clientpositive/perf/tez/query14.q.out
index bf96850..5155575 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query14.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query14.q.out
@@ -572,7 +572,7 @@ Stage-0
                                   Select Operator [SEL_1366] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1365] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1364] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 59 [CUSTOM_SIMPLE_EDGE]
@@ -821,7 +821,7 @@ Stage-0
                                   Select Operator [SEL_1382] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1381] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1380] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 62 [CUSTOM_SIMPLE_EDGE]
@@ -1012,7 +1012,7 @@ Stage-0
                                   Select Operator [SEL_1344] (rows=1 width=112)
                                     Output:["_col0"]
                                     Filter Operator [FIL_1343] (rows=1 width=120)
-                                      predicate:(_col0 is not null and _col1 is not null)
+                                      predicate:CAST( (_col0 / _col1) AS decimal(22,6)) is not null
                                       Group By Operator [GBY_1342] (rows=1 width=120)
                                         Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                                       <-Union 55 [CUSTOM_SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/query1b.q.out b/ql/src/test/results/clientpositive/perf/tez/query1b.q.out
index 73d4251..02bf4ce 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query1b.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query1b.q.out
@@ -360,10 +360,10 @@ STAGE PLANS:
                     outputColumnNames: _col0, _col1, _col2
                     Statistics: Num rows: 85 Data size: 10532 Basic stats: COMPLETE Column stats: COMPLETE
                     Filter Operator
-                      predicate: (_col1 is not null and _col2 is not null) (type: boolean)
+                      predicate: CAST( (_col1 / _col2) AS decimal(21,6)) is not null (type: boolean)
                       Statistics: Num rows: 85 Data size: 10532 Basic stats: COMPLETE Column stats: COMPLETE
                       Select Operator
-                        expressions: ((_col1 / _col2) * 1.2) (type: decimal(38,11)), _col0 (type: int)
+                        expressions: (CAST( (_col1 / _col2) AS decimal(21,6)) * 1.2) (type: decimal(24,7)), _col0 (type: int)
                         outputColumnNames: _col0, _col1
                         Statistics: Num rows: 85 Data size: 9852 Basic stats: COMPLETE Column stats: COMPLETE
                         Reduce Output Operator
@@ -372,7 +372,7 @@ STAGE PLANS:
                           sort order: +
                           Map-reduce partition columns: _col1 (type: int)
                           Statistics: Num rows: 85 Data size: 9852 Basic stats: COMPLETE Column stats: COMPLETE
-                          value expressions: _col0 (type: decimal(38,11))
+                          value expressions: _col0 (type: decimal(24,7))
 
   Stage: Stage-0
     Fetch Operator
diff --git a/ql/src/test/results/clientpositive/perf/tez/query24.q.out b/ql/src/test/results/clientpositive/perf/tez/query24.q.out
index d4cdb5b..202f68b 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query24.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query24.q.out
@@ -150,7 +150,7 @@ Stage-0
                 Select Operator [SEL_350] (rows=1 width=112)
                   Output:["_col0"]
                   Filter Operator [FIL_349] (rows=1 width=120)
-                    predicate:(_col0 is not null and _col1 is not null)
+                    predicate:CAST( (_col0 / _col1) AS decimal(21,6)) is not null
                     Group By Operator [GBY_348] (rows=1 width=120)
                       Output:["_col0","_col1"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"]
                     <-Reducer 11 [CUSTOM_SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/query30.q.out b/ql/src/test/results/clientpositive/perf/tez/query30.q.out
index 6e46087..2d8b542 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query30.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query30.q.out
@@ -138,7 +138,7 @@ Stage-0
                               Select Operator [SEL_212] (rows=17 width=198)
                                 Output:["_col0","_col1"]
                                 Filter Operator [FIL_211] (rows=17 width=206)
-                                  predicate:(_col1 is not null and _col2 is not null)
+                                  predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                   Group By Operator [GBY_210] (rows=17 width=206)
                                     Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col0
                                     Select Operator [SEL_209] (rows=13130761 width=201)
diff --git a/ql/src/test/results/clientpositive/perf/tez/query32.q.out b/ql/src/test/results/clientpositive/perf/tez/query32.q.out
index e84423a..7b534b6 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query32.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query32.q.out
@@ -144,7 +144,7 @@ Stage-0
                       Select Operator [SEL_124] (rows=62562 width=116)
                         Output:["_col0","_col1"]
                         Filter Operator [FIL_123] (rows=62562 width=124)
-                          predicate:CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null
+                          predicate:CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null
                           Group By Operator [GBY_122] (rows=62562 width=124)
                             Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                           <-Reducer 6 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/query44.q.out b/ql/src/test/results/clientpositive/perf/tez/query44.q.out
index 1c16328..6da4a88 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query44.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query44.q.out
@@ -143,7 +143,7 @@ Stage-0
                                             Select Operator [SEL_136] (rows=1 width=112)
                                               Output:["_col0"]
                                               Filter Operator [FIL_135] (rows=1 width=120)
-                                                predicate:(_col1 is not null and _col2 is not null)
+                                                predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                 Select Operator [SEL_134] (rows=1 width=120)
                                                   Output:["_col1","_col2"]
                                                   Group By Operator [GBY_133] (rows=1 width=124)
@@ -164,7 +164,7 @@ Stage-0
                                             Select Operator [SEL_127] (rows=62562 width=116)
                                               Output:["_col0","_col1"]
                                               Filter Operator [FIL_126] (rows=62562 width=124)
-                                                predicate:(_col1 is not null and _col2 is not null)
+                                                predicate:CAST( (_col1 / _col2) AS decimal(11,6)) is not null
                                                 Group By Operator [GBY_125] (rows=62562 width=124)
                                                   Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                                                 <-Map 6 [SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/query6.q.out b/ql/src/test/results/clientpositive/perf/tez/query6.q.out
index cae785d..94854b7 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query6.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query6.q.out
@@ -145,7 +145,7 @@ Stage-0
                                     <-Select Operator [SEL_208] (rows=10 width=202)
                                         Output:["_col0","_col1"]
                                         Filter Operator [FIL_207] (rows=10 width=210)
-                                          predicate:CAST( (_col1 / _col2) AS decimal(16,6)) is not null
+                                          predicate:CAST( CAST( (_col1 / _col2) AS decimal(11,6)) AS decimal(16,6)) is not null
                                           Group By Operator [GBY_206] (rows=10 width=210)
                                             Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                                           <-Map 14 [SIMPLE_EDGE] vectorized
diff --git a/ql/src/test/results/clientpositive/perf/tez/query65.q.out b/ql/src/test/results/clientpositive/perf/tez/query65.q.out
index 1845583..fc01ab4 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query65.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query65.q.out
@@ -175,7 +175,7 @@ Stage-0
                                 Select Operator [SEL_163] (rows=84 width=115)
                                   Output:["_col0","_col1"]
                                   Filter Operator [FIL_162] (rows=84 width=123)
-                                    predicate:(_col1 is not null and _col2 is not null)
+                                    predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                     Group By Operator [GBY_161] (rows=84 width=123)
                                       Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col1
                                       Select Operator [SEL_160] (rows=5255208 width=119)
diff --git a/ql/src/test/results/clientpositive/perf/tez/query81.q.out b/ql/src/test/results/clientpositive/perf/tez/query81.q.out
index d9c93e5..f4608ba 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query81.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query81.q.out
@@ -117,7 +117,7 @@ Stage-0
                                 Select Operator [SEL_211] (rows=12 width=198)
                                   Output:["_col0","_col1"]
                                   Filter Operator [FIL_210] (rows=12 width=206)
-                                    predicate:(_col1 is not null and _col2 is not null)
+                                    predicate:CAST( (_col1 / _col2) AS decimal(21,6)) is not null
                                     Group By Operator [GBY_209] (rows=12 width=206)
                                       Output:["_col0","_col1","_col2"],aggregations:["sum(_col2)","count(_col2)"],keys:_col0
                                       Select Operator [SEL_208] (rows=5266632 width=201)
diff --git a/ql/src/test/results/clientpositive/perf/tez/query85.q.out b/ql/src/test/results/clientpositive/perf/tez/query85.q.out
index 94ec2f9..0a507a2 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query85.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query85.q.out
@@ -210,7 +210,7 @@ Stage-0
               Select Operator [SEL_235] (rows=72 width=656)
                 Output:["_col4","_col5","_col6","_col7"]
                 Top N Key Operator [TNK_234] (rows=72 width=353)
-                  keys:substr(_col0, 1, 20), (UDFToDouble(_col1) / _col2), (_col3 / _col4), (_col5 / _col6),top n:100
+                  keys:substr(_col0, 1, 20), (UDFToDouble(_col1) / _col2), CAST( (_col3 / _col4) AS decimal(11,6)), CAST( (_col5 / _col6) AS decimal(11,6)),top n:100
                   Group By Operator [GBY_233] (rows=72 width=353)
                     Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)","sum(VALUE._col2)","count(VALUE._col3)","sum(VALUE._col4)","count(VALUE._col5)"],keys:KEY._col0
                   <-Reducer 4 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/perf/tez/query92.q.out b/ql/src/test/results/clientpositive/perf/tez/query92.q.out
index 8bafee4..069beef 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query92.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query92.q.out
@@ -148,7 +148,7 @@ Stage-0
                       Select Operator [SEL_124] (rows=62562 width=116)
                         Output:["_col0","_col1"]
                         Filter Operator [FIL_123] (rows=62562 width=124)
-                          predicate:CAST( (1.3 * (_col1 / _col2)) AS decimal(14,7)) is not null
+                          predicate:CAST( (1.3 * CAST( (_col1 / _col2) AS decimal(11,6))) AS decimal(14,7)) is not null
                           Group By Operator [GBY_122] (rows=62562 width=124)
                             Output:["_col0","_col1","_col2"],aggregations:["sum(VALUE._col0)","count(VALUE._col1)"],keys:KEY._col0
                           <-Reducer 6 [SIMPLE_EDGE]
diff --git a/ql/src/test/results/clientpositive/spark/subquery_scalar.q.out b/ql/src/test/results/clientpositive/spark/subquery_scalar.q.out
index 35a96b7..98b6241 100644
--- a/ql/src/test/results/clientpositive/spark/subquery_scalar.q.out
+++ b/ql/src/test/results/clientpositive/spark/subquery_scalar.q.out
@@ -7312,8 +7312,8 @@ HiveProject(ss_sold_date_sk=[$0], ss_quantity=[$1], ss_list_price=[$2])
     HiveProject(ss_sold_date_sk=[$0], ss_quantity=[$1], ss_list_price=[$2])
       HiveFilter(condition=[IS NOT NULL($2)])
         HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
-    HiveProject($f0=[/($0, $1)])
-      HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])
+    HiveProject($f0=[CAST(/($0, $1)):DECIMAL(22, 6)])
+      HiveFilter(condition=[IS NOT NULL(CAST(/($0, $1)):DECIMAL(22, 6))])
         HiveProject($f0=[$0], $f1=[$1])
           HiveAggregate(group=[{}], agg#0=[sum($0)], agg#1=[count($0)])
             HiveProject($f0=[*(CAST($1):DECIMAL(10, 0), $2)])
diff --git a/ql/src/test/results/clientpositive/spark/vector_decimal_aggregate.q.out b/ql/src/test/results/clientpositive/spark/vector_decimal_aggregate.q.out
index acde8df..fb07d9d 100644
--- a/ql/src/test/results/clientpositive/spark/vector_decimal_aggregate.q.out
+++ b/ql/src/test/results/clientpositive/spark/vector_decimal_aggregate.q.out
@@ -349,13 +349,13 @@ STAGE PLANS:
                   predicate: (_col13 > 1L) (type: boolean)
                   Statistics: Num rows: 2048 Data size: 360813 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), (CAST( _col4 AS decimal(24,14)) / _col1) (type: decimal(38,28)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (ty [...]
+                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), CAST( (_col4 / _col1) AS decimal(24,14)) (type: decimal(24,14)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (ty [...]
                     outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
                     Select Vectorization:
                         className: VectorSelectOperator
                         native: true
                         projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 32, 37, 45]
-                        selectExpressions: DecimalColDivideDecimalColumn(col 14:decimal(24,14), col 15:decimal(19,0))(children: CastDecimalToDecimal(col 4:decimal(30,10)) -> 14:decimal(24,14), CastLongToDecimal(col 1:bigint) -> 15:decimal(19,0)) -> 16:decimal(38,28), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17:double,  [...]
+                        selectExpressions: CastDecimalToDecimal(col 15:decimal(38,18))(children: DecimalColDivideDecimalColumn(col 4:decimal(30,10), col 14:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 14:decimal(19,0)) -> 15:decimal(38,18)) -> 16:decimal(24,14), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 1 [...]
                     Statistics: Num rows: 2048 Data size: 360813 Basic stats: COMPLETE Column stats: NONE
                     File Output Operator
                       compressed: false
@@ -392,14 +392,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby
 #### A masked pattern was here ####
--3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.6735247296333333333333333333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.81120730764118333333333333333	2604201.2704476737	2852759.5602156054
--563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.6364148649000000000000000000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.50327307692295000000000000000	1707.9424961538462	2415.395441814127
-253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.3399236697630859375000000000	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.42835967548079188476562500000	6837.632716002931	6840.973851172272
-528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.4109968243230468750000000000	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.96562480769168948242187500000	308443.1074570797	308593.82484083937
-626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.2939966110631835937500000000	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.32914804687497798828125000000	6877.318722794881	6880.679250101608
-6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.6757008106666666666666666667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.69651461528206666666666666667	3292794.4113115156	4032833.0678006653
-762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.7443268917000000000000000000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.07839499984625000000000000000	3491310.1327026924	4937458.140118757
-NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.6081081080666666666666666667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.57692307692296666666666666667	6821.495748565151	6822.606289190915
+-3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.67352472963333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.811207307641183333	2604201.2704476737	2852759.5602156054
+-563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.63641486490000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.503273076922950000	1707.9424961538462	2415.395441814127
+253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.33992366976309	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.428359675480791885	6837.632716002931	6840.973851172272
+528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.41099682432305	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.965624807691689482	308443.1074570797	308593.82484083937
+626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.29399661106318	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.329148046874977988	6877.318722794881	6880.679250101608
+6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.67570081066667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.696514615282066667	3292794.4113115156	4032833.0678006653
+762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.74432689170000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.078394999846250000	3491310.1327026924	4937458.140118757
+NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.60810810806667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.576923076922966667	6821.495748565151	6822.606289190915
 PREHOOK: query: CREATE TABLE decimal_vgby_small STORED AS TEXTFILE AS
     SELECT cdouble, CAST (((cdouble*22.1)/37) AS DECIMAL(11,5)) AS cdecimal1,
     CAST (((cdouble*9.3)/13) AS DECIMAL(16,0)) AS cdecimal2,
@@ -770,13 +770,13 @@ STAGE PLANS:
                   predicate: (_col13 > 1L) (type: boolean)
                   Statistics: Num rows: 2048 Data size: 57738 Basic stats: COMPLETE Column stats: NONE
                   Select Operator
-                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), (CAST( _col4 AS decimal(15,9)) / _col1) (type: decimal(35,29)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: d [...]
+                    expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), CAST( (_col4 / _col1) AS decimal(15,9)) (type: decimal(15,9)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: de [...]
                     outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
                     Select Vectorization:
                         className: VectorSelectOperator
                         native: true
-                        projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 33, 38, 46]
-                        selectExpressions: DecimalColDivideDecimalColumn(col 14:decimal(15,9), col 15:decimal(19,0))(children: CastDecimalToDecimal(col 4:decimal(21,5)) -> 14:decimal(15,9), CastLongToDecimal(col 1:bigint) -> 15:decimal(19,0)) -> 16:decimal(35,29), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17:double, col [...]
+                        projectedOutputColumnNums: [0, 1, 2, 3, 4, 16, 21, 29, 7, 8, 9, 10, 32, 37, 45]
+                        selectExpressions: CastDecimalToDecimal(col 15:decimal(38,22))(children: DecimalColDivideDecimalColumn(col 4:decimal(21,5), col 14:decimal(19,0))(children: CastLongToDecimal(col 1:bigint) -> 14:decimal(19,0)) -> 15:decimal(38,22)) -> 16:decimal(15,9), FuncPowerDoubleToDouble(col 20:double)(children: DoubleColDivideLongColumn(col 19:double, col 1:bigint)(children: DoubleColSubtractDoubleColumn(col 5:double, col 18:double)(children: DoubleColDivideLongColumn(col 17: [...]
                     Statistics: Num rows: 2048 Data size: 57738 Basic stats: COMPLETE Column stats: NONE
                     File Output Operator
                       compressed: false
@@ -813,14 +813,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
--3728	5	-515.62107	-3367.65176	-13986.22811	-2797.24562200000000000000000000000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
--563	2	-515.62107	-3367.65176	-3883.27283	-1941.63641500000000000000000000000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
-253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.33992375000000000000000000000	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
-528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.35193513698630136986301369863	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
-626923679	1024	9723.40270	-9778.95135	10541.05247	10.29399655273437500000000000000	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
-6981	2	-515.62107	-515.62107	-1031.24214	-515.62107000000000000000000000000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
-762	1	1531.21941	1531.21941	1531.21941	1531.21941000000000000000000000000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
-NULL	3072	9318.43514	-4298.15135	5018444.11392	NULL	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
+-3728	5	-515.62107	-3367.65176	-13986.22811	-2797.245622000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
+-563	2	-515.62107	-3367.65176	-3883.27283	-1941.636415000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
+253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.339923750	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
+528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.351935137	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
+626923679	1024	9723.40270	-9778.95135	10541.05247	10.293996553	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
+6981	2	-515.62107	-515.62107	-1031.24214	-515.621070000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
+762	1	1531.21941	1531.21941	1531.21941	1531.219410000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
+NULL	3072	9318.43514	-4298.15135	5018444.11392	1633.608110000	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
 PREHOOK: query: SELECT SUM(HASH(*))
 FROM (SELECT cint,
     COUNT(cdecimal1), MAX(cdecimal1), MIN(cdecimal1), SUM(cdecimal1), AVG(cdecimal1), STDDEV_POP(cdecimal1), STDDEV_SAMP(cdecimal1),
@@ -839,4 +839,4 @@ FROM (SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
-96673467876
+95165244160
diff --git a/ql/src/test/results/clientpositive/vector_decimal_aggregate.q.out b/ql/src/test/results/clientpositive/vector_decimal_aggregate.q.out
index 8693040..5379f47 100644
--- a/ql/src/test/results/clientpositive/vector_decimal_aggregate.q.out
+++ b/ql/src/test/results/clientpositive/vector_decimal_aggregate.q.out
@@ -284,7 +284,7 @@ STAGE PLANS:
             predicate: (_col13 > 1L) (type: boolean)
             Statistics: Num rows: 2035 Data size: 1487560 Basic stats: COMPLETE Column stats: COMPLETE
             Select Operator
-              expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), (CAST( _col4 AS decimal(24,14)) / _col1) (type: decimal(38,28)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (type: de [...]
+              expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(20,10)), _col3 (type: decimal(20,10)), _col4 (type: decimal(30,10)), CAST( (_col4 / _col1) AS decimal(24,14)) (type: decimal(24,14)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(23,14)), _col9 (type: de [...]
               outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
               Statistics: Num rows: 2035 Data size: 1927120 Basic stats: COMPLETE Column stats: COMPLETE
               File Output Operator
@@ -319,14 +319,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby
 #### A masked pattern was here ####
--3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.6735247296333333333333333333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.81120730764118333333333333333	2604201.2704476737	2852759.5602156054
--563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.6364148649000000000000000000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.50327307692295000000000000000	1707.9424961538462	2415.395441814127
-253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.3399236697630859375000000000	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.42835967548079188476562500000	6837.632716002931	6840.973851172272
-528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.4109968243230468750000000000	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.96562480769168948242187500000	308443.1074570797	308593.82484083937
-626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.2939966110631835937500000000	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.32914804687497798828125000000	6877.318722794881	6880.679250101608
-6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.6757008106666666666666666667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.69651461528206666666666666667	3292794.4113115156	4032833.0678006653
-762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.7443268917000000000000000000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.07839499984625000000000000000	3491310.1327026924	4937458.140118757
-NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.6081081080666666666666666667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.57692307692296666666666666667	6821.495748565151	6822.606289190915
+-3728	6	5831542.2692483780	-3367.6517567568	5817556.0411483778	969592.67352472963333	2174330.209240386	2381859.406131774	6	6984454.21109769200000	-4033.44576923076900	6967702.86724384584710	1161283.811207307641183333	2604201.2704476737	2852759.5602156054
+-563	2	-515.6210729730	-3367.6517567568	-3883.2728297298	-1941.63641486490000	1426.0153418918997	2016.6902366556305	2	-617.56077692307690	-4033.44576923076900	-4651.00654615384590	-2325.503273076922950000	1707.9424961538462	2415.395441814127
+253665376	1024	9767.0054054054	-9779.5486486487	-347484.0818378374	-339.33992366976309	5708.956347886203	5711.745967572781	1024	11697.96923076923100	-11712.99230769231000	-416182.64030769233089	-406.428359675480791885	6837.632716002931	6840.973851172272
+528534767	1024	5831542.2692483780	-9777.1594594595	11646372.8607481068	11373.41099682432305	257528.9298820665	257654.7686043977	1024	6984454.21109769200000	-11710.13076923077100	13948892.79980307629003	13621.965624807691689482	308443.1074570797	308593.82484083937
+626923679	1024	9723.4027027027	-9778.9513513514	10541.0525297287	10.29399661106318	5742.091453237337	5744.897264034264	1024	11645.74615384615400	-11712.27692307692300	12625.04759999997746	12.329148046874977988	6877.318722794881	6880.679250101608
+6981	3	5831542.2692483780	-515.6210729730	5830511.0271024320	1943503.67570081066667	2749258.455012492	3367140.1929065133	3	6984454.21109769200000	-617.56077692307690	6983219.08954384584620	2327739.696514615282066667	3292794.4113115156	4032833.0678006653
+762	2	5831542.2692483780	1531.2194054054	5833073.4886537834	2916536.74432689170000	2915005.5249214866	4122440.3477364695	2	6984454.21109769200000	1833.94569230769250	6986288.15678999969250	3493144.078394999846250000	3491310.1327026924	4937458.140118757
+NULL	3072	9318.4351351351	-4298.1513513514	5018444.1081079808	1633.60810810806667	5695.483082135323	5696.410307714464	3072	11160.71538461538500	-5147.90769230769300	6010604.30769230735360	1956.576923076922966667	6821.495748565151	6822.606289190915
 PREHOOK: query: CREATE TABLE decimal_vgby_small STORED AS TEXTFILE AS
     SELECT cdouble, CAST (((cdouble*22.1)/37) AS DECIMAL(11,5)) AS cdecimal1,
     CAST (((cdouble*9.3)/13) AS DECIMAL(16,0)) AS cdecimal2,
@@ -632,7 +632,7 @@ STAGE PLANS:
             predicate: (_col13 > 1L) (type: boolean)
             Statistics: Num rows: 2035 Data size: 1487560 Basic stats: COMPLETE Column stats: COMPLETE
             Select Operator
-              expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), (CAST( _col4 AS decimal(15,9)) / _col1) (type: decimal(35,29)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: decimal [...]
+              expressions: _col0 (type: int), _col1 (type: bigint), _col2 (type: decimal(11,5)), _col3 (type: decimal(11,5)), _col4 (type: decimal(21,5)), CAST( (_col4 / _col1) AS decimal(15,9)) (type: decimal(15,9)), power(((_col5 - ((_col6 * _col6) / _col1)) / _col1), 0.5) (type: double), power(((_col5 - ((_col6 * _col6) / _col1)) / CASE WHEN ((_col1 = 1L)) THEN (null) ELSE ((_col1 - 1)) END), 0.5) (type: double), _col7 (type: bigint), _col8 (type: decimal(16,0)), _col9 (type: decimal( [...]
               outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14
               Statistics: Num rows: 2035 Data size: 1927120 Basic stats: COMPLETE Column stats: COMPLETE
               File Output Operator
@@ -667,14 +667,14 @@ POSTHOOK: query: SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
--3728	5	-515.62107	-3367.65176	-13986.22811	-2797.24562200000000000000000000000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
--563	2	-515.62107	-3367.65176	-3883.27283	-1941.63641500000000000000000000000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
-253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.33992375000000000000000000000	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
-528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.35193513698630136986301369863	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
-626923679	1024	9723.40270	-9778.95135	10541.05247	10.29399655273437500000000000000	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
-6981	2	-515.62107	-515.62107	-1031.24214	-515.62107000000000000000000000000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
-762	1	1531.21941	1531.21941	1531.21941	1531.21941000000000000000000000000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
-NULL	3072	9318.43514	-4298.15135	5018444.11392	NULL	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
+-3728	5	-515.62107	-3367.65176	-13986.22811	-2797.245622000	1140.8122759999992	1275.466899351125	6	6984454	-4033	6967704	1161284.0000	2604201.0914565204	2852759.364140621
+-563	2	-515.62107	-3367.65176	-3883.27283	-1941.636415000	1426.0153450000003	2016.6902410511484	2	-618	-4033	-4651	-2325.5000	1707.5	2414.7696577520596
+253665376	1024	9767.00541	-9779.54865	-347484.08192	-339.339923750	5708.956347957812	5711.745967644425	1024	11698	-11713	-416183	-406.4287	6837.6426468206855	6840.983786842613
+528534767	1022	9777.75676	-9777.15946	-16711.67771	-16.351935137	5555.762110793133	5558.482190324906	1024	6984454	-11710	13948890	13621.9629	308443.0982329696	308593.815612222
+626923679	1024	9723.40270	-9778.95135	10541.05247	10.293996553	5742.091453325365	5744.897264122335	1024	11646	-11712	12641	12.3447	6877.306686989158	6880.6672084147185
+6981	2	-515.62107	-515.62107	-1031.24214	-515.621070000	0.0	0.0	3	6984454	-618	6983218	2327739.3333	3292794.518850853	4032833.1995089175
+762	1	1531.21941	1531.21941	1531.21941	1531.219410000	0.0	NULL	2	6984454	1834	6986288	3493144.0000	3491310.0	4937457.95244881
+NULL	3072	9318.43514	-4298.15135	5018444.11392	1633.608110000	5695.4830839098695	5696.410309489299	3072	11161	-5148	6010880	1956.6667	6821.647911041892	6822.758476439734
 PREHOOK: query: SELECT SUM(HASH(*))
 FROM (SELECT cint,
     COUNT(cdecimal1), MAX(cdecimal1), MIN(cdecimal1), SUM(cdecimal1), AVG(cdecimal1), STDDEV_POP(cdecimal1), STDDEV_SAMP(cdecimal1),
@@ -693,4 +693,4 @@ FROM (SELECT cint,
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_vgby_small
 #### A masked pattern was here ####
-96673467876
+95165244160
diff --git a/ql/src/test/results/clientpositive/vector_decimal_precision.q.out b/ql/src/test/results/clientpositive/vector_decimal_precision.q.out
index e5c6bf0..5b279a7 100644
--- a/ql/src/test/results/clientpositive/vector_decimal_precision.q.out
+++ b/ql/src/test/results/clientpositive/vector_decimal_precision.q.out
@@ -633,7 +633,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 1 Data size: 120 Basic stats: COMPLETE Column stats: COMPLETE
           Select Operator
-            expressions: (_col0 / _col1) (type: decimal(38,18)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
+            expressions: CAST( (_col0 / _col1) AS decimal(24,14)) (type: decimal(24,14)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1 Data size: 224 Basic stats: COMPLETE Column stats: COMPLETE
             File Output Operator
@@ -658,7 +658,7 @@ POSTHOOK: query: SELECT avg(`dec`), sum(`dec`) FROM DECIMAL_PRECISION
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_precision
 #### A masked pattern was here ####
-88499534.575865762206451613	2743485571.8518386284
+88499534.57586576220645	2743485571.8518386284
 PREHOOK: query: SELECT `dec` * cast('12345678901234567890.12345678' as decimal(38,18)) FROM DECIMAL_PRECISION LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_precision
@@ -1224,7 +1224,7 @@ STAGE PLANS:
           outputColumnNames: _col0, _col1
           Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
           Select Operator
-            expressions: (_col0 / _col1) (type: decimal(38,18)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
+            expressions: CAST( (_col0 / _col1) AS decimal(24,14)) (type: decimal(24,14)), CAST( _col0 AS decimal(30,10)) (type: decimal(30,10))
             outputColumnNames: _col0, _col1
             Statistics: Num rows: 1 Data size: 232 Basic stats: COMPLETE Column stats: NONE
             File Output Operator
@@ -1249,7 +1249,7 @@ POSTHOOK: query: SELECT avg(`dec`), sum(`dec`) FROM DECIMAL_PRECISION_txt_small
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@decimal_precision_txt_small
 #### A masked pattern was here ####
-88499534.575865762206451613	2743485571.8518386284
+88499534.57586576220645	2743485571.8518386284
 PREHOOK: query: SELECT `dec` * cast('12345678901234567890.12345678' as decimal(38,18)) FROM DECIMAL_PRECISION_txt_small LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@decimal_precision_txt_small