diff --git a/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java index 4987f7a..0160b8a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java @@ -198,19 +198,15 @@ private ExprNodeDesc analyzeExpr( } ExprNodeDesc expr1 = (ExprNodeDesc) nodeOutputs[0]; ExprNodeDesc expr2 = (ExprNodeDesc) nodeOutputs[1]; - // We may need to peel off the GenericUDFBridge that is added by CBO or user boolean peelOffGenericUDFBridge = false; - while (expr1 instanceof ExprNodeGenericFuncDesc && expr2 instanceof ExprNodeGenericFuncDesc) { - GenericUDF udf1 = ((ExprNodeGenericFuncDesc) expr1).getGenericUDF(); - GenericUDF udf2 = ((ExprNodeGenericFuncDesc) expr2).getGenericUDF(); - // We assume that GenericUDFBridge that is added by CBO or user if they - // have the same udf names. - if (udf1.getUdfName() == udf2.getUdfName()) { - peelOffGenericUDFBridge = true; + // We may need to peel off the GenericUDFBridge that is added by CBO or user + if(expr1.getTypeInfo()==expr2.getTypeInfo()){ + peelOffGenericUDFBridge = true; + if(expr1 instanceof ExprNodeGenericFuncDesc){ expr1 = expr1.getChildren().get(0); + } + if(expr2 instanceof ExprNodeGenericFuncDesc){ expr2 = expr2.getChildren().get(0); - } else { - break; } } // We also need to update the expr so that the index query can be generated.