diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/LeadLagInfo.java ql/src/java/org/apache/hadoop/hive/ql/parse/LeadLagInfo.java index 366b74b..6a81170 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/LeadLagInfo.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/LeadLagInfo.java @@ -19,7 +19,7 @@ package org.apache.hadoop.hive.ql.parse; import java.util.ArrayList; -import java.util.HashMap; +import java.util.IdentityHashMap; import java.util.List; import java.util.Map; @@ -53,7 +53,7 @@ private void addLeadLagExpr(ExprNodeGenericFuncDesc llFunc) { public void addLLFuncExprForTopExpr(ExprNodeDesc topExpr, ExprNodeGenericFuncDesc llFuncExpr) { addLeadLagExpr(llFuncExpr); mapTopExprToLLFunExprs = mapTopExprToLLFunExprs == null ? - new HashMap>() : mapTopExprToLLFunExprs; + new IdentityHashMap>() : mapTopExprToLLFunExprs; List funcList = mapTopExprToLLFunExprs.get(topExpr); if (funcList == null) { funcList = new ArrayList(); diff --git ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java index 0fe9eda..6001bc5 100755 --- ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java +++ ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java @@ -60,6 +60,14 @@ public int hashCode() { return typeInfo.hashCode(); } + @Override + public final boolean equals(Object o) { + // prevent equals from being overridden in sub-classes + // always use ExprNodeDescEqualityWrapper + // if you need any other equality than Object.equals() + return (o == this); + } + public TypeInfo getTypeInfo() { return typeInfo; } diff --git ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java index 33ad3e8..f23facf 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java +++ ql/src/java/org/apache/hadoop/hive/ql/ppd/ExprWalkerInfo.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -98,17 +99,17 @@ public ExprInfo(boolean isCandidate, String alias, ExprNodeDesc replacedNode) { public ExprWalkerInfo() { pushdownPreds = new HashMap>(); nonFinalPreds = new HashMap>(); - exprInfoMap = new HashMap(); - newToOldExprMap = new HashMap(); + exprInfoMap = new IdentityHashMap(); + newToOldExprMap = new IdentityHashMap(); } public ExprWalkerInfo(Operator op) { this.op = op; pushdownPreds = new HashMap>(); - exprInfoMap = new HashMap(); + exprInfoMap = new IdentityHashMap(); nonFinalPreds = new HashMap>(); - newToOldExprMap = new HashMap(); + newToOldExprMap = new IdentityHashMap(); } /**