This is an automated email from the ASF dual-hosted git repository.

krisztiankasa pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 59e152199bd HIVE-29208: Infinite loop while compiling query with 
filter predicate containing disjuncts on the same expression (#6082)
59e152199bd is described below

commit 59e152199bdfa362a14d30c27cece0a98f3eb176
Author: Krisztian Kasa <[email protected]>
AuthorDate: Wed Sep 24 13:33:43 2025 +0200

    HIVE-29208: Infinite loop while compiling query with filter predicate 
containing disjuncts on the same expression (#6082)
---
 .../rules/HivePointLookupOptimizerRule.java        | 149 +++++++++++----------
 .../rules/TestHivePointLookupOptimizerRule.java    |  26 +++-
 ql/src/test/queries/clientpositive/pointlookup6.q  |   8 ++
 .../clientpositive/llap/bucket_map_join_tez3.q.out |  16 +--
 .../clientpositive/llap/bucketpruning1.q.out       |  30 ++---
 .../llap/fold_eq_with_case_when.q.out              |   4 +-
 .../clientpositive/llap/join_filters_overlap.q.out |  24 ++--
 .../results/clientpositive/llap/masking_mv.q.out   |  16 +--
 .../llap/materialized_view_rewrite_ssb.q.out       |  24 ++--
 .../llap/materialized_view_rewrite_ssb_2.q.out     |  24 ++--
 ...terialized_view_rewrite_ssb_grouping_sets.q.out |  12 +-
 ...rialized_view_rewrite_ssb_grouping_sets_2.q.out |   2 +-
 ql/src/test/results/clientpositive/llap/pcs.q.out  |   2 +-
 .../results/clientpositive/llap/pointlookup6.q.out |  25 ++++
 .../llap/rand_partitionpruner2.q.out               |   2 +-
 .../llap/rand_partitionpruner3.q.out               |   2 +-
 .../test/results/clientpositive/llap/union22.q.out |   2 +-
 .../clientpositive/llap/vector_interval_2.q.out    |  36 ++---
 .../llap/vector_windowing_navfn.q.out              |   6 +-
 19 files changed, 235 insertions(+), 175 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HivePointLookupOptimizerRule.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HivePointLookupOptimizerRule.java
index 92dd1790cb9..089d95f607f 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HivePointLookupOptimizerRule.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HivePointLookupOptimizerRule.java
@@ -599,74 +599,75 @@ private static RexNode handleAND(RexBuilder rexBuilder, 
RexCall call) {
       // into a null value.
       final Multimap<RexNode,RexNode> inLHSExprToRHSNullableExprs = 
LinkedHashMultimap.create();
       final List<RexNode> operands = new 
ArrayList<>(RexUtil.flattenAnd(call.getOperands()));
-
-      for (int i = 0; i < operands.size(); i++) {
-        RexNode operand = operands.get(i);
-        if (operand instanceof RexCall && HiveIn.INSTANCE.equals(((RexCall) 
operand).op)) {
-          RexCall inCall = (RexCall) operand;
-          if (!HiveCalciteUtil.isDeterministic(inCall.getOperands().get(0))) {
-            continue;
-          }
-          RexNode ref = inCall.getOperands().get(0);
-          visitedRefs.add(ref);
-          if (ref.getType().isNullable()) {
-            inLHSExprToRHSNullableExprs.put(ref, ref);
-          }
-          if (inLHSExprToRHSExprs.containsKey(ref)) {
-            Set<SimilarRexNodeElement> expressions = Sets.newHashSet();
-            for (int j = 1; j < inCall.getOperands().size(); j++) {
-              RexNode constNode = inCall.getOperands().get(j);
-              expressions.add(new SimilarRexNodeElement(constNode));
-              if (constNode.getType().isNullable()) {
-                inLHSExprToRHSNullableExprs.put(ref, constNode);
-              }
-            }
-            Collection<SimilarRexNodeElement> knownConstants = 
inLHSExprToRHSExprs.get(ref);
-            if (!shareSameType(knownConstants, expressions)) {
-              return call;
+      final List<RexNode> newOperands = new ArrayList<>(operands.size());
+      int inExpressionCount = 0;
+      int eqExpressionCount = 0;
+      for (RexNode operand : operands) {
+        if (operand instanceof RexCall inCall && 
HiveIn.INSTANCE.equals(inCall.op)) {
+          RexNode ref = inCall.getOperands().getFirst();
+          if (HiveCalciteUtil.isDeterministic(ref)) {
+            visitedRefs.add(ref);
+            if (ref.getType().isNullable()) {
+              inLHSExprToRHSNullableExprs.put(ref, ref);
             }
-            knownConstants.retainAll(expressions);
-          } else {
-            for (int j = 1; j < inCall.getOperands().size(); j++) {
-              RexNode constNode = inCall.getOperands().get(j);
-              inLHSExprToRHSExprs.put(ref, new 
SimilarRexNodeElement(constNode));
-              if (constNode.getType().isNullable()) {
-                inLHSExprToRHSNullableExprs.put(ref, constNode);
+            if (inLHSExprToRHSExprs.containsKey(ref)) {
+              Set<SimilarRexNodeElement> expressions = Sets.newHashSet();
+              for (int j = 1; j < inCall.getOperands().size(); j++) {
+                RexNode constNode = inCall.getOperands().get(j);
+                expressions.add(new SimilarRexNodeElement(constNode));
+                if (constNode.getType().isNullable()) {
+                  inLHSExprToRHSNullableExprs.put(ref, constNode);
+                }
+              }
+              Collection<SimilarRexNodeElement> knownConstants = 
inLHSExprToRHSExprs.get(ref);
+              if (!shareSameType(knownConstants, expressions)) {
+                return call;
+              }
+              knownConstants.retainAll(expressions);
+            } else {
+              for (int j = 1; j < inCall.getOperands().size(); j++) {
+                RexNode constNode = inCall.getOperands().get(j);
+                inLHSExprToRHSExprs.put(ref, new 
SimilarRexNodeElement(constNode));
+                if (constNode.getType().isNullable()) {
+                  inLHSExprToRHSNullableExprs.put(ref, constNode);
+                }
               }
             }
+            ++inExpressionCount;
+            continue;
           }
-          operands.remove(i);
-          --i;
         } else if (operand.getKind() == SqlKind.EQUALS) {
           Constraint c = Constraint.of(operand);
-          if (c == null || !HiveCalciteUtil.isDeterministic(c.exprNode)) {
-            continue;
-          }
-          visitedRefs.add(c.exprNode);
-          if (c.exprNode.getType().isNullable()) {
-            inLHSExprToRHSNullableExprs.put(c.exprNode, c.exprNode);
-          }
-          if (c.constNode.getType().isNullable()) {
-            inLHSExprToRHSNullableExprs.put(c.exprNode, c.constNode);
-          }
-          if (inLHSExprToRHSExprs.containsKey(c.exprNode)) {
-            Collection<SimilarRexNodeElement> knownConstants = 
inLHSExprToRHSExprs.get(c.exprNode);
-            Collection<SimilarRexNodeElement> nextConstant = 
Collections.singleton(new SimilarRexNodeElement(c.constNode));
-            if (!shareSameType(knownConstants, nextConstant)) {
-              return call;
+          if (c != null && HiveCalciteUtil.isDeterministic(c.exprNode)) {
+            visitedRefs.add(c.exprNode);
+            if (c.exprNode.getType().isNullable()) {
+              inLHSExprToRHSNullableExprs.put(c.exprNode, c.exprNode);
+            }
+            if (c.constNode.getType().isNullable()) {
+              inLHSExprToRHSNullableExprs.put(c.exprNode, c.constNode);
+            }
+            if (inLHSExprToRHSExprs.containsKey(c.exprNode)) {
+              Collection<SimilarRexNodeElement> knownConstants = 
inLHSExprToRHSExprs.get(c.exprNode);
+              Collection<SimilarRexNodeElement> nextConstant = 
Collections.singleton(new SimilarRexNodeElement(c.constNode));
+              if (!shareSameType(knownConstants, nextConstant)) {
+                return call;
+              }
+              knownConstants.retainAll(nextConstant);
+            } else {
+              inLHSExprToRHSExprs.put(c.exprNode, new 
SimilarRexNodeElement(c.constNode));
             }
-            knownConstants.retainAll(nextConstant);
-          } else {
-            inLHSExprToRHSExprs.put(c.exprNode, new 
SimilarRexNodeElement(c.constNode));
+            ++eqExpressionCount;
+            continue;
           }
-          operands.remove(i);
-          --i;
         }
+        newOperands.add(operand);
+      }
+      if (inExpressionCount + eqExpressionCount == 
inLHSExprToRHSExprs.keySet().size()) {
+        // No IN and Equality expressions can be merged, bail out
+        return call;
       }
       // Create IN clauses
-      final List<RexNode> newOperands = createInClauses(rexBuilder,
-          visitedRefs, inLHSExprToRHSExprs, inLHSExprToRHSNullableExprs);
-      newOperands.addAll(operands);
+      newOperands.addAll(createInClauses(rexBuilder, visitedRefs, 
inLHSExprToRHSExprs, inLHSExprToRHSNullableExprs));
       // Return node
       return RexUtil.composeConjunction(rexBuilder, newOperands, false);
     }
@@ -734,26 +735,28 @@ private static boolean shareSameType(
     private static RexNode handleOR(RexBuilder rexBuilder, RexCall call) {
       // IN clauses need to be combined by keeping all elements
       final List<RexNode> operands = new 
ArrayList<>(RexUtil.flattenOr(call.getOperands()));
-      final Multimap<RexNode,SimilarRexNodeElement> inLHSExprToRHSExprs = 
LinkedHashMultimap.create();
-      for (int i = 0; i < operands.size(); i++) {
-        RexNode operand = operands.get(i);
-        if (operand instanceof RexCall && HiveIn.INSTANCE.equals(((RexCall) 
operand).op)) {
-          RexCall inCall = (RexCall) operand;
-          if (!HiveCalciteUtil.isDeterministic(inCall.getOperands().get(0))) {
+      final List<RexNode> newOperands = new ArrayList<>(operands.size());
+      final Multimap<RexNode, SimilarRexNodeElement> inLHSExprToRHSExprs = 
LinkedHashMultimap.create();
+      int inExpressionCount = 0;
+      for (RexNode operand : operands) {
+        if (operand instanceof RexCall inCall && 
HiveIn.INSTANCE.equals(inCall.op)) {
+          RexNode ref = inCall.getOperands().getFirst();
+          if (HiveCalciteUtil.isDeterministic(ref)) {
+            for (int j = 1; j < inCall.getOperands().size(); j++) {
+              inLHSExprToRHSExprs.put(ref, new 
SimilarRexNodeElement(inCall.getOperands().get(j)));
+            }
+            ++inExpressionCount;
             continue;
           }
-          RexNode ref = inCall.getOperands().get(0);
-          for (int j = 1; j < inCall.getOperands().size(); j++) {
-            inLHSExprToRHSExprs.put(ref, new 
SimilarRexNodeElement(inCall.getOperands().get(j)));
-          }
-          operands.remove(i);
-          --i;
         }
+        newOperands.add(operand);
+      }
+      if (inExpressionCount == inLHSExprToRHSExprs.keySet().size()) {
+        // No IN expressions can be merged, bail out
+        return call;
       }
       // Create IN clauses (fourth parameter is not needed since no 
expressions were removed)
-      final List<RexNode> newOperands = createInClauses(rexBuilder,
-          inLHSExprToRHSExprs.keySet(), inLHSExprToRHSExprs, null);
-      newOperands.addAll(operands);
+      newOperands.addAll(createInClauses(rexBuilder, 
inLHSExprToRHSExprs.keySet(), inLHSExprToRHSExprs, null));
       // Return node
       RexNode result = RexUtil.composeDisjunction(rexBuilder, newOperands, 
false);
       if (!result.getType().equals(call.getType())) {
@@ -782,7 +785,7 @@ private static RexNode createResultFromEmptySet(RexBuilder 
rexBuilder,
 
     private static List<RexNode> createInClauses(RexBuilder rexBuilder, 
Set<RexNode> visitedRefs,
         Multimap<RexNode, SimilarRexNodeElement> inLHSExprToRHSExprs, 
Multimap<RexNode,RexNode> inLHSExprToRHSNullableExprs) {
-      final List<RexNode> newExpressions = new ArrayList<>();
+      final List<RexNode> newExpressions = new ArrayList<>(visitedRefs.size());
       for (RexNode ref : visitedRefs) {
         Collection<SimilarRexNodeElement> exprs = inLHSExprToRHSExprs.get(ref);
         if (exprs.isEmpty()) {
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/rules/TestHivePointLookupOptimizerRule.java
 
b/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/rules/TestHivePointLookupOptimizerRule.java
index 199a0673c8c..afb089edb35 100644
--- 
a/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/rules/TestHivePointLookupOptimizerRule.java
+++ 
b/ql/src/test/org/apache/hadoop/hive/ql/optimizer/calcite/rules/TestHivePointLookupOptimizerRule.java
@@ -25,6 +25,7 @@
 import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.sql.SqlCollation;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.tools.RelBuilder;
 import org.apache.calcite.util.ConversionUtil;
@@ -311,7 +312,7 @@ public void testObscuredSimple() {
     HiveFilter filter = (HiveFilter) optimizedRelNode;
     RexNode condition = filter.getCondition();
     System.out.println(condition);
-    assertEquals("OR(IN($0, 1, 2), =($1, 99))", condition.toString());
+    assertEquals("OR(=($1, 99), IN($0, 1, 2))", condition.toString());
   }
 
   /** Despite that extraction happen at a higher level; nested parts should 
also be handled */
@@ -520,4 +521,27 @@ public void testSameDecimalLiteralDifferentPrecision() {
     System.out.println(condition);
     assertEquals("IN($1, 10000:DECIMAL(19, 5), 11000:DECIMAL(19, 5))", 
condition.toString());
   }
+
+  @Test
+  public void testNothingToBeMergedInOrExpressionAndOperandOrderIsUnchanged() {
+    // @formatter:off
+    final RelNode basePlan = relBuilder
+            .scan("t")
+            .filter(
+                    or(relBuilder,
+                            relBuilder.call(SqlStdOperatorTable.IS_NULL, 
relBuilder.field("f1")),
+                            relBuilder.call(HiveIn.INSTANCE,
+                                    relBuilder.field("f1"), 
relBuilder.literal(1), relBuilder.literal(2))
+                      )
+                    )
+            .build();
+    // @formatter:on
+
+    planner.setRoot(basePlan);
+    RelNode optimizedRelNode = planner.findBestExp();
+
+    HiveFilter filter = (HiveFilter) optimizedRelNode;
+    RexNode condition = filter.getCondition();
+    assertEquals("OR(IS NULL($0), IN($0, 1, 2))", condition.toString());
+  }
 }
diff --git a/ql/src/test/queries/clientpositive/pointlookup6.q 
b/ql/src/test/queries/clientpositive/pointlookup6.q
index d1b05e7fc0b..afd0d199fa6 100644
--- a/ql/src/test/queries/clientpositive/pointlookup6.q
+++ b/ql/src/test/queries/clientpositive/pointlookup6.q
@@ -17,3 +17,11 @@ WHERE r_table.string_col = l_table.string_col AND 
l_table.string_col IN ('AAA111
 
 SELECT l_table.string_col from l_table, r_table
 WHERE r_table.string_col = l_table.string_col AND l_table.string_col IN 
('AAA111', 'BBB222') AND r_table.string_col IN ('AAA111', 'BBB222');
+
+explain cbo
+SELECT * FROM r_table
+WHERE (
+        MINUTE(string_col) = 2 OR
+        MINUTE(string_col) = 10 OR
+        MINUTE(string_col) IS NULL
+      );
diff --git a/ql/src/test/results/clientpositive/llap/bucket_map_join_tez3.q.out 
b/ql/src/test/results/clientpositive/llap/bucket_map_join_tez3.q.out
index 1330de2ce39..6b92ef7ad48 100644
--- a/ql/src/test/results/clientpositive/llap/bucket_map_join_tez3.q.out
+++ b/ql/src/test/results/clientpositive/llap/bucket_map_join_tez3.q.out
@@ -109,7 +109,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t2`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t2`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL) AS `t2` ON `t0`.`date_col` = `t2`.`date_col` AND 
`t0`.`decimal_col` = `t2`.`decimal_col`
@@ -336,7 +336,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t3`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t3`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL
@@ -586,7 +586,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t2`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t2`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL) AS `t2` ON `t0`.`date_col` = `t2`.`date_col` AND 
`t0`.`decimal_col` = `t2`.`decimal_col`
@@ -812,7 +812,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t3`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t3`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL
@@ -1061,7 +1061,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t2`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t2`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL) AS `t2` ON `t0`.`date_col` = `t2`.`date_col` AND 
`t0`.`decimal_col` = `t2`.`decimal_col`
@@ -1288,7 +1288,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t3`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t3`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL
@@ -1538,7 +1538,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t2`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t2`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL) AS `t2` ON `t0`.`date_col` = `t2`.`date_col` AND 
`t0`.`decimal_col` = `t2`.`decimal_col`
@@ -1764,7 +1764,7 @@ POSTHOOK: Input: default@target_table
 OPTIMIZED SQL: SELECT `t0`.`date_col`, CAST('pipeline' AS STRING) AS 
`string_col`, `t0`.`decimal_col`, `t3`.`date_col` AS `date_col1`, 'pipeline' AS 
`string_col1`, `t3`.`decimal_col` AS `decimal_col1`
 FROM (SELECT `date_col`, `decimal_col`
 FROM `default`.`target_table`
-WHERE `string_col` = 'pipeline' AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
+WHERE 'pipeline' = `string_col` AND CASE WHEN `decimal_col` IS NOT NULL THEN 
CAST(`decimal_col` AS STRING) = '50000000000000000005905545593' ELSE FALSE END 
AND `date_col` IS NOT NULL AND `decimal_col` IS NOT NULL) AS `t0`
 INNER JOIN (SELECT `date_col`, `decimal_col`
 FROM `default`.`source_table`
 WHERE CASE WHEN `decimal_col` IS NOT NULL THEN CAST(`decimal_col` AS STRING) = 
'50000000000000000005905545593' ELSE FALSE END AND `date_col` IS NOT NULL AND 
`decimal_col` IS NOT NULL
diff --git a/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out 
b/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
index 538017c538e..95ec3ae60d6 100644
--- a/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
+++ b/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
@@ -736,7 +736,7 @@ POSTHOOK: Input: default@srcbucket_pruned
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`
 FROM `default`.`srcbucket_pruned`
-WHERE `ds` = '2008-04-08' AND `key` IN (2, 3)
+WHERE `key` IN (2, 3) AND `ds` = '2008-04-08'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -750,13 +750,13 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: srcbucket_pruned
-                  filterExpr: ((ds = '2008-04-08') and (key) IN (2, 3)) (type: 
boolean)
+                  filterExpr: ((key) IN (2, 3) and (ds = '2008-04-08')) (type: 
boolean)
                   buckets included: [4,6,] of 16
                   Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE 
Column stats: COMPLETE
                   GatherStats: false
                   Filter Operator
                     isSamplingPred: false
-                    predicate: ((ds = '2008-04-08') and (key) IN (2, 3)) 
(type: boolean)
+                    predicate: ((key) IN (2, 3) and (ds = '2008-04-08')) 
(type: boolean)
                     Statistics: Num rows: 1 Data size: 268 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: key (type: int), value (type: string), 
'2008-04-08' (type: string)
@@ -807,7 +807,7 @@ POSTHOOK: Input: default@srcbucket_pruned
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, CAST('One' AS STRING) AS `value`, 
CAST('2008-04-08' AS STRING) AS `ds`
 FROM `default`.`srcbucket_pruned`
-WHERE `ds` = '2008-04-08' AND `value` = 'One' AND `key` IN (2, 3)
+WHERE `key` IN (2, 3) AND `ds` = '2008-04-08' AND `value` = 'One'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -821,13 +821,13 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: srcbucket_pruned
-                  filterExpr: ((ds = '2008-04-08') and (value = 'One') and 
(key) IN (2, 3)) (type: boolean)
+                  filterExpr: ((key) IN (2, 3) and (ds = '2008-04-08') and 
(value = 'One')) (type: boolean)
                   buckets included: [4,6,] of 16
                   Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE 
Column stats: COMPLETE
                   GatherStats: false
                   Filter Operator
                     isSamplingPred: false
-                    predicate: ((ds = '2008-04-08') and (value = 'One') and 
(key) IN (2, 3)) (type: boolean)
+                    predicate: ((key) IN (2, 3) and (ds = '2008-04-08') and 
(value = 'One')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 268 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: key (type: int), 'One' (type: string), 
'2008-04-08' (type: string)
@@ -878,7 +878,7 @@ POSTHOOK: Input: default@srcbucket_pruned
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, CAST('One' AS STRING) AS `value`, 
CAST('2008-04-08' AS STRING) AS `ds`
 FROM `default`.`srcbucket_pruned`
-WHERE `value` = 'One' AND `ds` = '2008-04-08' AND `key` IN (2, 3)
+WHERE `value` = 'One' AND `key` IN (2, 3) AND `ds` = '2008-04-08'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -892,13 +892,13 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: srcbucket_pruned
-                  filterExpr: ((value = 'One') and (ds = '2008-04-08') and 
(key) IN (2, 3)) (type: boolean)
+                  filterExpr: ((value = 'One') and (key) IN (2, 3) and (ds = 
'2008-04-08')) (type: boolean)
                   buckets included: [4,6,] of 16
                   Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE 
Column stats: COMPLETE
                   GatherStats: false
                   Filter Operator
                     isSamplingPred: false
-                    predicate: ((value = 'One') and (ds = '2008-04-08') and 
(key) IN (2, 3)) (type: boolean)
+                    predicate: ((value = 'One') and (key) IN (2, 3) and (ds = 
'2008-04-08')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 268 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: key (type: int), 'One' (type: string), 
'2008-04-08' (type: string)
@@ -949,7 +949,7 @@ POSTHOOK: Input: default@srcbucket_pruned
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`
 FROM `default`.`srcbucket_pruned`
-WHERE `ds` = '2008-04-08' AND `key` IN (1, 2)
+WHERE `key` IN (1, 2) AND `ds` = '2008-04-08'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -963,13 +963,13 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: srcbucket_pruned
-                  filterExpr: ((ds = '2008-04-08') and (key) IN (1, 2)) (type: 
boolean)
+                  filterExpr: ((key) IN (1, 2) and (ds = '2008-04-08')) (type: 
boolean)
                   buckets included: [4,13,] of 16
                   Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE 
Column stats: COMPLETE
                   GatherStats: false
                   Filter Operator
                     isSamplingPred: false
-                    predicate: ((ds = '2008-04-08') and (key) IN (1, 2)) 
(type: boolean)
+                    predicate: ((key) IN (1, 2) and (ds = '2008-04-08')) 
(type: boolean)
                     Statistics: Num rows: 1 Data size: 268 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: key (type: int), value (type: string), 
'2008-04-08' (type: string)
@@ -1020,7 +1020,7 @@ POSTHOOK: Input: default@srcbucket_pruned
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, CAST('One' AS STRING) AS `value`, 
CAST('2008-04-08' AS STRING) AS `ds`
 FROM `default`.`srcbucket_pruned`
-WHERE `value` = 'One' AND `ds` = '2008-04-08' AND `key` IN (1, 2)
+WHERE `key` IN (1, 2) AND `value` = 'One' AND `ds` = '2008-04-08'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -1034,13 +1034,13 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: srcbucket_pruned
-                  filterExpr: ((value = 'One') and (ds = '2008-04-08') and 
(key) IN (1, 2)) (type: boolean)
+                  filterExpr: ((key) IN (1, 2) and (value = 'One') and (ds = 
'2008-04-08')) (type: boolean)
                   buckets included: [4,13,] of 16
                   Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE 
Column stats: COMPLETE
                   GatherStats: false
                   Filter Operator
                     isSamplingPred: false
-                    predicate: ((value = 'One') and (ds = '2008-04-08') and 
(key) IN (1, 2)) (type: boolean)
+                    predicate: ((key) IN (1, 2) and (value = 'One') and (ds = 
'2008-04-08')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 268 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: key (type: int), 'One' (type: string), 
'2008-04-08' (type: string)
diff --git 
a/ql/src/test/results/clientpositive/llap/fold_eq_with_case_when.q.out 
b/ql/src/test/results/clientpositive/llap/fold_eq_with_case_when.q.out
index 88f9b0594bb..1fb1a96795e 100644
--- a/ql/src/test/results/clientpositive/llap/fold_eq_with_case_when.q.out
+++ b/ql/src/test/results/clientpositive/llap/fold_eq_with_case_when.q.out
@@ -50,10 +50,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: lineitem
-                  filterExpr: ((l_shipmode = 'RAIL') and (to_date(CAST( 
l_shipdate AS TIMESTAMP)) = DATE'1996-03-30')) (type: boolean)
+                  filterExpr: ((l_shipmode = 'RAIL') and (DATE'1996-03-30' = 
to_date(CAST( l_shipdate AS TIMESTAMP)))) (type: boolean)
                   Statistics: Num rows: 100 Data size: 19000 Basic stats: 
COMPLETE Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((l_shipmode = 'RAIL') and (to_date(CAST( 
l_shipdate AS TIMESTAMP)) = DATE'1996-03-30')) (type: boolean)
+                    predicate: ((l_shipmode = 'RAIL') and (DATE'1996-03-30' = 
to_date(CAST( l_shipdate AS TIMESTAMP)))) (type: boolean)
                     Statistics: Num rows: 7 Data size: 1330 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: l_orderkey (type: int), 
(UDFToDouble(l_partkey) / 1000000.0D) (type: double)
diff --git a/ql/src/test/results/clientpositive/llap/join_filters_overlap.q.out 
b/ql/src/test/results/clientpositive/llap/join_filters_overlap.q.out
index 78155ec9d55..a4c9b287d65 100644
--- a/ql/src/test/results/clientpositive/llap/join_filters_overlap.q.out
+++ b/ql/src/test/results/clientpositive/llap/join_filters_overlap.q.out
@@ -23,10 +23,10 @@ FROM (SELECT `key`, `value`, `value` = 60 AS `EXPR$0`, 
`value` = 50 AS `EXPR$1`
 FROM `default`.`a_n4`) AS `t`
 LEFT JOIN (SELECT `key`, CAST(50 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`EXPR$1` AND 
`t`.`key` = `t1`.`key`
+WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`key` = `t1`.`key` 
AND `t`.`EXPR$1`
 LEFT JOIN (SELECT `key`, CAST(60 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`EXPR$0` AND 
`t`.`key` = `t3`.`key`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`key` = `t3`.`key` 
AND `t`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -301,10 +301,10 @@ FROM (SELECT `key`, CAST(50 AS INT) AS `value`
 FROM `default`.`a_n4`
 WHERE `value` = 50 AND `key` IS NOT NULL) AS `t0`
 RIGHT JOIN (SELECT `key`, `value`, `value` = 60 AS `EXPR$0`, `value` = 50 AS 
`EXPR$1`
-FROM `default`.`a_n4`) AS `t1` ON `t1`.`EXPR$1` AND `t0`.`key` = `t1`.`key`
+FROM `default`.`a_n4`) AS `t1` ON `t0`.`key` = `t1`.`key` AND `t1`.`EXPR$1`
 LEFT JOIN (SELECT `key`, CAST(60 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`EXPR$0` AND 
`t1`.`key` = `t3`.`key`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`key` = `t3`.`key` 
AND `t1`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -579,10 +579,10 @@ FROM (SELECT `key`, CAST(50 AS INT) AS `value`
 FROM `default`.`a_n4`
 WHERE `value` = 50 AND `key` IS NOT NULL) AS `t0`
 RIGHT JOIN (SELECT `key`, `value`, `value` = 60 AS `EXPR$0`, `value` = 50 AS 
`EXPR$1`
-FROM `default`.`a_n4`) AS `t1` ON `t1`.`EXPR$1` AND `t0`.`key` = `t1`.`key`
+FROM `default`.`a_n4`) AS `t1` ON `t0`.`key` = `t1`.`key` AND `t1`.`EXPR$1`
 LEFT JOIN (SELECT `key`, CAST(60 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`EXPR$0` AND 
`t1`.`key` = `t3`.`key`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`key` = `t3`.`key` 
AND `t1`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -856,13 +856,13 @@ OPTIMIZED SQL: SELECT `t`.`key`, `t`.`value`, `t0`.`key` 
AS `key1`, `t0`.`value`
 FROM (SELECT `key`, `value`, `value` = 40 AS `EXPR$0`, `value` = 50 AS `EXPR$1`
 FROM `default`.`a_n4`) AS `t`
 FULL JOIN (SELECT `key`, `value`, `value` = 60 AS `EXPR$1`, `value` = 50 AS 
`EXPR$13`
-FROM `default`.`a_n4`) AS `t0` ON `t`.`EXPR$1` AND `t0`.`EXPR$13` AND 
`t`.`key` = `t0`.`key`
+FROM `default`.`a_n4`) AS `t0` ON `t`.`key` = `t0`.`key` AND `t`.`EXPR$1` AND 
`t0`.`EXPR$13`
 LEFT JOIN (SELECT `key`, CAST(60 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t2` ON `t0`.`EXPR$1` AND 
`t0`.`key` = `t2`.`key`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t2` ON `t0`.`key` = `t2`.`key` 
AND `t0`.`EXPR$1`
 LEFT JOIN (SELECT `key`, CAST(40 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 40 AND `key` IS NOT NULL) AS `t4` ON `t`.`EXPR$0` AND 
`t`.`key` = `t4`.`key`
+WHERE `value` = 40 AND `key` IS NOT NULL) AS `t4` ON `t`.`key` = `t4`.`key` 
AND `t`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
@@ -1173,13 +1173,13 @@ FROM (SELECT `key`, `value`, `value` = 40 AS `EXPR$0`, 
`value` = 60 AS `EXPR$1`,
 FROM `default`.`a_n4`) AS `t`
 LEFT JOIN (SELECT `key`, CAST(50 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`EXPR$2` AND 
`t`.`key` = `t1`.`key`
+WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`key` = `t1`.`key` 
AND `t`.`EXPR$2`
 LEFT JOIN (SELECT `key`, CAST(60 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`EXPR$1` AND 
`t`.`key` = `t3`.`key`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`key` = `t3`.`key` 
AND `t`.`EXPR$1`
 LEFT JOIN (SELECT `key`, CAST(40 AS INT) AS `value`
 FROM `default`.`a_n4`
-WHERE `value` = 40 AND `key` IS NOT NULL) AS `t5` ON `t`.`EXPR$0` AND 
`t`.`key` = `t5`.`key`
+WHERE `value` = 40 AND `key` IS NOT NULL) AS `t5` ON `t`.`key` = `t5`.`key` 
AND `t`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
diff --git a/ql/src/test/results/clientpositive/llap/masking_mv.q.out 
b/ql/src/test/results/clientpositive/llap/masking_mv.q.out
index 1959fe045f6..33e25f3d81c 100644
--- a/ql/src/test/results/clientpositive/llap/masking_mv.q.out
+++ b/ql/src/test/results/clientpositive/llap/masking_mv.q.out
@@ -206,9 +206,9 @@ STAGE PLANS:
       Processor Tree:
         TableScan
           alias: default.masking_test_view_n_mv
-          filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+          filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
           Filter Operator
-            predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+            predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
             Select Operator
               expressions: key (type: int)
               outputColumnNames: _col0
@@ -272,10 +272,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.masking_test_view_n_mv
-                  filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                  filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
                   Statistics: Num rows: 500 Data size: 2000 Basic stats: 
COMPLETE Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                    predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
                     Statistics: Num rows: 5 Data size: 20 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Group By Operator
                       keys: key (type: int)
@@ -548,10 +548,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.masking_test_view_n_mv_4
-                  filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                  filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
                   Statistics: Num rows: 500 Data size: 47500 Basic stats: 
COMPLETE Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                    predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
                     Statistics: Num rows: 5 Data size: 475 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: reverse(value) (type: string)
@@ -639,10 +639,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.masking_test_view_n_mv_4
-                  filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                  filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
                   Statistics: Num rows: 500 Data size: 47500 Basic stats: 
COMPLETE Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
+                    predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
                     Statistics: Num rows: 5 Data size: 475 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: reverse(value) (type: string), key (type: 
int)
diff --git 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb.q.out 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb.q.out
index 483afea8b0d..79c2216e9b8 100644
--- 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb.q.out
+++ 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb.q.out
@@ -664,10 +664,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((lo_quantity < 25.0D) and (d_year = 1993) and 
lo_discount BETWEEN 1.0D AND 3.0D) (type: boolean)
+                  filterExpr: ((lo_quantity < 25.0D) and lo_discount BETWEEN 
1.0D AND 3.0D and (d_year = 1993)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((lo_quantity < 25.0D) and (d_year = 1993) and 
lo_discount BETWEEN 1.0D AND 3.0D) (type: boolean)
+                    predicate: ((lo_quantity < 25.0D) and lo_discount BETWEEN 
1.0D AND 3.0D and (d_year = 1993)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 28 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -754,10 +754,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((d_yearmonthnum = 199401) and lo_quantity 
BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D) (type: boolean)
+                  filterExpr: (lo_quantity BETWEEN 26.0D AND 35.0D and 
lo_discount BETWEEN 4.0D AND 6.0D and (d_yearmonthnum = 199401)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((d_yearmonthnum = 199401) and lo_quantity 
BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D) (type: boolean)
+                    predicate: (lo_quantity BETWEEN 26.0D AND 35.0D and 
lo_discount BETWEEN 4.0D AND 6.0D and (d_yearmonthnum = 199401)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 28 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -846,10 +846,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((d_year = 1994) and (d_weeknuminyear = 6) and 
lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 5.0D AND 7.0D) 
(type: boolean)
+                  filterExpr: (lo_quantity BETWEEN 26.0D AND 35.0D and 
lo_discount BETWEEN 5.0D AND 7.0D and (d_year = 1994) and (d_weeknuminyear = 
6)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 32 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((d_year = 1994) and (d_weeknuminyear = 6) and 
lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 5.0D AND 7.0D) 
(type: boolean)
+                    predicate: (lo_quantity BETWEEN 26.0D AND 35.0D and 
lo_discount BETWEEN 5.0D AND 7.0D and (d_year = 1994) and (d_weeknuminyear = 
6)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 32 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -1077,10 +1077,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((s_region = 'ASIA') and p_brand1 BETWEEN 
'MFGR#2221' AND 'MFGR#2228') (type: boolean)
+                  filterExpr: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' 
and (s_region = 'ASIA')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 180 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((s_region = 'ASIA') and p_brand1 BETWEEN 
'MFGR#2221' AND 'MFGR#2228') (type: boolean)
+                    predicate: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' 
and (s_region = 'ASIA')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 180 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: d_year (type: int), p_brand1 (type: 
string), lo_revenue (type: double)
@@ -1333,10 +1333,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((c_region = 'ASIA') and (s_region = 'ASIA') and 
d_year BETWEEN 1992 AND 1997) (type: boolean)
+                  filterExpr: (d_year BETWEEN 1992 AND 1997 and (c_region = 
'ASIA') and (s_region = 'ASIA')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 348 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((c_region = 'ASIA') and (s_region = 'ASIA') 
and d_year BETWEEN 1992 AND 1997) (type: boolean)
+                    predicate: (d_year BETWEEN 1992 AND 1997 and (c_region = 
'ASIA') and (s_region = 'ASIA')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 348 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: c_nation (type: string), d_year (type: 
int), s_nation (type: string), lo_revenue (type: double)
@@ -1461,10 +1461,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv_n0
-                  filterExpr: ((c_nation = 'UNITED STATES') and (s_nation = 
'UNITED STATES') and d_year BETWEEN 1992 AND 1997) (type: boolean)
+                  filterExpr: (d_year BETWEEN 1992 AND 1997 and (c_nation = 
'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 348 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((c_nation = 'UNITED STATES') and (s_nation = 
'UNITED STATES') and d_year BETWEEN 1992 AND 1997) (type: boolean)
+                    predicate: (d_year BETWEEN 1992 AND 1997 and (c_nation = 
'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 348 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: c_city (type: string), d_year (type: int), 
s_city (type: string), lo_revenue (type: double)
diff --git 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_2.q.out 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_2.q.out
index 0df50799d5f..72a69cf8221 100644
--- 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_2.q.out
+++ 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_2.q.out
@@ -667,10 +667,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((UDFToDouble(lo_quantity) < 25.0D) and 
(UDFToInteger(d_year) = 1993) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 
3.0D) (type: boolean)
+                  filterExpr: ((UDFToDouble(lo_quantity) < 25.0D) and 
UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D and (UDFToInteger(d_year) = 
1993)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((UDFToDouble(lo_quantity) < 25.0D) and 
(UDFToInteger(d_year) = 1993) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 
3.0D) (type: boolean)
+                    predicate: ((UDFToDouble(lo_quantity) < 25.0D) and 
UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D and (UDFToInteger(d_year) = 
1993)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 260 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -757,10 +757,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((UDFToInteger(d_yearmonthnum) = 199401) and 
UDFToDouble(lo_quantity) BETWEEN 26.0D AND 35.0D and UDFToDouble(lo_discount) 
BETWEEN 4.0D AND 6.0D) (type: boolean)
+                  filterExpr: (UDFToDouble(lo_quantity) BETWEEN 26.0D AND 
35.0D and UDFToDouble(lo_discount) BETWEEN 4.0D AND 6.0D and 
(UDFToInteger(d_yearmonthnum) = 199401)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((UDFToInteger(d_yearmonthnum) = 199401) and 
UDFToDouble(lo_quantity) BETWEEN 26.0D AND 35.0D and UDFToDouble(lo_discount) 
BETWEEN 4.0D AND 6.0D) (type: boolean)
+                    predicate: (UDFToDouble(lo_quantity) BETWEEN 26.0D AND 
35.0D and UDFToDouble(lo_discount) BETWEEN 4.0D AND 6.0D and 
(UDFToInteger(d_yearmonthnum) = 199401)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 260 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -849,10 +849,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((UDFToInteger(d_year) = 1994) and 
(UDFToInteger(d_weeknuminyear) = 6) and UDFToDouble(lo_quantity) BETWEEN 26.0D 
AND 35.0D and UDFToDouble(lo_discount) BETWEEN 5.0D AND 7.0D) (type: boolean)
+                  filterExpr: (UDFToDouble(lo_quantity) BETWEEN 26.0D AND 
35.0D and UDFToDouble(lo_discount) BETWEEN 5.0D AND 7.0D and 
(UDFToInteger(d_year) = 1994) and (UDFToInteger(d_weeknuminyear) = 6)) (type: 
boolean)
                   Statistics: Num rows: 1 Data size: 344 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((UDFToInteger(d_year) = 1994) and 
(UDFToInteger(d_weeknuminyear) = 6) and UDFToDouble(lo_quantity) BETWEEN 26.0D 
AND 35.0D and UDFToDouble(lo_discount) BETWEEN 5.0D AND 7.0D) (type: boolean)
+                    predicate: (UDFToDouble(lo_quantity) BETWEEN 26.0D AND 
35.0D and UDFToDouble(lo_discount) BETWEEN 5.0D AND 7.0D and 
(UDFToInteger(d_year) = 1994) and (UDFToInteger(d_weeknuminyear) = 6)) (type: 
boolean)
                     Statistics: Num rows: 1 Data size: 344 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: discounted_price (type: double)
@@ -1080,10 +1080,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((s_region = 'ASIA') and p_brand1 BETWEEN 
'MFGR#2221' AND 'MFGR#2228') (type: boolean)
+                  filterExpr: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' 
and (s_region = 'ASIA')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((s_region = 'ASIA') and p_brand1 BETWEEN 
'MFGR#2221' AND 'MFGR#2228') (type: boolean)
+                    predicate: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' 
and (s_region = 'ASIA')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 260 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: UDFToInteger(d_year) (type: int), p_brand1 
(type: string), lo_revenue (type: double)
@@ -1336,10 +1336,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((c_region = 'ASIA') and (s_region = 'ASIA') and 
UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
+                  filterExpr: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and 
(c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((c_region = 'ASIA') and (s_region = 'ASIA') 
and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
+                    predicate: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and 
(c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 428 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: c_nation (type: string), s_nation (type: 
string), UDFToInteger(d_year) (type: int), lo_revenue (type: double)
@@ -1464,10 +1464,10 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: default.ssb_mv
-                  filterExpr: ((c_nation = 'UNITED STATES') and (s_nation = 
'UNITED STATES') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
+                  filterExpr: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and 
(c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
                   Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE 
Column stats: COMPLETE
                   Filter Operator
-                    predicate: ((c_nation = 'UNITED STATES') and (s_nation = 
'UNITED STATES') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
+                    predicate: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and 
(c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 428 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: c_city (type: string), s_city (type: 
string), UDFToInteger(d_year) (type: int), lo_revenue (type: double)
diff --git 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets.q.out
 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets.q.out
index 1ffed8f8a62..93d94969447 100644
--- 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets.q.out
+++ 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets.q.out
@@ -696,7 +696,7 @@ POSTHOOK: Input: default@ssb_mv_n3
 #### A masked pattern was here ####
 CBO PLAN:
 HiveAggregate(group=[{}], agg#0=[sum($16)])
-  HiveFilter(condition=[AND(<($8, 2.5E1), =(CAST($18):BIGINT NOT NULL, 29247), 
=($4, 1993), BETWEEN(false, $7, 1E0:DOUBLE, 3E0:DOUBLE))])
+  HiveFilter(condition=[AND(<($8, 2.5E1), =(CAST($18):BIGINT NOT NULL, 29247), 
BETWEEN(false, $7, 1E0:DOUBLE, 3E0:DOUBLE), =($4, 1993))])
     HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
@@ -731,7 +731,7 @@ POSTHOOK: Input: default@ssb_mv_n3
 #### A masked pattern was here ####
 CBO PLAN:
 HiveAggregate(group=[{}], agg#0=[sum($16)])
-  HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), =($6, 
199401), BETWEEN(false, $8, 2.6E1:DOUBLE, 3.5E1:DOUBLE), BETWEEN(false, $7, 
4E0:DOUBLE, 6E0:DOUBLE))])
+  HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), 
BETWEEN(false, $8, 2.6E1:DOUBLE, 3.5E1:DOUBLE), BETWEEN(false, $7, 4E0:DOUBLE, 
6E0:DOUBLE), =($6, 199401))])
     HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
@@ -768,7 +768,7 @@ POSTHOOK: Input: default@ssb_mv_n3
 #### A masked pattern was here ####
 CBO PLAN:
 HiveAggregate(group=[{}], agg#0=[sum($16)])
-  HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), =($4, 1994), 
=($3, 6), BETWEEN(false, $8, 2.6E1:DOUBLE, 3.5E1:DOUBLE), BETWEEN(false, $7, 
5E0:DOUBLE, 7E0:DOUBLE))])
+  HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), 
BETWEEN(false, $8, 2.6E1:DOUBLE, 3.5E1:DOUBLE), BETWEEN(false, $7, 5E0:DOUBLE, 
7E0:DOUBLE), =($4, 1994), =($3, 6))])
     HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
@@ -870,7 +870,7 @@ CBO PLAN:
 HiveSortLimit(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[ASC])
   HiveProject(lo_revenue=[$2], d_year=[$0], p_brand1=[$1])
     HiveAggregate(group=[{4, 9}], agg#0=[sum($15)])
-      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), =($14, 
_UTF-16LE'ASIA'), BETWEEN(false, $9, _UTF-16LE'MFGR#2221':VARCHAR(2147483647) 
CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2228':VARCHAR(2147483647) CHARACTER 
SET "UTF-16LE"))])
+      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), 
BETWEEN(false, $9, _UTF-16LE'MFGR#2221':VARCHAR(2147483647) CHARACTER SET 
"UTF-16LE", _UTF-16LE'MFGR#2228':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), 
=($14, _UTF-16LE'ASIA'))])
         HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
@@ -977,7 +977,7 @@ CBO PLAN:
 HiveSortLimit(sort0=[$2], sort1=[$3], dir0=[ASC], dir1=[DESC])
   HiveProject(c_nation=[$0], s_nation=[$2], d_year=[$1], $f3=[$3])
     HiveAggregate(group=[{1, 4, 13}], agg#0=[sum($15)])
-      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), =($2, 
_UTF-16LE'ASIA'), =($14, _UTF-16LE'ASIA'), BETWEEN(false, $4, 1992, 1997))])
+      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), 
BETWEEN(false, $4, 1992, 1997), =($2, _UTF-16LE'ASIA'), =($14, 
_UTF-16LE'ASIA'))])
         HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
@@ -1030,7 +1030,7 @@ CBO PLAN:
 HiveSortLimit(sort0=[$2], sort1=[$3], dir0=[ASC], dir1=[DESC])
   HiveProject(c_city=[$0], s_city=[$2], d_year=[$1], $f3=[$3])
     HiveAggregate(group=[{0, 4, 12}], agg#0=[sum($15)])
-      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), =($1, 
_UTF-16LE'UNITED STATES'), =($13, _UTF-16LE'UNITED STATES'), BETWEEN(false, $4, 
1992, 1997))])
+      HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), 
BETWEEN(false, $4, 1992, 1997), =($1, _UTF-16LE'UNITED STATES'), =($13, 
_UTF-16LE'UNITED STATES'))])
         HiveTableScan(table=[[default, ssb_mv_n3]], 
table:alias=[default.ssb_mv_n3])
 
 PREHOOK: query: explain cbo
diff --git 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets_2.q.out
 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets_2.q.out
index a5a7134a9da..10dfb636857 100644
--- 
a/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets_2.q.out
+++ 
b/ql/src/test/results/clientpositive/llap/materialized_view_rewrite_ssb_grouping_sets_2.q.out
@@ -719,7 +719,7 @@ CBO PLAN:
 HiveSortLimit(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[ASC])
   HiveProject($f2=[$2], d_year=[$1], p_brand1=[$0])
     HiveAggregate(group=[{0, 7}], agg#0=[sum($9)])
-      HiveFilter(condition=[AND(=(CAST($8):BIGINT NOT NULL, 0), =($4, 
_UTF-16LE'ASIA'), BETWEEN(false, $0, _UTF-16LE'MFGR#2221':VARCHAR(2147483647) 
CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2228':VARCHAR(2147483647) CHARACTER 
SET "UTF-16LE"))])
+      HiveFilter(condition=[AND(=(CAST($8):BIGINT NOT NULL, 0), BETWEEN(false, 
$0, _UTF-16LE'MFGR#2221':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", 
_UTF-16LE'MFGR#2228':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =($4, 
_UTF-16LE'ASIA'))])
         HiveTableScan(table=[[default, ssb_mv_n4]], 
table:alias=[default.ssb_mv_n4])
 
 PREHOOK: query: explain cbo
diff --git a/ql/src/test/results/clientpositive/llap/pcs.q.out 
b/ql/src/test/results/clientpositive/llap/pcs.q.out
index 37f4d037ae8..204b8dc2da9 100644
--- a/ql/src/test/results/clientpositive/llap/pcs.q.out
+++ b/ql/src/test/results/clientpositive/llap/pcs.q.out
@@ -526,7 +526,7 @@ FROM `default`.`pcs_t1`
 WHERE `key` IN (1, 2) AND `ds` IN ('2000-04-08', '2000-04-09')) AS `t0`
 INNER JOIN (SELECT `key`, `ds`
 FROM `default`.`pcs_t1`
-WHERE `ds` IN ('2000-04-08', '2000-04-09')) AS `t2` ON (`t0`.`key`, `t0`.`ds`, 
`t2`.`ds`) IN ((1, '2000-04-08', '2000-04-09'), (2, '2000-04-09', 
'2000-04-08')) AND `t0`.`ds` = `t2`.`ds`
+WHERE `ds` IN ('2000-04-08', '2000-04-09')) AS `t2` ON `t0`.`ds` = `t2`.`ds` 
AND (`t0`.`key`, `t0`.`ds`, `t2`.`ds`) IN ((1, '2000-04-08', '2000-04-09'), (2, 
'2000-04-09', '2000-04-08'))
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-0 depends on stages: Stage-1
diff --git a/ql/src/test/results/clientpositive/llap/pointlookup6.q.out 
b/ql/src/test/results/clientpositive/llap/pointlookup6.q.out
index 793422da5bb..1cb5775b171 100644
--- a/ql/src/test/results/clientpositive/llap/pointlookup6.q.out
+++ b/ql/src/test/results/clientpositive/llap/pointlookup6.q.out
@@ -77,3 +77,28 @@ POSTHOOK: Input: default@l_table
 POSTHOOK: Input: default@r_table
 #### A masked pattern was here ####
 AAA111
+PREHOOK: query: explain cbo
+SELECT * FROM r_table
+WHERE (
+        MINUTE(string_col) = 2 OR
+        MINUTE(string_col) = 10 OR
+        MINUTE(string_col) IS NULL
+      )
+PREHOOK: type: QUERY
+PREHOOK: Input: default@r_table
+#### A masked pattern was here ####
+POSTHOOK: query: explain cbo
+SELECT * FROM r_table
+WHERE (
+        MINUTE(string_col) = 2 OR
+        MINUTE(string_col) = 10 OR
+        MINUTE(string_col) IS NULL
+      )
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@r_table
+#### A masked pattern was here ####
+CBO PLAN:
+HiveProject(string_col=[$0])
+  HiveFilter(condition=[OR(IS NULL(CAST($0):TIMESTAMP(9)), 
IN(MINUTE(FLAG(MINUTE), CAST($0):TIMESTAMP(9)), 2, 10))])
+    HiveTableScan(table=[[default, r_table]], table:alias=[r_table])
+
diff --git 
a/ql/src/test/results/clientpositive/llap/rand_partitionpruner2.q.out 
b/ql/src/test/results/clientpositive/llap/rand_partitionpruner2.q.out
index ee4a4050b27..d866fc52efa 100644
--- a/ql/src/test/results/clientpositive/llap/rand_partitionpruner2.q.out
+++ b/ql/src/test/results/clientpositive/llap/rand_partitionpruner2.q.out
@@ -24,7 +24,7 @@ POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
 POSTHOOK: Output: default@tmptable_n1
 OPTIMIZED SQL: SELECT `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`, 
`hr`
 FROM `default`.`srcpart`
-WHERE `ds` = '2008-04-08' AND RAND(1) < 0.1
+WHERE RAND(1) < 0.1 AND `ds` = '2008-04-08'
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-2 depends on stages: Stage-1
diff --git 
a/ql/src/test/results/clientpositive/llap/rand_partitionpruner3.q.out 
b/ql/src/test/results/clientpositive/llap/rand_partitionpruner3.q.out
index e3e3d877b87..7f3aae3507a 100644
--- a/ql/src/test/results/clientpositive/llap/rand_partitionpruner3.q.out
+++ b/ql/src/test/results/clientpositive/llap/rand_partitionpruner3.q.out
@@ -10,7 +10,7 @@ POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
 #### A masked pattern was here ####
 OPTIMIZED SQL: SELECT `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`, 
`hr`
 FROM `default`.`srcpart`
-WHERE CAST(`key` AS DOUBLE) BETWEEN 10 AND 50 AND `ds` = '2008-04-08' AND 
RAND(1) < 0.1 AND `hr` LIKE '%2'
+WHERE CAST(`key` AS DOUBLE) BETWEEN 10 AND 50 AND RAND(1) < 0.1 AND `ds` = 
'2008-04-08' AND `hr` LIKE '%2'
 STAGE DEPENDENCIES:
   Stage-0 is a root stage
 
diff --git a/ql/src/test/results/clientpositive/llap/union22.q.out 
b/ql/src/test/results/clientpositive/llap/union22.q.out
index 2c42e18d385..43974c60a1d 100644
--- a/ql/src/test/results/clientpositive/llap/union22.q.out
+++ b/ql/src/test/results/clientpositive/llap/union22.q.out
@@ -90,7 +90,7 @@ FROM `default`.`dst_union22`
 WHERE `k1` > 20) AS `t2`
 LEFT JOIN (SELECT `k1`, `k3`, `k4`
 FROM `default`.`dst_union22_delta`
-WHERE `k0` > 50 AND `k1` > 20 AND `ds` = '1') AS `t4` ON `t2`.`EXPR$0` AND 
`t2`.`k1` = `t4`.`k1`
+WHERE `k0` > 50 AND `k1` > 20 AND `ds` = '1') AS `t4` ON `t2`.`k1` = `t4`.`k1` 
AND `t2`.`EXPR$0`
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-2 depends on stages: Stage-1
diff --git a/ql/src/test/results/clientpositive/llap/vector_interval_2.q.out 
b/ql/src/test/results/clientpositive/llap/vector_interval_2.q.out
index 88d79b9e126..559c944c03f 100644
--- a/ql/src/test/results/clientpositive/llap/vector_interval_2.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_interval_2.q.out
@@ -962,7 +962,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: ((CAST( str2 AS INTERVAL YEAR TO MONTH) >= 
INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and 
(CAST( str1 AS INTERVAL YEAR TO MONTH) <= CAST( str2 AS INTERVAL YEAR TO 
MONTH)) and (CAST( str1 AS INTERVAL YEAR TO MONTH) < CAST( str2 AS INTERVAL 
YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= CAST( str1 AS 
INTERVAL YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) > CAST( 
str1 AS INTERVAL YEAR TO MONTH)) and (C [...]
+                  filterExpr: ((CAST( str2 AS INTERVAL YEAR TO MONTH) >= 
INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and 
(CAST( str1 AS INTERVAL YEAR TO MONTH) <= CAST( str2 AS INTERVAL YEAR TO 
MONTH)) and (CAST( str1 AS INTERVAL YEAR TO MONTH) < CAST( str2 AS INTERVAL 
YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= CAST( str1 AS 
INTERVAL YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) > CAST( 
str1 AS INTERVAL YEAR TO MONTH)) and (C [...]
                   Statistics: Num rows: 2 Data size: 428 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -970,8 +970,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
FilterIntervalYearMonthColGreaterEqualIntervalYearMonthScalar(col 
8:interval_year_month, val 14)(children: CastStringToIntervalYearMonth(col 
3:string) -> 8:interval_year_month), 
FilterIntervalYearMonthColGreaterIntervalYearMonthScalar(col 
9:interval_year_month, val 14)(children: CastStringToIntervalYearMonth(col 
3:string) -> 9:interval_year_month), FilterLongColLessEqualLongColumn(col 
10:interval_year_month, col 11: [...]
-                    predicate: ((CAST( str2 AS INTERVAL YEAR TO MONTH) >= 
INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and 
(CAST( str1 AS INTERVAL YEAR TO MONTH) <= CAST( str2 AS INTERVAL YEAR TO 
MONTH)) and (CAST( str1 AS INTERVAL YEAR TO MONTH) < CAST( str2 AS INTERVAL 
YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= CAST( str1 AS 
INTERVAL YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) > CAST( 
str1 AS INTERVAL YEAR TO MONTH)) and ( [...]
+                        predicateExpression: FilterExprAndExpr(children: 
FilterIntervalYearMonthColGreaterEqualIntervalYearMonthScalar(col 
8:interval_year_month, val 14)(children: CastStringToIntervalYearMonth(col 
3:string) -> 8:interval_year_month), 
FilterIntervalYearMonthColGreaterIntervalYearMonthScalar(col 
9:interval_year_month, val 14)(children: CastStringToIntervalYearMonth(col 
3:string) -> 9:interval_year_month), FilterLongColLessEqualLongColumn(col 
10:interval_year_month, col 11: [...]
+                    predicate: ((CAST( str2 AS INTERVAL YEAR TO MONTH) >= 
INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and 
(CAST( str1 AS INTERVAL YEAR TO MONTH) <= CAST( str2 AS INTERVAL YEAR TO 
MONTH)) and (CAST( str1 AS INTERVAL YEAR TO MONTH) < CAST( str2 AS INTERVAL 
YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= CAST( str1 AS 
INTERVAL YEAR TO MONTH)) and (CAST( str2 AS INTERVAL YEAR TO MONTH) > CAST( 
str1 AS INTERVAL YEAR TO MONTH)) and ( [...]
                     Statistics: Num rows: 1 Data size: 214 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
@@ -1162,7 +1162,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: ((CAST( str4 AS INTERVAL DAY TO SECOND) >= 
INTERVAL'1 02:03:04.000000000') and (CAST( str4 AS INTERVAL DAY TO SECOND) > 
INTERVAL'1 02:03:04.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) <= 
CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str3 AS INTERVAL DAY TO 
SECOND) < CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS INTERVAL 
DAY TO SECOND) >= CAST( str3 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS 
INTERVAL DAY TO SECOND) > CAST( str3  [...]
+                  filterExpr: ((CAST( str4 AS INTERVAL DAY TO SECOND) >= 
INTERVAL'1 02:03:04.000000000') and (CAST( str4 AS INTERVAL DAY TO SECOND) > 
INTERVAL'1 02:03:04.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) <= 
CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str3 AS INTERVAL DAY TO 
SECOND) < CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS INTERVAL 
DAY TO SECOND) >= CAST( str3 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS 
INTERVAL DAY TO SECOND) > CAST( str3  [...]
                   Statistics: Num rows: 2 Data size: 444 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -1170,8 +1170,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
FilterIntervalDayTimeColGreaterEqualIntervalDayTimeScalar(col 
8:interval_day_time, val 1 02:03:04.000000000)(children: 
CastStringToIntervalDayTime(col 5:string) -> 8:interval_day_time), 
FilterIntervalDayTimeColGreaterIntervalDayTimeScalar(col 9:interval_day_time, 
val 1 02:03:04.000000000)(children: CastStringToIntervalDayTime(col 5:string) 
-> 9:interval_day_time), FilterIntervalDayTimeColLessEqualIntervalDayTimeColu 
[...]
-                    predicate: ((CAST( str4 AS INTERVAL DAY TO SECOND) >= 
INTERVAL'1 02:03:04.000000000') and (CAST( str4 AS INTERVAL DAY TO SECOND) > 
INTERVAL'1 02:03:04.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) <= 
CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str3 AS INTERVAL DAY TO 
SECOND) < CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS INTERVAL 
DAY TO SECOND) >= CAST( str3 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS 
INTERVAL DAY TO SECOND) > CAST( str3 [...]
+                        predicateExpression: FilterExprAndExpr(children: 
FilterIntervalDayTimeColGreaterEqualIntervalDayTimeScalar(col 
8:interval_day_time, val 1 02:03:04.000000000)(children: 
CastStringToIntervalDayTime(col 5:string) -> 8:interval_day_time), 
FilterIntervalDayTimeColGreaterIntervalDayTimeScalar(col 9:interval_day_time, 
val 1 02:03:04.000000000)(children: CastStringToIntervalDayTime(col 5:string) 
-> 9:interval_day_time), FilterIntervalDayTimeColLessEqualIntervalDayTimeColu 
[...]
+                    predicate: ((CAST( str4 AS INTERVAL DAY TO SECOND) >= 
INTERVAL'1 02:03:04.000000000') and (CAST( str4 AS INTERVAL DAY TO SECOND) > 
INTERVAL'1 02:03:04.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) <= 
CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str3 AS INTERVAL DAY TO 
SECOND) < CAST( str4 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS INTERVAL 
DAY TO SECOND) >= CAST( str3 AS INTERVAL DAY TO SECOND)) and (CAST( str4 AS 
INTERVAL DAY TO SECOND) > CAST( str3 [...]
                     Statistics: Num rows: 1 Data size: 222 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
@@ -1352,7 +1352,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: (CAST( str1 AS INTERVAL YEAR TO MONTH) is not 
null and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and 
((dt + INTERVAL'1-2') = DATE'2002-03-01') and (dt <> (dt + CAST( str1 AS 
INTERVAL YEAR TO MONTH))) and (dt <> (dt + INTERVAL'1-2'))) (type: boolean)
+                  filterExpr: (CAST( str1 AS INTERVAL YEAR TO MONTH) is not 
null and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and 
(dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and ((dt + INTERVAL'1-2') 
= DATE'2002-03-01') and (dt <> (dt + INTERVAL'1-2'))) (type: boolean)
                   Statistics: Num rows: 2 Data size: 366 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -1360,8 +1360,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
SelectColumnIsNotNull(col 8:interval_year_month)(children: 
CastStringToIntervalYearMonth(col 2:string) -> 8:interval_year_month), 
FilterDateColEqualDateScalar(col 10:date, val 11747)(children: 
DateColAddIntervalYearMonthColumn(col 1:date, col 
9:interval_year_month)(children: CastStringToIntervalYearMonth(col 2:string) -> 
9:interval_year_month) -> 10:date), FilterDateColEqualDateScalar(col 11:date, 
val 11747)(childre [...]
-                    predicate: (CAST( str1 AS INTERVAL YEAR TO MONTH) is not 
null and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and 
((dt + INTERVAL'1-2') = DATE'2002-03-01') and (dt <> (dt + CAST( str1 AS 
INTERVAL YEAR TO MONTH))) and (dt <> (dt + INTERVAL'1-2'))) (type: boolean)
+                        predicateExpression: FilterExprAndExpr(children: 
SelectColumnIsNotNull(col 8:interval_year_month)(children: 
CastStringToIntervalYearMonth(col 2:string) -> 8:interval_year_month), 
FilterDateColEqualDateScalar(col 10:date, val 11747)(children: 
DateColAddIntervalYearMonthColumn(col 1:date, col 
9:interval_year_month)(children: CastStringToIntervalYearMonth(col 2:string) -> 
9:interval_year_month) -> 10:date), FilterLongColNotEqualLongColumn(col 1:date, 
col 12:date)(chi [...]
+                    predicate: (CAST( str1 AS INTERVAL YEAR TO MONTH) is not 
null and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and 
(dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and ((dt + INTERVAL'1-2') 
= DATE'2002-03-01') and (dt <> (dt + INTERVAL'1-2'))) (type: boolean)
                     Statistics: Num rows: 1 Data size: 183 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
@@ -1542,7 +1542,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: ((ts < (ts + INTERVAL'1-0')) and (ts > (ts - 
INTERVAL'1-0')) and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and 
(ts = (ts + INTERVAL'0-0')) and (ts <> (ts + INTERVAL'1-0')) and ts BETWEEN (ts 
- INTERVAL'1-0') AND (ts + INTERVAL'1-0')) (type: boolean)
+                  filterExpr: ((ts < (ts + INTERVAL'1-0')) and (ts > (ts - 
INTERVAL'1-0')) and (TIMESTAMP'2002-04-01 01:02:03' <> (ts + INTERVAL'1-2')) 
and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and (ts = (ts + 
INTERVAL'0-0')) and (ts <> (ts + INTERVAL'1-0')) and ts BETWEEN (ts - 
INTERVAL'1-0') AND (ts + INTERVAL'1-0')) (type: boolean)
                   Statistics: Num rows: 2 Data size: 80 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -1550,8 +1550,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
FilterTimestampColLessTimestampColumn(col 0:timestamp, col 
8:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, 
val 1-0) -> 8:timestamp), FilterTimestampColGreaterTimestampColumn(col 
0:timestamp, col 9:timestamp)(children: 
TimestampColSubtractIntervalYearMonthScalar(col 0:timestamp, val 1-0) -> 
9:timestamp), FilterTimestampColEqualTimestampScalar(col 10:timestamp, val 
2002-03-01 01:02:03)(c [...]
-                    predicate: ((ts < (ts + INTERVAL'1-0')) and (ts > (ts - 
INTERVAL'1-0')) and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and 
(ts = (ts + INTERVAL'0-0')) and (ts <> (ts + INTERVAL'1-0')) and ts BETWEEN (ts 
- INTERVAL'1-0') AND (ts + INTERVAL'1-0')) (type: boolean)
+                        predicateExpression: FilterExprAndExpr(children: 
FilterTimestampColLessTimestampColumn(col 0:timestamp, col 
8:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, 
val 1-0) -> 8:timestamp), FilterTimestampColGreaterTimestampColumn(col 
0:timestamp, col 9:timestamp)(children: 
TimestampColSubtractIntervalYearMonthScalar(col 0:timestamp, val 1-0) -> 
9:timestamp), FilterTimestampScalarNotEqualTimestampColumn(val 2002-04-01 
01:02:03, col 10:timest [...]
+                    predicate: ((ts < (ts + INTERVAL'1-0')) and (ts > (ts - 
INTERVAL'1-0')) and (TIMESTAMP'2002-04-01 01:02:03' <> (ts + INTERVAL'1-2')) 
and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and (ts = (ts + 
INTERVAL'0-0')) and (ts <> (ts + INTERVAL'1-0')) and ts BETWEEN (ts - 
INTERVAL'1-0') AND (ts + INTERVAL'1-0')) (type: boolean)
                     Statistics: Num rows: 1 Data size: 40 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
@@ -1742,7 +1742,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: (dt is not null and (TIMESTAMP'2001-01-01 
01:02:03' < (dt + INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' >= (dt - INTERVAL'0 01:02:03.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 
01:02:04.000000000') > TIMESTAMP'2001-01-01 01:02:03') and ((dt - INTERVAL'0 
01:02:04.000000000') < TIMESTAMP'2001-01-01 01:02:03') and (ts < (dt + 
INTERVAL'0 01:02:04.000000000')) and (ts > ( [...]
+                  filterExpr: (dt is not null and (TIMESTAMP'2001-01-01 
01:02:03' < (dt + INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' >= (dt - INTERVAL'0 01:02:03.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 
01:02:04.000000000') > TIMESTAMP'2001-01-01 01:02:03') and ((dt - INTERVAL'0 
01:02:04.000000000') < TIMESTAMP'2001-01-01 01:02:03') and (ts < (dt + 
INTERVAL'0 01:02:04.000000000')) and (ts > ( [...]
                   Statistics: Num rows: 2 Data size: 192 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -1750,8 +1750,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
SelectColumnIsNotNull(col 1:date), FilterTimestampScalarLessTimestampColumn(val 
2001-01-01 01:02:03, col 8:timestamp)(children: 
DateColAddIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 
8:timestamp), FilterTimestampScalarGreaterEqualTimestampColumn(val 2001-01-01 
01:02:03, col 9:timestamp)(children: DateColSubtractIntervalDayTimeScalar(col 
1:date, val 0 01:02:03.000000000) -> 9:timestamp), FilterTimes [...]
-                    predicate: (dt is not null and (TIMESTAMP'2001-01-01 
01:02:03' < (dt + INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' >= (dt - INTERVAL'0 01:02:03.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 
01:02:04.000000000') > TIMESTAMP'2001-01-01 01:02:03') and ((dt - INTERVAL'0 
01:02:04.000000000') < TIMESTAMP'2001-01-01 01:02:03') and (ts < (dt + 
INTERVAL'0 01:02:04.000000000')) and (ts >  [...]
+                        predicateExpression: FilterExprAndExpr(children: 
SelectColumnIsNotNull(col 1:date), FilterTimestampScalarLessTimestampColumn(val 
2001-01-01 01:02:03, col 8:timestamp)(children: 
DateColAddIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 
8:timestamp), FilterTimestampScalarGreaterEqualTimestampColumn(val 2001-01-01 
01:02:03, col 9:timestamp)(children: DateColSubtractIntervalDayTimeScalar(col 
1:date, val 0 01:02:03.000000000) -> 9:timestamp), FilterTimes [...]
+                    predicate: (dt is not null and (TIMESTAMP'2001-01-01 
01:02:03' < (dt + INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' >= (dt - INTERVAL'0 01:02:03.000000000')) and (TIMESTAMP'2001-01-01 
01:02:03' > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 
01:02:04.000000000') > TIMESTAMP'2001-01-01 01:02:03') and ((dt - INTERVAL'0 
01:02:04.000000000') < TIMESTAMP'2001-01-01 01:02:03') and (ts < (dt + 
INTERVAL'0 01:02:04.000000000')) and (ts >  [...]
                     Statistics: Num rows: 1 Data size: 96 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
@@ -1942,7 +1942,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: vector_interval_2
-                  filterExpr: ((TIMESTAMP'2001-01-01 01:02:03' < (ts + 
INTERVAL'1 00:00:00.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' > (ts - 
INTERVAL'1 00:00:00.000000000')) and ((ts + INTERVAL'1 00:00:00.000000000') > 
TIMESTAMP'2001-01-01 01:02:03') and ((ts - INTERVAL'1 00:00:00.000000000') < 
TIMESTAMP'2001-01-01 01:02:03') and (ts < (ts + INTERVAL'1 
00:00:00.000000000')) and (ts > (ts - INTERVAL'1 00:00:00.000000000')) and ((ts 
+ INTERVAL'0 00:00:00.000000000') = TIMESTAMP'2001 [...]
+                  filterExpr: ((TIMESTAMP'2001-01-01 01:02:03' < (ts + 
INTERVAL'1 00:00:00.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' > (ts - 
INTERVAL'1 00:00:00.000000000')) and ((ts + INTERVAL'1 00:00:00.000000000') > 
TIMESTAMP'2001-01-01 01:02:03') and ((ts - INTERVAL'1 00:00:00.000000000') < 
TIMESTAMP'2001-01-01 01:02:03') and (ts < (ts + INTERVAL'1 
00:00:00.000000000')) and (ts > (ts - INTERVAL'1 00:00:00.000000000')) and 
(TIMESTAMP'2001-01-01 01:02:03' <> (ts + INTERVAL'1 00: [...]
                   Statistics: Num rows: 2 Data size: 80 Basic stats: COMPLETE 
Column stats: COMPLETE
                   TableScan Vectorization:
                       native: true
@@ -1950,8 +1950,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 
8:timestamp)(children: TimestampColAddIntervalDayTimeScalar(col 0:timestamp, 
val 1 00:00:00.000000000) -> 8:timestamp), 
FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 
9:timestamp)(children: TimestampColSubtractIntervalDayTimeScalar(col 
0:timestamp, val 1 00:00:00.000000000) -> 9:timestamp), 
FilterTimestampColGreaterTimest [...]
-                    predicate: ((TIMESTAMP'2001-01-01 01:02:03' < (ts + 
INTERVAL'1 00:00:00.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' > (ts - 
INTERVAL'1 00:00:00.000000000')) and ((ts + INTERVAL'1 00:00:00.000000000') > 
TIMESTAMP'2001-01-01 01:02:03') and ((ts - INTERVAL'1 00:00:00.000000000') < 
TIMESTAMP'2001-01-01 01:02:03') and (ts < (ts + INTERVAL'1 
00:00:00.000000000')) and (ts > (ts - INTERVAL'1 00:00:00.000000000')) and ((ts 
+ INTERVAL'0 00:00:00.000000000') = TIMESTAMP'200 [...]
+                        predicateExpression: FilterExprAndExpr(children: 
FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 
8:timestamp)(children: TimestampColAddIntervalDayTimeScalar(col 0:timestamp, 
val 1 00:00:00.000000000) -> 8:timestamp), 
FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 
9:timestamp)(children: TimestampColSubtractIntervalDayTimeScalar(col 
0:timestamp, val 1 00:00:00.000000000) -> 9:timestamp), 
FilterTimestampColGreaterTimest [...]
+                    predicate: ((TIMESTAMP'2001-01-01 01:02:03' < (ts + 
INTERVAL'1 00:00:00.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' > (ts - 
INTERVAL'1 00:00:00.000000000')) and ((ts + INTERVAL'1 00:00:00.000000000') > 
TIMESTAMP'2001-01-01 01:02:03') and ((ts - INTERVAL'1 00:00:00.000000000') < 
TIMESTAMP'2001-01-01 01:02:03') and (ts < (ts + INTERVAL'1 
00:00:00.000000000')) and (ts > (ts - INTERVAL'1 00:00:00.000000000')) and 
(TIMESTAMP'2001-01-01 01:02:03' <> (ts + INTERVAL'1 00 [...]
                     Statistics: Num rows: 1 Data size: 40 Basic stats: 
COMPLETE Column stats: COMPLETE
                     Select Operator
                       expressions: ts (type: timestamp)
diff --git 
a/ql/src/test/results/clientpositive/llap/vector_windowing_navfn.q.out 
b/ql/src/test/results/clientpositive/llap/vector_windowing_navfn.q.out
index fdc6f3d0271..46079323290 100644
--- a/ql/src/test/results/clientpositive/llap/vector_windowing_navfn.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_windowing_navfn.q.out
@@ -1485,7 +1485,7 @@ STAGE PLANS:
             Map Operator Tree:
                 TableScan
                   alias: over10k_n7
-                  filterExpr: ((t = 10Y) and (s) IN ('oscar allen', 'oscar 
carson')) (type: boolean)
+                  filterExpr: ((s) IN ('oscar allen', 'oscar carson') and (t = 
10Y)) (type: boolean)
                   Statistics: Num rows: 1 Data size: 192 Basic stats: COMPLETE 
Column stats: NONE
                   TableScan Vectorization:
                       native: true
@@ -1494,8 +1494,8 @@ STAGE PLANS:
                     Filter Vectorization:
                         className: VectorFilterOperator
                         native: true
-                        predicateExpression: FilterExprAndExpr(children: 
FilterLongColEqualLongScalar(col 0:tinyint, val 10), 
FilterStringColumnInList(col 7, values oscar allen, oscar carson))
-                    predicate: ((t = 10Y) and (s) IN ('oscar allen', 'oscar 
carson')) (type: boolean)
+                        predicateExpression: FilterExprAndExpr(children: 
FilterStringColumnInList(col 7, values oscar allen, oscar carson), 
FilterLongColEqualLongScalar(col 0:tinyint, val 10))
+                    predicate: ((s) IN ('oscar allen', 'oscar carson') and (t 
= 10Y)) (type: boolean)
                     Statistics: Num rows: 1 Data size: 192 Basic stats: 
COMPLETE Column stats: NONE
                     Reduce Output Operator
                       key expressions: 10Y (type: tinyint), s (type: string)

Reply via email to