diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java b/ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java index e4b768e98dca9dc7d8730024182d164d46e526e5..fca671c471a48ac3b6161fab10226566d0eeeb11 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java @@ -149,7 +149,13 @@ public ExprInfo addOrGetExprInfo(ExprNodeDesc expr) { } public void addFinalCandidate(String alias, ExprNodeDesc expr) { - getPushdownPreds(alias).add(expr); + List predicates = getPushdownPreds(alias); + for (ExprNodeDesc curPred: predicates) { + if (curPred.isSame(expr)) { + return; + } + } + predicates.add(expr); } /** @@ -159,7 +165,20 @@ public void addFinalCandidate(String alias, ExprNodeDesc expr) { * @param pushDowns */ public void addPushDowns(String alias, List pushDowns) { - getPushdownPreds(alias).addAll(pushDowns); + List predicates = getPushdownPreds(alias); + boolean isNew; + for (ExprNodeDesc newPred: pushDowns) { + isNew = true; + for (ExprNodeDesc curPred: predicates) { + if (curPred.isSame(newPred)) { + isNew = false; + break; + } + } + if (isNew) { + predicates.add(newPred); + } + } } /**