HIVE-13102: CBO: Reduce operations in Calcite do not fold as tight as 
rule-based folding (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan) 
ADDENDUM


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/50781c46
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/50781c46
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/50781c46

Branch: refs/heads/llap
Commit: 50781c460d3669bf2ff34780701341ae62f5ac6d
Parents: 2ddcc38
Author: Jesus Camacho Rodriguez <[email protected]>
Authored: Thu Feb 25 17:23:40 2016 +0100
Committer: Jesus Camacho Rodriguez <[email protected]>
Committed: Thu Feb 25 17:23:40 2016 +0100

----------------------------------------------------------------------
 .../apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java    | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/50781c46/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java
index 6745d79..2f309f3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRexUtil.java
@@ -193,6 +193,11 @@ public class HiveRexUtil {
           RexCall rightCast = (RexCall) right;
           comparedOperands.add(rightCast.getOperands().get(0));
         }
+        // Assume we have the expression a > 5.
+        // Then we can derive the negated term: NOT(a <= 5).
+        // But as the comparison is string based and thus operands order 
dependent,
+        // we should also add the inverted negated term: NOT(5 >= a).
+        // Observe that for creating the inverted term we invert the list of 
operands.
         RexCall negatedTerm = negate(rexBuilder, call);
         if (negatedTerm != null) {
           negatedTerms.add(negatedTerm);

Reply via email to