diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java index b31d2ea..a491677 100755 --- ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java @@ -100,12 +100,14 @@ private static ExprNodeEvaluator iterate(ExprNodeEvaluator eval, EvaluatorContex private static class EvaluatorContext { - private final Map cached = new HashMap(); + private final Map cached = + new HashMap(); private boolean hasReference; public ExprNodeEvaluator getEvaluated(ExprNodeEvaluator eval) { - String key = eval.getExpr().toString(); + ExprNodeDesc.ExprNodeDescEqualityWrapper key = + new ExprNodeDesc.ExprNodeDescEqualityWrapper(eval.expr); ExprNodeEvaluator prev = cached.get(key); if (prev == null) { cached.put(key, eval); diff --git ql/src/test/queries/clientpositive/expr_cached.q ql/src/test/queries/clientpositive/expr_cached.q new file mode 100644 index 0000000..8fc182c --- /dev/null +++ ql/src/test/queries/clientpositive/expr_cached.q @@ -0,0 +1,4 @@ +set hive.fetch.task.conversion=more; + +-- should return a value +select * from src tablesample (1 rows) where length(key) <> reverse(key); \ No newline at end of file diff --git ql/src/test/results/clientpositive/expr_cached.q.out ql/src/test/results/clientpositive/expr_cached.q.out new file mode 100644 index 0000000..9f0b651 --- /dev/null +++ ql/src/test/results/clientpositive/expr_cached.q.out @@ -0,0 +1,11 @@ +PREHOOK: query: -- should return a value +select * from src tablesample (1 rows) where length(key) <> reverse(key) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: -- should return a value +select * from src tablesample (1 rows) where length(key) <> reverse(key) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +238 val_238