Hi all: I am working on HIVE-17486<https://issues.apache.org/jira/browse/HIVE-17486> and met a problem about DefaultRuleDispatcher. It will apply rules to the operator tree. Here it first compute the minCost of a rule to node( like an operator in the operator tree). But how to deal with the case where the minCost are same if two rules applied to node. I guess in current code, only 1 rule will be applied to the node(May be you will say that DefaultRuleDispatcher<https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultRuleDispatcher.java#L48> #rules<https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultRuleDispatcher.java#L48> is a HashMap and is designed to one key with one value, but in my code, I have changed rules to multiMap which is designed to one key with multiple values)
{code} @Override public Object dispatch(Node nd, Stack<Node> ndStack, Object... nodeOutputs) throws SemanticException { // find the firing rule // find the rule from the stack specified Rule rule = null; int minCost = Integer.MAX_VALUE; for (Rule r : procRules.keySet()) { int cost = r.cost(ndStack); if ((cost >= 0) && (cost <= minCost)) { // In current code , only 1 rule will be applied minCost = cost; rule = r; } } NodeProcessor proc; if (rule == null) { proc = defaultProc; } else { proc = procRules.get(rule); } // Do nothing in case proc is null if (proc != null) { // Call the process function return proc.process(nd, ndStack, procCtx, nodeOutputs); } else { return null; } } {code} Appreciate to get some suggestions from you. Best Regards Kelly Zhang/Zhang,Liyun