diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java index c1981e69812cd60727674a8566c6a2b37fe9fb7f..55eb9d892818cdc41e50a1f93b4e46747fd17e28 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConstantPropagateProcFactory.java @@ -530,12 +530,15 @@ private static void propagate(GenericUDF udf, List newExprs, RowSc return; } // If both sides are constants, there is nothing to propagate - ExprNodeColumnDesc c = ExprNodeDescUtils.getColumnExpr(lOperand); - if (null == c) { - c = ExprNodeDescUtils.getColumnExpr(rOperand); - } - if (null == c) { - // we need a column expression on other side. + ExprNodeColumnDesc c; + if (lOperand instanceof ExprNodeColumnDesc) { + c = (ExprNodeColumnDesc)lOperand; + } else if (rOperand instanceof ExprNodeColumnDesc) { + c = (ExprNodeColumnDesc)rOperand; + } else { + // we need a column expression on other side + // NOTE: we also cannot rely on column expressions wrapped inside casts as casting might + // truncate information return; } ColumnInfo ci = resolveColumn(rs, c);