You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2020/09/30 20:07:54 UTC
[hive] branch master updated: HIVE-24154: Missing simplification
opportunity with IN and EQUALS clauses (Jesus Camacho Rodriguez,
reviewed by Zoltan Haindrich)
This is an automated email from the ASF dual-hosted git repository.
jcamacho 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 94093e8 HIVE-24154: Missing simplification opportunity with IN and EQUALS clauses (Jesus Camacho Rodriguez, reviewed by Zoltan Haindrich)
94093e8 is described below
commit 94093e86e96786e36756fef802938cd65ef4fd0e
Author: Jesús Camacho Rodríguez <jc...@apache.org>
AuthorDate: Wed Sep 30 13:07:31 2020 -0700
HIVE-24154: Missing simplification opportunity with IN and EQUALS clauses (Jesus Camacho Rodriguez, reviewed by Zoltan Haindrich)
Closes apache/hive#1492
---
.../rules/HivePointLookupOptimizerRule.java | 398 +++++++++++----------
.../hive/ql/plan/mapping/TestCounterMapping.java | 4 +-
.../test/queries/clientpositive/multi_in_clause.q | 15 +-
.../clientpositive/llap/bucketpruning1.q.out | 18 +-
.../llap/dynamic_partition_skip_default.q.out | 4 +-
.../llap/external_jdbc_table_perf.q.out | 12 +-
.../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 | 40 +--
.../llap/materialized_view_rewrite_ssb_2.q.out | 40 +--
...terialized_view_rewrite_ssb_grouping_sets.q.out | 22 +-
...rialized_view_rewrite_ssb_grouping_sets_2.q.out | 2 +-
.../clientpositive/llap/multi_in_clause.q.out | 69 +++-
ql/src/test/results/clientpositive/llap/pcr.q.out | 4 +-
.../clientpositive/llap/ppd_union_view.q.out | 26 +-
.../llap/rand_partitionpruner2.q.out | 2 +-
.../llap/rand_partitionpruner3.q.out | 2 +-
.../test/results/clientpositive/llap/union22.q.out | 2 +-
.../clientpositive/llap/unionDistinct_1.q.out | 2 +-
.../clientpositive/llap/vector_interval_2.q.out | 36 +-
.../clientpositive/perf/tez/cbo_query74.q.out | 8 +-
.../perf/tez/constraints/cbo_query74.q.out | 8 +-
.../perf/tez/constraints/query74.q.out | 8 +-
.../results/clientpositive/perf/tez/query74.q.out | 6 +-
25 files changed, 438 insertions(+), 334 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 7332587..57e2ffe 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
@@ -47,6 +47,7 @@ import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.hadoop.hive.ql.optimizer.calcite.HiveCalciteUtil;
import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveBetween;
import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveIn;
@@ -54,11 +55,8 @@ import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
@@ -72,7 +70,7 @@ import com.google.common.collect.Sets;
* </pre>
* If c is struct; then c=v1 is a group of anded equations.
*
- * Similarily
+ * Similarly
* <pre>
* v1 <= c1 and c1 <= v2
* </pre>
@@ -159,9 +157,8 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
return;
}
Project newProject = project.copy(project.getTraitSet(), project.getInput(), newProjects,
- project.getRowType(), project.getFlags());
+ project.getRowType());
call.transformTo(newProject);
-
}
}
@@ -187,7 +184,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
newCondition = mergeInClause.apply(newCondition);
// 3. Close BETWEEN expressions if possible
- RexTranformIntoBetween t = new RexTranformIntoBetween(rexBuilder);
+ RexTransformIntoBetween t = new RexTransformIntoBetween(rexBuilder);
newCondition = t.apply(newCondition);
return newCondition;
}
@@ -196,7 +193,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
* Transforms inequality candidates into [NOT] BETWEEN calls.
*
*/
- protected static class RexTranformIntoBetween extends RexShuttle {
+ protected static class RexTransformIntoBetween extends RexShuttle {
private final RexBuilder rexBuilder;
static class DiGraph<V, E> {
@@ -248,7 +245,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
public void putEdgeValue(V s, V t, E e) {
Node<V, E> nodeS = nodeOf(s);
Node<V, E> nodeT = nodeOf(t);
- Edge<V, E> edge = new Edge<V, E>(nodeS, nodeT, e);
+ Edge<V, E> edge = new Edge<>(nodeS, nodeT, e);
nodeS.addEdge(edge);
nodeT.addEdge(edge);
}
@@ -256,7 +253,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
private Node<V, E> nodeOf(V s) {
Node<V, E> node = nodes.get(s);
if (node == null) {
- nodes.put(s, node = new Node<V, E>(s));
+ nodes.put(s, node = new Node<>(s));
}
return node;
}
@@ -302,7 +299,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
- RexTranformIntoBetween(RexBuilder rexBuilder) {
+ RexTransformIntoBetween(RexBuilder rexBuilder) {
this.rexBuilder = rexBuilder;
}
@@ -313,9 +310,9 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
RexCall call = (RexCall) node;
switch (call.getKind()) {
case AND:
- return processComparisions(call, SqlKind.LESS_THAN_OR_EQUAL, false);
+ return processComparisons(call, SqlKind.LESS_THAN_OR_EQUAL, false);
case OR:
- return processComparisions(call, SqlKind.GREATER_THAN, true);
+ return processComparisons(call, SqlKind.GREATER_THAN, true);
default:
break;
}
@@ -339,9 +336,9 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
}
- private RexNode processComparisions(RexCall call, SqlKind forwardEdge, boolean invert) {
+ private RexNode processComparisons(RexCall call, SqlKind forwardEdge, boolean invert) {
DiGraph<RexNodeRef, RexCall> g =
- buildComparisionGraph(call.getOperands(), forwardEdge);
+ buildComparisonGraph(call.getOperands(), forwardEdge);
Map<RexNode, BetweenCandidate> replacedNodes = new IdentityHashMap<>();
for (RexNodeRef n : g.nodes()) {
Set<RexNodeRef> pred = g.predecessors(n);
@@ -387,11 +384,11 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
/**
- * Builds a graph of the given comparision type.
+ * Builds a graph of the given comparison type.
*
- * The graph edges are annotated with the RexNodes representing the comparision.
+ * The graph edges are annotated with the RexNodes representing the comparison.
*/
- private DiGraph<RexNodeRef, RexCall> buildComparisionGraph(List<RexNode> operands, SqlKind cmpForward) {
+ private DiGraph<RexNodeRef, RexCall> buildComparisonGraph(List<RexNode> operands, SqlKind cmpForward) {
DiGraph<RexNodeRef, RexCall> g = new DiGraph<>();
for (RexNode node : operands) {
if(!(node instanceof RexCall) ) {
@@ -420,8 +417,8 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
static class RexNodeRef {
public static Comparator<RexNodeRef> COMPARATOR =
- (RexNodeRef o1, RexNodeRef o2) -> o1.node.toString().compareTo(o2.node.toString());
- private RexNode node;
+ Comparator.comparing((RexNodeRef o) -> o.node.toString());
+ private final RexNode node;
public RexNodeRef(RexNode node) {
this.node = node;
@@ -452,6 +449,64 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
/**
+ * Represents a constraint.
+ *
+ * Example: a=1
+ * substr(a,1,2) = concat('asd','xxx')
+ */
+ static class Constraint {
+
+ private final RexNode exprNode;
+ private final RexNode constNode;
+
+ public Constraint(RexNode exprNode, RexNode constNode) {
+ this.exprNode = exprNode;
+ this.constNode = constNode;
+ }
+
+ /**
+ * Interprets argument as a constraint; if not possible returns null.
+ */
+ public static Constraint of(RexNode n) {
+ if (!(n instanceof RexCall)) {
+ return null;
+ }
+ RexCall call = (RexCall) n;
+ if (call.getOperator().getKind() != SqlKind.EQUALS) {
+ return null;
+ }
+ RexNode opA = call.operands.get(0);
+ RexNode opB = call.operands.get(1);
+ if (RexUtil.isNull(opA) || RexUtil.isNull(opB)) {
+ // dont try to compare nulls
+ return null;
+ }
+ if (isConstExpr(opA) && isColumnExpr(opB)) {
+ return new Constraint(opB, opA);
+ }
+ if (isColumnExpr(opA) && isConstExpr(opB)) {
+ return new Constraint(opA, opB);
+ }
+ return null;
+ }
+
+ private static boolean isColumnExpr(RexNode node) {
+ return !node.getType().isStruct() && HiveCalciteUtil.getInputRefs(node).size() > 0
+ && HiveCalciteUtil.isDeterministic(node);
+ }
+
+ private static boolean isConstExpr(RexNode node) {
+ return !node.getType().isStruct() && HiveCalciteUtil.getInputRefs(node).size() == 0
+ && HiveCalciteUtil.isDeterministic(node);
+ }
+
+ public RexNodeRef getKey() {
+ return new RexNodeRef(exprNode);
+ }
+
+ }
+
+ /**
* Transforms OR clauses into IN clauses, when possible.
*/
protected static class RexTransformIntoInClause extends RexShuttle {
@@ -468,8 +523,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
RexNode node = super.visitCall(inputCall);
if (node instanceof RexCall) {
RexCall call = (RexCall) node;
- switch (call.getKind()) {
- case OR:
+ if (call.getKind() == SqlKind.OR) {
try {
RexNode newNode = transformIntoInClauseCondition(rexBuilder,
call, minNumORClauses);
@@ -480,72 +534,12 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
LOG.error("Exception in HivePointLookupOptimizerRule", e);
return call;
}
- default:
- break;
}
}
return node;
}
/**
- * Represents a contraint.
- *
- * Example: a=1
- * substr(a,1,2) = concat('asd','xxx')
- */
- static class Constraint {
-
- private RexNode exprNode;
- private RexNode constNode;
-
- public Constraint(RexNode exprNode, RexNode constNode) {
- this.exprNode = constNode;
- this.constNode = exprNode;
- }
-
- /**
- * Interprets argument as a constraint; if not possible returns null.
- */
- public static Constraint of(RexNode n) {
- if (!(n instanceof RexCall)) {
- return null;
- }
- RexCall call = (RexCall) n;
- if (call.getOperator().getKind() != SqlKind.EQUALS) {
- return null;
- }
- RexNode opA = call.operands.get(0);
- RexNode opB = call.operands.get(1);
- if (RexUtil.isNull(opA) || RexUtil.isNull(opB)) {
- // dont try to compare nulls
- return null;
- }
- if (isConstExpr(opA) && isColumnExpr(opB)) {
- return new Constraint(opB, opA);
- }
- if (isColumnExpr(opA) && isConstExpr(opB)) {
- return new Constraint(opA, opB);
- }
- return null;
- }
-
- private static boolean isColumnExpr(RexNode node) {
- return !node.getType().isStruct() && HiveCalciteUtil.getInputRefs(node).size() > 0
- && HiveCalciteUtil.isDeterministic(node);
- }
-
- private static boolean isConstExpr(RexNode node) {
- return !node.getType().isStruct() && HiveCalciteUtil.getInputRefs(node).size() == 0
- && HiveCalciteUtil.isDeterministic(node);
- }
-
- public RexNodeRef getKey() {
- return new RexNodeRef(constNode);
- }
-
- }
-
- /**
* A group of Constraints.
*
* Examples:
@@ -557,16 +551,8 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
*
*/
static class ConstraintGroup {
- public static final Function<ConstraintGroup, Set<RexNodeRef>> KEY_FUNCTION =
- new Function<ConstraintGroup, Set<RexNodeRef>>() {
-
- @Override
- public Set<RexNodeRef> apply(ConstraintGroup cg) {
- return cg.key;
- }
- };
- private Map<RexNodeRef, Constraint> constraints = new HashMap<>();
- private RexNode originalRexNode;
+ private final Map<RexNodeRef, Constraint> constraints = new HashMap<>();
+ private final RexNode originalRexNode;
private final Set<RexNodeRef> key;
public ConstraintGroup(RexNode rexNode) {
@@ -599,7 +585,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
if (constraint == null) {
throw new SemanticException("Unable to find constraint which was earlier added.");
}
- ret.add(constraint.exprNode);
+ ret.add(constraint.constNode);
}
return ret;
}
@@ -622,7 +608,7 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
Multimap<Set<RexNodeRef>, ConstraintGroup> assignmentGroups =
- Multimaps.index(allNodes, ConstraintGroup.KEY_FUNCTION);
+ Multimaps.index(allNodes, cg -> cg.key);
for (Entry<Set<RexNodeRef>, Collection<ConstraintGroup>> sa : assignmentGroups.asMap().entrySet()) {
// skip opaque
@@ -656,12 +642,11 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
private RexNode buildInFor(Set<RexNodeRef> set, Collection<ConstraintGroup> value) throws SemanticException {
- List<RexNodeRef> columns = new ArrayList<>();
- columns.addAll(set);
+ List<RexNodeRef> columns = new ArrayList<>(set);
columns.sort(RexNodeRef.COMPARATOR);
List<RexNode >operands = new ArrayList<>();
- List<RexNode> columnNodes = columns.stream().map(n -> n.getRexNode()).collect(Collectors.toList());
+ List<RexNode> columnNodes = columns.stream().map(RexNodeRef::getRexNode).collect(Collectors.toList());
operands.add(useStructIfNeeded(columnNodes));
for (ConstraintGroup node : value) {
List<RexNode> values = node.getValuesInOrder(columns);
@@ -693,102 +678,153 @@ public abstract class HivePointLookupOptimizerRule extends RelOptRule {
}
@Override public RexNode visitCall(RexCall call) {
- RexNode node;
- final List<RexNode> operands;
- final List<RexNode> newOperands;
- Map<String,RexNode> stringToExpr = Maps.newHashMap();
- Multimap<String,String> inLHSExprToRHSExprs = LinkedHashMultimap.create();
switch (call.getKind()) {
case AND:
- // IN clauses need to be combined by keeping only common elements
- operands = Lists.newArrayList(RexUtil.flattenAnd(call.getOperands()));
- for (int i = 0; i < operands.size(); i++) {
- RexNode operand = operands.get(i);
- if (operand.getKind() == SqlKind.IN) {
- RexCall inCall = (RexCall) operand;
- if (!HiveCalciteUtil.isDeterministic(inCall.getOperands().get(0))) {
- continue;
- }
- String ref = inCall.getOperands().get(0).toString();
- stringToExpr.put(ref, inCall.getOperands().get(0));
- if (inLHSExprToRHSExprs.containsKey(ref)) {
- Set<String> expressions = Sets.newHashSet();
- for (int j = 1; j < inCall.getOperands().size(); j++) {
- String expr = inCall.getOperands().get(j).toString();
- expressions.add(expr);
- stringToExpr.put(expr, inCall.getOperands().get(j));
- }
- inLHSExprToRHSExprs.get(ref).retainAll(expressions);
- if (!inLHSExprToRHSExprs.containsKey(ref)) {
- // Note that Multimap does not keep a key if all its values are removed.
- // Hence, since there are no common expressions and it is within an AND,
- // we should return false
- return rexBuilder.makeLiteral(false);
- }
- } else {
- for (int j = 1; j < inCall.getOperands().size(); j++) {
- String expr = inCall.getOperands().get(j).toString();
- inLHSExprToRHSExprs.put(ref, expr);
- stringToExpr.put(expr, inCall.getOperands().get(j));
- }
- }
- operands.remove(i);
- --i;
- }
- }
- // Create IN clauses
- newOperands = createInClauses(rexBuilder, stringToExpr, inLHSExprToRHSExprs);
- newOperands.addAll(operands);
- // Return node
- node = RexUtil.composeConjunction(rexBuilder, newOperands, false);
- break;
+ return handleAND(rexBuilder, call);
case OR:
- // IN clauses need to be combined by keeping all elements
- operands = Lists.newArrayList(RexUtil.flattenOr(call.getOperands()));
- for (int i = 0; i < operands.size(); i++) {
- RexNode operand = operands.get(i);
- if (operand.getKind() == SqlKind.IN) {
- RexCall inCall = (RexCall) operand;
- if (!HiveCalciteUtil.isDeterministic(inCall.getOperands().get(0))) {
- continue;
+ return handleOR(rexBuilder, call);
+ default:
+ return super.visitCall(call);
+ }
+ }
+
+ private static RexNode handleAND(RexBuilder rexBuilder, RexCall call) {
+ // Visited nodes
+ final Set<RexNode> visitedRefs = new LinkedHashSet<>();
+ // IN clauses need to be combined by keeping only common elements
+ final Multimap<RexNode,RexNode> inLHSExprToRHSExprs = LinkedHashMultimap.create();
+ // We will use this set to keep those expressions that may evaluate
+ // 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.getKind() == SqlKind.IN) {
+ 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<RexNode> expressions = Sets.newHashSet();
+ for (int j = 1; j < inCall.getOperands().size(); j++) {
+ RexNode constNode = inCall.getOperands().get(j);
+ expressions.add(constNode);
+ if (constNode.getType().isNullable()) {
+ inLHSExprToRHSNullableExprs.put(ref, constNode);
}
- String ref = inCall.getOperands().get(0).toString();
- stringToExpr.put(ref, inCall.getOperands().get(0));
- for (int j = 1; j < inCall.getOperands().size(); j++) {
- String expr = inCall.getOperands().get(j).toString();
- inLHSExprToRHSExprs.put(ref, expr);
- stringToExpr.put(expr, inCall.getOperands().get(j));
+ }
+ inLHSExprToRHSExprs.get(ref).retainAll(expressions);
+ } else {
+ for (int j = 1; j < inCall.getOperands().size(); j++) {
+ RexNode constNode = inCall.getOperands().get(j);
+ inLHSExprToRHSExprs.put(ref, constNode);
+ if (constNode.getType().isNullable()) {
+ inLHSExprToRHSNullableExprs.put(ref, constNode);
}
- operands.remove(i);
- --i;
}
}
- // Create IN clauses
- newOperands = createInClauses(rexBuilder, stringToExpr, inLHSExprToRHSExprs);
- newOperands.addAll(operands);
- // Return node
- node = RexUtil.composeDisjunction(rexBuilder, newOperands, false);
- break;
- default:
- return super.visitCall(call);
+ 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)) {
+ inLHSExprToRHSExprs.get(c.exprNode).retainAll(Collections.singleton(c.constNode));
+ } else {
+ inLHSExprToRHSExprs.put(c.exprNode, c.constNode);
+ }
+ operands.remove(i);
+ --i;
+ }
}
- return node;
+ // Create IN clauses
+ final List<RexNode> newOperands = createInClauses(rexBuilder,
+ visitedRefs, inLHSExprToRHSExprs, inLHSExprToRHSNullableExprs);
+ newOperands.addAll(operands);
+ // Return node
+ return RexUtil.composeConjunction(rexBuilder, newOperands, false);
}
- private static List<RexNode> createInClauses(RexBuilder rexBuilder, Map<String, RexNode> stringToExpr,
- Multimap<String, String> inLHSExprToRHSExprs) {
- List<RexNode> newExpressions = Lists.newArrayList();
- for (Entry<String,Collection<String>> entry : inLHSExprToRHSExprs.asMap().entrySet()) {
- String ref = entry.getKey();
- Collection<String> exprs = entry.getValue();
+ 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,RexNode> inLHSExprToRHSExprs = LinkedHashMultimap.create();
+ for (int i = 0; i < operands.size(); i++) {
+ RexNode operand = operands.get(i);
+ if (operand.getKind() == SqlKind.IN) {
+ RexCall inCall = (RexCall) operand;
+ if (!HiveCalciteUtil.isDeterministic(inCall.getOperands().get(0))) {
+ continue;
+ }
+ RexNode ref = inCall.getOperands().get(0);
+ for (int j = 1; j < inCall.getOperands().size(); j++) {
+ inLHSExprToRHSExprs.put(ref, inCall.getOperands().get(j));
+ }
+ operands.remove(i);
+ --i;
+ }
+ }
+ // 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);
+ // Return node
+ RexNode result = RexUtil.composeDisjunction(rexBuilder, newOperands, false);
+ if (!result.getType().equals(call.getType())) {
+ return rexBuilder.makeCast(call.getType(), result, true);
+ }
+ return result;
+ }
+
+ private static RexNode createResultFromEmptySet(RexBuilder rexBuilder,
+ RexNode ref, Multimap<RexNode, RexNode> inLHSExprToRHSNullableExprs) {
+ if (inLHSExprToRHSNullableExprs.containsKey(ref)) {
+ // We handle possible null values in the expressions.
+ List<RexNode> nullableExprs =
+ inLHSExprToRHSNullableExprs.get(ref)
+ .stream()
+ .map(n -> rexBuilder.makeCall(SqlStdOperatorTable.IS_NULL, ImmutableList.of(n)))
+ .collect(Collectors.toList());
+ return RexUtil.composeConjunction(rexBuilder,
+ ImmutableList.of(
+ RexUtil.composeDisjunction(rexBuilder, nullableExprs, false),
+ rexBuilder.makeNullLiteral(rexBuilder.getTypeFactory().createSqlType(SqlTypeName.BOOLEAN))),
+ false);
+ }
+ return rexBuilder.makeLiteral(false);
+ }
+
+ private static List<RexNode> createInClauses(RexBuilder rexBuilder, Set<RexNode> visitedRefs,
+ Multimap<RexNode, RexNode> inLHSExprToRHSExprs, Multimap<RexNode,RexNode> inLHSExprToRHSNullableExprs) {
+ final List<RexNode> newExpressions = new ArrayList<>();
+ for (RexNode ref : visitedRefs) {
+ Collection<RexNode> exprs = inLHSExprToRHSExprs.get(ref);
if (exprs.isEmpty()) {
- newExpressions.add(rexBuilder.makeLiteral(false));
+ // Note that Multimap does not keep a key if all its values are removed.
+ newExpressions.add(createResultFromEmptySet(rexBuilder, ref, inLHSExprToRHSNullableExprs));
+ } else if (exprs.size() == 1) {
+ List<RexNode> newOperands = new ArrayList<>(2);
+ newOperands.add(ref);
+ newOperands.add(exprs.iterator().next());
+ newExpressions.add(rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, newOperands));
} else {
- List<RexNode> newOperands = new ArrayList<RexNode>(exprs.size() + 1);
- newOperands.add(stringToExpr.get(ref));
- for (String expr : exprs) {
- newOperands.add(stringToExpr.get(expr));
- }
+ List<RexNode> newOperands = new ArrayList<>(exprs.size() + 1);
+ newOperands.add(ref);
+ newOperands.addAll(exprs);
newExpressions.add(rexBuilder.makeCall(HiveIn.INSTANCE, newOperands));
}
}
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/plan/mapping/TestCounterMapping.java b/ql/src/test/org/apache/hadoop/hive/ql/plan/mapping/TestCounterMapping.java
index f596324..3a50356 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/plan/mapping/TestCounterMapping.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/plan/mapping/TestCounterMapping.java
@@ -183,9 +183,7 @@ public class TestCounterMapping {
List<FilterOperator> fos = pm.getAll(FilterOperator.class);
OpTreeSignature filterSig = pm.lookup(OpTreeSignature.class, fos.get(0));
Object pred = filterSig.getSig().getSigMap().get("getPredicateString");
- // TODO: Missed opportunity due to cast on constant preventing simplification.
- // Fixed when we upgrade to Calcite 1.22.0
- assertEquals("((u = 2) and (u) IN (1, 2, 3)) (type: boolean)", pred);
+ assertEquals("(u = 2) (type: boolean)", pred);
}
@Test
diff --git a/ql/src/test/queries/clientpositive/multi_in_clause.q b/ql/src/test/queries/clientpositive/multi_in_clause.q
index 9752063..a40674a 100644
--- a/ql/src/test/queries/clientpositive/multi_in_clause.q
+++ b/ql/src/test/queries/clientpositive/multi_in_clause.q
@@ -1,7 +1,18 @@
-create table very_simple_table_for_in_test (name STRING);
-insert into very_simple_table_for_in_test values ('a');
+create table very_simple_table_for_in_test (name STRING, othername STRING);
+insert into very_simple_table_for_in_test values ('a', null);
+insert into very_simple_table_for_in_test values (null, null);
explain cbo
select * from very_simple_table_for_in_test where name IN('g','r') AND name IN('a','b') ;
select * from very_simple_table_for_in_test where name IN('g','r') AND name IN('a','b') ;
+
+explain cbo
+select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test ;
+
+select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test ;
+
+explain cbo
+select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test ;
+
+select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test ;
diff --git a/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out b/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
index fb5c73a..8771727 100644
--- a/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
+++ b/ql/src/test/results/clientpositive/llap/bucketpruning1.q.out
@@ -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 `key` IN (2, 3) AND `value` = 'One' AND `ds` = '2008-04-08'
+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
@@ -821,13 +821,13 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcbucket_pruned
- filterExpr: ((key) IN (2, 3) and (value = 'One') and (ds = '2008-04-08')) (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: ((key) IN (2, 3) and (value = 'One') and (ds = '2008-04-08')) (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)
@@ -1304,7 +1304,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 `key` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) AND `value` = 'One' AND `ds` = '2008-04-08'
+WHERE `value` = 'One' AND `key` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) AND `ds` = '2008-04-08'
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
@@ -1318,13 +1318,13 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcbucket_pruned
- filterExpr: ((key) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) and (value = 'One') and (ds = '2008-04-08')) (type: boolean)
+ filterExpr: ((value = 'One') and (key) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) and (ds = '2008-04-08')) (type: boolean)
buckets included: [1,3,4,5,6,8,11,12,13,15,] of 16
Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE Column stats: COMPLETE
GatherStats: false
Filter Operator
isSamplingPred: false
- predicate: ((key) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) and (value = 'One') and (ds = '2008-04-08')) (type: boolean)
+ predicate: ((value = 'One') and (key) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) 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)
@@ -1445,7 +1445,7 @@ POSTHOOK: Input: default@srcbucket_pruned
#### A masked pattern was here ####
OPTIMIZED SQL: SELECT CAST(1 AS INTEGER) AS `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`
FROM `default`.`srcbucket_pruned`
-WHERE `value` IN ('One', 'Two') AND `key` = 1 AND `ds` = '2008-04-08'
+WHERE `key` = 1 AND `ds` = '2008-04-08' AND `value` IN ('One', 'Two')
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
@@ -1459,13 +1459,13 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcbucket_pruned
- filterExpr: ((value) IN ('One', 'Two') and (key = 1) and (ds = '2008-04-08')) (type: boolean)
+ filterExpr: ((key = 1) and (ds = '2008-04-08') and (value) IN ('One', 'Two')) (type: boolean)
buckets included: [13,] of 16
Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE Column stats: COMPLETE
GatherStats: false
Filter Operator
isSamplingPred: false
- predicate: ((value) IN ('One', 'Two') and (key = 1) and (ds = '2008-04-08')) (type: boolean)
+ predicate: ((key = 1) and (ds = '2008-04-08') and (value) IN ('One', 'Two')) (type: boolean)
Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: 1 (type: int), value (type: string), '2008-04-08' (type: string)
diff --git a/ql/src/test/results/clientpositive/llap/dynamic_partition_skip_default.q.out b/ql/src/test/results/clientpositive/llap/dynamic_partition_skip_default.q.out
index 578cb52..deefd01 100644
--- a/ql/src/test/results/clientpositive/llap/dynamic_partition_skip_default.q.out
+++ b/ql/src/test/results/clientpositive/llap/dynamic_partition_skip_default.q.out
@@ -192,7 +192,7 @@ POSTHOOK: Input: default@dynamic_part_table@partcol1=1/partcol2=__HIVE_DEFAULT_P
#### A masked pattern was here ####
OPTIMIZED SQL: SELECT `intcol`
FROM `default`.`dynamic_part_table`
-WHERE `partcol2` IN ('1', '__HIVE_DEFAULT_PARTITION__') AND `partcol1` = '1'
+WHERE `partcol1` = '1' AND `partcol2` IN ('1', '__HIVE_DEFAULT_PARTITION__')
STAGE DEPENDENCIES:
Stage-0 is a root stage
@@ -274,7 +274,7 @@ STAGE PLANS:
Processor Tree:
TableScan
alias: dynamic_part_table
- filterExpr: ((partcol2) IN ('1', '__HIVE_DEFAULT_PARTITION__') and (partcol1 = '1')) (type: boolean)
+ filterExpr: ((partcol1 = '1') and (partcol2) IN ('1', '__HIVE_DEFAULT_PARTITION__')) (type: boolean)
GatherStats: false
Select Operator
expressions: intcol (type: string)
diff --git a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
index 232f346..f5f6b80 100644
--- a/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
+++ b/ql/src/test/results/clientpositive/llap/external_jdbc_table_perf.q.out
@@ -2260,7 +2260,7 @@ FROM "STORE_SALES"
WHERE "ss_customer_sk" IS NOT NULL AND "ss_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ss_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ss_sold_date_sk" = "t2"."d_date_sk"
hive.sql.query.fieldNames ss_customer_sk0
hive.sql.query.fieldTypes int
hive.sql.query.split false
@@ -2294,7 +2294,7 @@ FROM "WEB_SALES"
WHERE "ws_bill_customer_sk" IS NOT NULL AND "ws_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ws_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ws_sold_date_sk" = "t2"."d_date_sk"
hive.sql.query.fieldNames literalTrue,ws_bill_customer_sk0
hive.sql.query.fieldTypes boolean,int
hive.sql.query.split false
@@ -2323,7 +2323,7 @@ FROM "CATALOG_SALES"
WHERE "cs_ship_customer_sk" IS NOT NULL AND "cs_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."cs_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."cs_sold_date_sk" = "t2"."d_date_sk"
hive.sql.query.fieldNames literalTrue,cs_ship_customer_sk0
hive.sql.query.fieldTypes boolean,int
hive.sql.query.split false
@@ -6469,7 +6469,7 @@ FROM "STORE_SALES"
WHERE "ss_customer_sk" IS NOT NULL AND "ss_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ss_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ss_sold_date_sk" = "t2"."d_date_sk"
hive.sql.query.fieldNames ss_customer_sk0
hive.sql.query.fieldTypes int
hive.sql.query.split false
@@ -6503,7 +6503,7 @@ FROM "WEB_SALES"
WHERE "ws_bill_customer_sk" IS NOT NULL AND "ws_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ws_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."ws_sold_date_sk" = "t2"."d_date_sk"
GROUP BY "t0"."ws_bill_customer_sk"
hive.sql.query.fieldNames literalTrue,ws_bill_customer_sk0
hive.sql.query.fieldTypes boolean,int
@@ -6533,7 +6533,7 @@ FROM "CATALOG_SALES"
WHERE "cs_ship_customer_sk" IS NOT NULL AND "cs_sold_date_sk" IS NOT NULL) AS "t0"
INNER JOIN (SELECT "d_date_sk"
FROM "DATE_DIM"
-WHERE "d_moy" BETWEEN 1 AND 3 AND "d_year" = 1999 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."cs_sold_date_sk" = "t2"."d_date_sk"
+WHERE "d_year" = 1999 AND "d_moy" BETWEEN 1 AND 3 AND "d_date_sk" IS NOT NULL) AS "t2" ON "t0"."cs_sold_date_sk" = "t2"."d_date_sk"
GROUP BY "t0"."cs_ship_customer_sk"
hive.sql.query.fieldNames literalTrue,cs_ship_customer_sk0
hive.sql.query.fieldTypes boolean,int
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 e9dfff3..abbb7c7 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 (DATE'1996-03-30' = to_date(CAST( l_shipdate AS TIMESTAMP)))) (type: boolean)
+ filterExpr: ((l_shipmode = 'RAIL') and (to_date(CAST( l_shipdate AS TIMESTAMP)) = DATE'1996-03-30')) (type: boolean)
Statistics: Num rows: 100 Data size: 19000 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((l_shipmode = 'RAIL') and (DATE'1996-03-30' = to_date(CAST( l_shipdate AS TIMESTAMP)))) (type: boolean)
+ predicate: ((l_shipmode = 'RAIL') and (to_date(CAST( l_shipdate AS TIMESTAMP)) = DATE'1996-03-30')) (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 1322dc2..291442e 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 `=`, `value` = 50 AS `=3`
FROM `default`.`a_n4`) AS `t`
LEFT JOIN (SELECT `key`, CAST(50 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`key` = `t1`.`key` AND `t`.`=3`
+WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`=3` AND `t`.`key` = `t1`.`key`
LEFT JOIN (SELECT `key`, CAST(60 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`key` = `t3`.`key` AND `t`.`=`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`=` AND `t`.`key` = `t3`.`key`
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 INTEGER) AS `value`
FROM `default`.`a_n4`
WHERE `value` = 50 AND `key` IS NOT NULL) AS `t0`
RIGHT JOIN (SELECT `key`, `value`, `value` = 60 AS `=`, `value` = 50 AS `=3`
-FROM `default`.`a_n4`) AS `t1` ON `t0`.`key` = `t1`.`key` AND `t1`.`=3`
+FROM `default`.`a_n4`) AS `t1` ON `t1`.`=3` AND `t0`.`key` = `t1`.`key`
LEFT JOIN (SELECT `key`, CAST(60 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`key` = `t3`.`key` AND `t1`.`=`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`=` AND `t1`.`key` = `t3`.`key`
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 INTEGER) AS `value`
FROM `default`.`a_n4`
WHERE `value` = 50 AND `key` IS NOT NULL) AS `t0`
RIGHT JOIN (SELECT `key`, `value`, `value` = 60 AS `=`, `value` = 50 AS `=3`
-FROM `default`.`a_n4`) AS `t1` ON `t0`.`key` = `t1`.`key` AND `t1`.`=3`
+FROM `default`.`a_n4`) AS `t1` ON `t1`.`=3` AND `t0`.`key` = `t1`.`key`
LEFT JOIN (SELECT `key`, CAST(60 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`key` = `t3`.`key` AND `t1`.`=`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t1`.`=` AND `t1`.`key` = `t3`.`key`
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 `=`, `value` = 50 AS `=3`
FROM `default`.`a_n4`) AS `t`
FULL JOIN (SELECT `key`, `value`, `value` = 60 AS `=`, `value` = 50 AS `=3`
-FROM `default`.`a_n4`) AS `t0` ON `t`.`key` = `t0`.`key` AND `t`.`=3` AND `t0`.`=3`
+FROM `default`.`a_n4`) AS `t0` ON `t`.`=3` AND `t0`.`=3` AND `t`.`key` = `t0`.`key`
LEFT JOIN (SELECT `key`, CAST(60 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t2` ON `t0`.`key` = `t2`.`key` AND `t0`.`=`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t2` ON `t0`.`=` AND `t0`.`key` = `t2`.`key`
LEFT JOIN (SELECT `key`, CAST(40 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 40 AND `key` IS NOT NULL) AS `t4` ON `t`.`key` = `t4`.`key` AND `t`.`=`
+WHERE `value` = 40 AND `key` IS NOT NULL) AS `t4` ON `t`.`=` AND `t`.`key` = `t4`.`key`
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 `=`, `value` = 60 AS `=3`, `value`
FROM `default`.`a_n4`) AS `t`
LEFT JOIN (SELECT `key`, CAST(50 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`key` = `t1`.`key` AND `t`.`=4`
+WHERE `value` = 50 AND `key` IS NOT NULL) AS `t1` ON `t`.`=4` AND `t`.`key` = `t1`.`key`
LEFT JOIN (SELECT `key`, CAST(60 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`key` = `t3`.`key` AND `t`.`=3`
+WHERE `value` = 60 AND `key` IS NOT NULL) AS `t3` ON `t`.`=3` AND `t`.`key` = `t3`.`key`
LEFT JOIN (SELECT `key`, CAST(40 AS INTEGER) AS `value`
FROM `default`.`a_n4`
-WHERE `value` = 40 AND `key` IS NOT NULL) AS `t5` ON `t`.`key` = `t5`.`key` AND `t`.`=`
+WHERE `value` = 40 AND `key` IS NOT NULL) AS `t5` ON `t`.`=` AND `t`.`key` = `t5`.`key`
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 b0168dc..792ea95 100644
--- a/ql/src/test/results/clientpositive/llap/masking_mv.q.out
+++ b/ql/src/test/results/clientpositive/llap/masking_mv.q.out
@@ -198,9 +198,9 @@ STAGE PLANS:
Processor Tree:
TableScan
alias: default.masking_test_view_n_mv
- filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Filter Operator
- predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Select Operator
expressions: key (type: int)
outputColumnNames: _col0
@@ -262,10 +262,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.masking_test_view_n_mv
- filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Statistics: Num rows: 500 Data size: 2000 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Statistics: Num rows: 5 Data size: 20 Basic stats: COMPLETE Column stats: COMPLETE
Group By Operator
keys: key (type: int)
@@ -536,10 +536,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.masking_test_view_n_mv_4
- filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Statistics: Num rows: 500 Data size: 47500 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ predicate: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Statistics: Num rows: 5 Data size: 475 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: reverse(value) (type: string)
@@ -627,10 +627,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.masking_test_view_n_mv_4
- filterExpr: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ filterExpr: ((key < 10) and ((key % 2) = 0)) (type: boolean)
Statistics: Num rows: 500 Data size: 47500 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((key < 10) and (0 = (key % 2))) (type: boolean)
+ predicate: ((key < 10) and ((key % 2) = 0)) (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 16a98ff..b1a9df9 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
@@ -646,10 +646,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: ((lo_quantity < 25.0D) and lo_discount BETWEEN 1.0D AND 3.0D and (d_year = 1993)) (type: boolean)
+ filterExpr: ((lo_quantity < 25.0D) and (d_year = 1993) and lo_discount BETWEEN 1.0D AND 3.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((lo_quantity < 25.0D) and lo_discount BETWEEN 1.0D AND 3.0D and (d_year = 1993)) (type: boolean)
+ predicate: ((lo_quantity < 25.0D) and (d_year = 1993) and lo_discount BETWEEN 1.0D AND 3.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -736,10 +736,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: (lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D and (d_yearmonthnum = 199401)) (type: boolean)
+ filterExpr: ((d_yearmonthnum = 199401) and lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D and (d_yearmonthnum = 199401)) (type: boolean)
+ predicate: ((d_yearmonthnum = 199401) and lo_quantity BETWEEN 26.0D AND 35.0D and lo_discount BETWEEN 4.0D AND 6.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 28 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -828,10 +828,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 32 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 32 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -1059,10 +1059,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' and (s_region = 'ASIA')) (type: boolean)
+ filterExpr: ((s_region = 'ASIA') and p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228') (type: boolean)
Statistics: Num rows: 1 Data size: 180 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' and (s_region = 'ASIA')) (type: boolean)
+ predicate: ((s_region = 'ASIA') and p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228') (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)
@@ -1315,10 +1315,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: (d_year BETWEEN 1992 AND 1997 and (c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
+ filterExpr: ((c_region = 'ASIA') and (s_region = 'ASIA') and d_year BETWEEN 1992 AND 1997) (type: boolean)
Statistics: Num rows: 1 Data size: 348 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (d_year BETWEEN 1992 AND 1997 and (c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
+ predicate: ((c_region = 'ASIA') and (s_region = 'ASIA') and d_year BETWEEN 1992 AND 1997) (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)
@@ -1443,10 +1443,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: (d_year BETWEEN 1992 AND 1997 and (c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
+ filterExpr: ((c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES') and d_year BETWEEN 1992 AND 1997) (type: boolean)
Statistics: Num rows: 1 Data size: 348 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (d_year BETWEEN 1992 AND 1997 and (c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
+ predicate: ((c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES') and d_year BETWEEN 1992 AND 1997) (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)
@@ -1695,10 +1695,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: ((c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5') and (d_yearmonth = 'Dec1997')) (type: boolean)
+ filterExpr: ((d_yearmonth = 'Dec1997') and (c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5')) (type: boolean)
Statistics: Num rows: 1 Data size: 264 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5') and (d_yearmonth = 'Dec1997')) (type: boolean)
+ predicate: ((d_yearmonth = 'Dec1997') and (c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5')) (type: boolean)
Statistics: Num rows: 1 Data size: 264 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)
@@ -1829,10 +1829,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: ((p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 348 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (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), net_revenue (type: double)
@@ -1961,10 +1961,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: ((d_year) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (d_year) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 432 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((d_year) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (d_year) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 432 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: d_year (type: int), p_category (type: string), s_nation (type: string), net_revenue (type: double)
@@ -2093,10 +2093,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv_n0
- filterExpr: ((d_year) IN (1997, 1998) and (c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES') and (d_year) IN (1997, 1998)) (type: boolean)
Statistics: Num rows: 1 Data size: 432 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((d_year) IN (1997, 1998) and (c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES') and (d_year) IN (1997, 1998)) (type: boolean)
Statistics: Num rows: 1 Data size: 432 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: d_year (type: int), p_brand1 (type: string), s_city (type: string), net_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 fc84498..2159db0 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
@@ -648,10 +648,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: ((UDFToDouble(lo_quantity) < 25.0D) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D and (UDFToInteger(d_year) = 1993)) (type: boolean)
+ filterExpr: ((UDFToDouble(lo_quantity) < 25.0D) and (UDFToInteger(d_year) = 1993) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((UDFToDouble(lo_quantity) < 25.0D) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D and (UDFToInteger(d_year) = 1993)) (type: boolean)
+ predicate: ((UDFToDouble(lo_quantity) < 25.0D) and (UDFToInteger(d_year) = 1993) and UDFToDouble(lo_discount) BETWEEN 1.0D AND 3.0D) (type: boolean)
Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -738,10 +738,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -830,10 +830,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 344 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- 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)
+ 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)
Statistics: Num rows: 1 Data size: 344 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: discounted_price (type: double)
@@ -1061,10 +1061,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' and (s_region = 'ASIA')) (type: boolean)
+ filterExpr: ((s_region = 'ASIA') and p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228') (type: boolean)
Statistics: Num rows: 1 Data size: 260 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228' and (s_region = 'ASIA')) (type: boolean)
+ predicate: ((s_region = 'ASIA') and p_brand1 BETWEEN 'MFGR#2221' AND 'MFGR#2228') (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)
@@ -1317,10 +1317,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and (c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
+ filterExpr: ((c_region = 'ASIA') and (s_region = 'ASIA') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and (c_region = 'ASIA') and (s_region = 'ASIA')) (type: boolean)
+ predicate: ((c_region = 'ASIA') and (s_region = 'ASIA') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (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)
@@ -1445,10 +1445,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and (c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
+ filterExpr: ((c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (type: boolean)
Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: (UDFToInteger(d_year) BETWEEN 1992 AND 1997 and (c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES')) (type: boolean)
+ predicate: ((c_nation = 'UNITED STATES') and (s_nation = 'UNITED STATES') and UDFToInteger(d_year) BETWEEN 1992 AND 1997) (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)
@@ -1701,10 +1701,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: ((c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5') and (d_yearmonth = 'Dec1997')) (type: boolean)
+ filterExpr: ((d_yearmonth = 'Dec1997') and (c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5')) (type: boolean)
Statistics: Num rows: 1 Data size: 344 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5') and (d_yearmonth = 'Dec1997')) (type: boolean)
+ predicate: ((d_yearmonth = 'Dec1997') and (c_city) IN ('UNITED KI1', 'UNITED KI5') and (s_city) IN ('UNITED KI1', 'UNITED KI5')) (type: boolean)
Statistics: Num rows: 1 Data size: 344 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)
@@ -1835,10 +1835,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: ((p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 428 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: UDFToInteger(d_year) (type: int), c_nation (type: string), net_revenue (type: double)
@@ -1967,10 +1967,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: ((UDFToInteger(d_year)) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (UDFToInteger(d_year)) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 512 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((UDFToInteger(d_year)) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2') and (c_region = 'AMERICA') and (s_region = 'AMERICA')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (s_region = 'AMERICA') and (UDFToInteger(d_year)) IN (1997, 1998) and (p_mfgr) IN ('MFGR#1', 'MFGR#2')) (type: boolean)
Statistics: Num rows: 1 Data size: 512 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: UDFToInteger(d_year) (type: int), s_nation (type: string), p_category (type: string), net_revenue (type: double)
@@ -2099,10 +2099,10 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: default.ssb_mv
- filterExpr: ((UDFToInteger(d_year)) IN (1997, 1998) and (c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES')) (type: boolean)
+ filterExpr: ((c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES') and (UDFToInteger(d_year)) IN (1997, 1998)) (type: boolean)
Statistics: Num rows: 1 Data size: 512 Basic stats: COMPLETE Column stats: COMPLETE
Filter Operator
- predicate: ((UDFToInteger(d_year)) IN (1997, 1998) and (c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES')) (type: boolean)
+ predicate: ((c_region = 'AMERICA') and (p_category = 'MFGR#14') and (s_nation = 'UNITED STATES') and (UDFToInteger(d_year)) IN (1997, 1998)) (type: boolean)
Statistics: Num rows: 1 Data size: 512 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: UDFToInteger(d_year) (type: int), s_city (type: string), p_brand1 (type: string), net_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 35e76eb..c4207d5 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
@@ -678,7 +678,7 @@ POSTHOOK: Input: default@ssb_mv_n3
#### A masked pattern was here ####
CBO PLAN:
HiveAggregate(group=[{}], agg#0=[sum($16)])
- HiveFilter(condition=[AND(>(2.5E1, $8), =(CAST($18):BIGINT NOT NULL, 29247), BETWEEN(false, $7, 1:DOUBLE, 3:DOUBLE), =(1993, $4))])
+ HiveFilter(condition=[AND(>(2.5E1, $8), =(CAST($18):BIGINT NOT NULL, 29247), =($4, 1993), BETWEEN(false, $7, 1:DOUBLE, 3:DOUBLE))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -713,7 +713,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), BETWEEN(false, $8, 26:DOUBLE, 35:DOUBLE), BETWEEN(false, $7, 4:DOUBLE, 6:DOUBLE), =(199401, $6))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), =($6, 199401), BETWEEN(false, $8, 26:DOUBLE, 35:DOUBLE), BETWEEN(false, $7, 4:DOUBLE, 6:DOUBLE))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -750,7 +750,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), BETWEEN(false, $8, 26:DOUBLE, 35:DOUBLE), BETWEEN(false, $7, 5:DOUBLE, 7:DOUBLE), =(1994, $4), =(6, $3))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 29247), =($4, 1994), =($3, 6), BETWEEN(false, $8, 26:DOUBLE, 35:DOUBLE), BETWEEN(false, $7, 5:DOUBLE, 7:DOUBLE))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -852,7 +852,7 @@ CBO PLAN:
HiveSortLimit(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[ASC])
HiveProject($f2=[$2], d_year=[$0], p_brand1=[$1])
HiveAggregate(group=[{4, 9}], agg#0=[sum($15)])
- 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'))])
+ 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"))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -959,7 +959,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), BETWEEN(false, $4, 1992, 1997), =($2, _UTF-16LE'ASIA'), =($14, _UTF-16LE'ASIA'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), =($2, _UTF-16LE'ASIA'), =($14, _UTF-16LE'ASIA'), BETWEEN(false, $4, 1992, 1997))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1012,7 +1012,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), BETWEEN(false, $4, 1992, 1997), =($1, _UTF-16LE'UNITED STATES'), =($13, _UTF-16LE'UNITED STATES'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), =($1, _UTF-16LE'UNITED STATES'), =($13, _UTF-16LE'UNITED STATES'), BETWEEN(false, $4, 1992, 1997))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1065,7 +1065,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(IN($0, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), IN($12, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =(CAST($18):BIGINT NOT NULL, 2496), BETWEEN(false, $4, 1992, 1997))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), IN($0, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), IN($12, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), BETWEEN(false, $4, 1992, 1997))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1118,7 +1118,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(IN($0, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), IN($12, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =(CAST($18):BIGINT NOT NULL, 2496), =($5, _UTF-16LE'Dec1997'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), IN($0, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), IN($12, _UTF-16LE'UNITED KI1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'UNITED KI5':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =($5, _UTF-16LE'Dec1997'))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1177,7 +1177,7 @@ CBO PLAN:
HiveSortLimit(sort0=[$0], sort1=[$1], dir0=[ASC], dir1=[ASC])
HiveProject(d_year=[$1], c_nation=[$0], $f2=[$2])
HiveAggregate(group=[{1, 4}], agg#0=[sum($17)])
- HiveFilter(condition=[AND(IN($11, _UTF-16LE'MFGR#1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =(CAST($18):BIGINT NOT NULL, 2496), =($2, _UTF-16LE'AMERICA'), =($14, _UTF-16LE'AMERICA'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), IN($11, _UTF-16LE'MFGR#1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =($2, _UTF-16LE'AMERICA'), =($14, _UTF-16LE'AMERICA'))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1238,7 +1238,7 @@ CBO PLAN:
HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], dir0=[ASC], dir1=[ASC], dir2=[ASC])
HiveProject(d_year=[$0], s_nation=[$2], p_category=[$1], $f3=[$3])
HiveAggregate(group=[{4, 10, 13}], agg#0=[sum($17)])
- HiveFilter(condition=[AND(IN($4, 1997, 1998), IN($11, _UTF-16LE'MFGR#1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =(CAST($18):BIGINT NOT NULL, 2496), =($2, _UTF-16LE'AMERICA'), =($14, _UTF-16LE'AMERICA'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), IN($4, 1997, 1998), IN($11, _UTF-16LE'MFGR#1':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'MFGR#2':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), =($2, _UTF-16LE'AMERICA'), =($14, _UTF-16LE'AMERICA'))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: explain cbo
@@ -1299,7 +1299,7 @@ CBO PLAN:
HiveSortLimit(sort0=[$0], sort1=[$1], sort2=[$2], dir0=[ASC], dir1=[ASC], dir2=[ASC])
HiveProject(d_year=[$0], s_city=[$2], p_brand1=[$1], $f3=[$3])
HiveAggregate(group=[{4, 9, 12}], agg#0=[sum($17)])
- HiveFilter(condition=[AND(IN($4, 1997, 1998), =(CAST($18):BIGINT NOT NULL, 2496), =($2, _UTF-16LE'AMERICA'), =($10, _UTF-16LE'MFGR#14'), =($13, _UTF-16LE'UNITED STATES'))])
+ HiveFilter(condition=[AND(=(CAST($18):BIGINT NOT NULL, 2496), IN($4, 1997, 1998), =($2, _UTF-16LE'AMERICA'), =($10, _UTF-16LE'MFGR#14'), =($13, _UTF-16LE'UNITED STATES'))])
HiveTableScan(table=[[default, ssb_mv_n3]], table:alias=[default.ssb_mv_n3])
PREHOOK: query: DROP MATERIALIZED VIEW `ssb_mv_n3`
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 c1a9892..1521c8c 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
@@ -707,7 +707,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), 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'))])
+ 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"))])
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/multi_in_clause.q.out b/ql/src/test/results/clientpositive/llap/multi_in_clause.q.out
index 985c2a4..be366c2 100644
--- a/ql/src/test/results/clientpositive/llap/multi_in_clause.q.out
+++ b/ql/src/test/results/clientpositive/llap/multi_in_clause.q.out
@@ -1,20 +1,31 @@
-PREHOOK: query: create table very_simple_table_for_in_test (name STRING)
+PREHOOK: query: create table very_simple_table_for_in_test (name STRING, othername STRING)
PREHOOK: type: CREATETABLE
PREHOOK: Output: database:default
PREHOOK: Output: default@very_simple_table_for_in_test
-POSTHOOK: query: create table very_simple_table_for_in_test (name STRING)
+POSTHOOK: query: create table very_simple_table_for_in_test (name STRING, othername STRING)
POSTHOOK: type: CREATETABLE
POSTHOOK: Output: database:default
POSTHOOK: Output: default@very_simple_table_for_in_test
-PREHOOK: query: insert into very_simple_table_for_in_test values ('a')
+PREHOOK: query: insert into very_simple_table_for_in_test values ('a', null)
PREHOOK: type: QUERY
PREHOOK: Input: _dummy_database@_dummy_table
PREHOOK: Output: default@very_simple_table_for_in_test
-POSTHOOK: query: insert into very_simple_table_for_in_test values ('a')
+POSTHOOK: query: insert into very_simple_table_for_in_test values ('a', null)
POSTHOOK: type: QUERY
POSTHOOK: Input: _dummy_database@_dummy_table
POSTHOOK: Output: default@very_simple_table_for_in_test
POSTHOOK: Lineage: very_simple_table_for_in_test.name SCRIPT []
+POSTHOOK: Lineage: very_simple_table_for_in_test.othername EXPRESSION []
+PREHOOK: query: insert into very_simple_table_for_in_test values (null, null)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@very_simple_table_for_in_test
+POSTHOOK: query: insert into very_simple_table_for_in_test values (null, null)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@very_simple_table_for_in_test
+POSTHOOK: Lineage: very_simple_table_for_in_test.name EXPRESSION []
+POSTHOOK: Lineage: very_simple_table_for_in_test.othername EXPRESSION []
PREHOOK: query: explain cbo
select * from very_simple_table_for_in_test where name IN('g','r') AND name IN('a','b')
PREHOOK: type: QUERY
@@ -27,7 +38,7 @@ POSTHOOK: Input: default@very_simple_table_for_in_test
#### A masked pattern was here ####
CBO PLAN:
HiveSortLimit(fetch=[0])
- HiveProject(name=[$0])
+ HiveProject(name=[$0], othername=[$1])
HiveTableScan(table=[[default, very_simple_table_for_in_test]], table:alias=[very_simple_table_for_in_test])
PREHOOK: query: select * from very_simple_table_for_in_test where name IN('g','r') AND name IN('a','b')
@@ -38,3 +49,51 @@ POSTHOOK: query: select * from very_simple_table_for_in_test where name IN('g','
POSTHOOK: type: QUERY
POSTHOOK: Input: default@very_simple_table_for_in_test
#### A masked pattern was here ####
+PREHOOK: query: explain cbo
+select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+POSTHOOK: query: explain cbo
+select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+CBO PLAN:
+HiveProject(_o__c0=[AND(IS NULL($0), null)])
+ HiveTableScan(table=[[default, very_simple_table_for_in_test]], table:alias=[very_simple_table_for_in_test])
+
+PREHOOK: query: select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+POSTHOOK: query: select name IN('g','r') AND name IN('a','b') from very_simple_table_for_in_test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+false
+NULL
+PREHOOK: query: explain cbo
+select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+POSTHOOK: query: explain cbo
+select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+CBO PLAN:
+HiveProject(_o__c0=[AND(IN($1, _UTF-16LE'x':VARCHAR(2147483647) CHARACTER SET "UTF-16LE", _UTF-16LE'y':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"), IS NULL($0), null)])
+ HiveTableScan(table=[[default, very_simple_table_for_in_test]], table:alias=[very_simple_table_for_in_test])
+
+PREHOOK: query: select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test
+PREHOOK: type: QUERY
+PREHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+POSTHOOK: query: select name IN('g','r') AND name IN('a','b') AND othername IN('x', 'y') from very_simple_table_for_in_test
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@very_simple_table_for_in_test
+#### A masked pattern was here ####
+false
+NULL
diff --git a/ql/src/test/results/clientpositive/llap/pcr.q.out b/ql/src/test/results/clientpositive/llap/pcr.q.out
index 0fdcfbe..78b3a58 100644
--- a/ql/src/test/results/clientpositive/llap/pcr.q.out
+++ b/ql/src/test/results/clientpositive/llap/pcr.q.out
@@ -4292,7 +4292,7 @@ POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
OPTIMIZED SQL: SELECT `key`, `value`, CAST('2008-04-08' AS STRING) AS `ds`, `hr`
FROM (SELECT `key`, `value`, `hr`
FROM `default`.`srcpart`
-WHERE `key` = 11 AND `hr` IN ('11', '12') AND `ds` = '2008-04-08'
+WHERE `key` = 11 AND `ds` = '2008-04-08' AND `hr` IN ('11', '12')
ORDER BY `key`, `hr`) AS `t1`
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -4310,7 +4310,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: ((UDFToDouble(key) = 11.0D) and (hr) IN ('11', '12') and (ds = '2008-04-08')) (type: boolean)
+ filterExpr: ((UDFToDouble(key) = 11.0D) and (ds = '2008-04-08') and (hr) IN ('11', '12')) (type: boolean)
Statistics: Num rows: 1000 Data size: 362000 Basic stats: COMPLETE Column stats: COMPLETE
GatherStats: false
Filter Operator
diff --git a/ql/src/test/results/clientpositive/llap/ppd_union_view.q.out b/ql/src/test/results/clientpositive/llap/ppd_union_view.q.out
index 029b7f0..b62bc64 100644
--- a/ql/src/test/results/clientpositive/llap/ppd_union_view.q.out
+++ b/ql/src/test/results/clientpositive/llap/ppd_union_view.q.out
@@ -161,7 +161,7 @@ FROM `default`.`t1_old`
WHERE `ds` = '2011-10-13' AND `keymap` IS NOT NULL) AS `t2`
INNER JOIN (SELECT `key`, `keymap`
FROM `default`.`t1_mapping`
-WHERE '2011-10-13' = `ds` AND `keymap` IS NOT NULL) AS `t4` ON `t2`.`keymap` = `t4`.`keymap`) AS `t6`
+WHERE `ds` = '2011-10-13' AND `keymap` IS NOT NULL) AS `t4` ON `t2`.`keymap` = `t4`.`keymap`) AS `t6`
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
@@ -487,7 +487,7 @@ FROM `default`.`t1_old`
WHERE `ds` = '2011-10-15' AND `keymap` IS NOT NULL) AS `t2`
INNER JOIN (SELECT `key`, `keymap`
FROM `default`.`t1_mapping`
-WHERE '2011-10-15' = `ds` AND `keymap` IS NOT NULL) AS `t4` ON `t2`.`keymap` = `t4`.`keymap`) AS `t6`
+WHERE `ds` = '2011-10-15' AND `keymap` IS NOT NULL) AS `t4` ON `t2`.`keymap` = `t4`.`keymap`) AS `t6`
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
@@ -515,14 +515,14 @@ STAGE PLANS:
Select Operator
expressions: _col0 (type: string), _col1 (type: string), '2011-10-15' (type: string)
outputColumnNames: _col0, _col1, _col2
- Statistics: Num rows: 2 Data size: 736 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 2 Data size: 544 Basic stats: COMPLETE Column stats: COMPLETE
File Output Operator
bucketingVersion: 2
compressed: false
GlobalTableId: 0
#### A masked pattern was here ####
NumFilesPerFileSink: 1
- Statistics: Num rows: 2 Data size: 736 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 2 Data size: 544 Basic stats: COMPLETE Column stats: COMPLETE
#### A masked pattern was here ####
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
@@ -622,16 +622,16 @@ STAGE PLANS:
filterExpr: ((ds = '2011-10-15') and keymap is not null) (type: boolean)
properties:
insideView TRUE
- Statistics: Num rows: 1 Data size: 552 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 1 Data size: 352 Basic stats: COMPLETE Column stats: COMPLETE
GatherStats: false
Filter Operator
isSamplingPred: false
predicate: ((ds = '2011-10-15') and keymap is not null) (type: boolean)
- Statistics: Num rows: 1 Data size: 552 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 1 Data size: 352 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: key (type: string), keymap (type: string)
outputColumnNames: _col0, _col1
- Statistics: Num rows: 1 Data size: 368 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 1 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
Reduce Output Operator
bucketingVersion: 2
key expressions: _col1 (type: string)
@@ -639,7 +639,7 @@ STAGE PLANS:
numBuckets: -1
sort order: +
Map-reduce partition columns: _col1 (type: string)
- Statistics: Num rows: 1 Data size: 368 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 1 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
tag: 1
value expressions: _col0 (type: string)
auto parallelism: true
@@ -656,23 +656,23 @@ STAGE PLANS:
0 _col0 (type: string)
1 _col1 (type: string)
outputColumnNames: _col1, _col2
- Position of Big Table: 1
- Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE Column stats: PARTIAL
+ Position of Big Table: 0
+ Statistics: Num rows: 1 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: _col2 (type: string), _col1 (type: string)
outputColumnNames: _col0, _col1
- Statistics: Num rows: 1 Data size: 268 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 1 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: _col0 (type: string), _col1 (type: string), '2011-10-15' (type: string)
outputColumnNames: _col0, _col1, _col2
- Statistics: Num rows: 2 Data size: 736 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 2 Data size: 544 Basic stats: COMPLETE Column stats: COMPLETE
File Output Operator
bucketingVersion: 2
compressed: false
GlobalTableId: 0
#### A masked pattern was here ####
NumFilesPerFileSink: 1
- Statistics: Num rows: 2 Data size: 736 Basic stats: COMPLETE Column stats: PARTIAL
+ Statistics: Num rows: 2 Data size: 544 Basic stats: COMPLETE Column stats: COMPLETE
#### A masked pattern was here ####
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
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 5f4cc0c..081c7da 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 RAND(1) < 0.1 AND `ds` = '2008-04-08'
+WHERE `ds` = '2008-04-08' AND RAND(1) < 0.1
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 7f3aae3..e3e3d87 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 RAND(1) < 0.1 AND `ds` = '2008-04-08' AND `hr` LIKE '%2'
+WHERE CAST(`key` AS DOUBLE) BETWEEN 10 AND 50 AND `ds` = '2008-04-08' AND RAND(1) < 0.1 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 7c09259..4e69602 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`.`k1` = `t4`.`k1` AND `t2`.`=`
+WHERE `k0` > 50 AND `k1` > 20 AND `ds` = '1') AS `t4` ON `t2`.`=` AND `t2`.`k1` = `t4`.`k1`
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
diff --git a/ql/src/test/results/clientpositive/llap/unionDistinct_1.q.out b/ql/src/test/results/clientpositive/llap/unionDistinct_1.q.out
index 3d7d4de..23a6464 100644
--- a/ql/src/test/results/clientpositive/llap/unionDistinct_1.q.out
+++ b/ql/src/test/results/clientpositive/llap/unionDistinct_1.q.out
@@ -3909,7 +3909,7 @@ FROM `default`.`dst_union22_n0`
WHERE `k1` > 20) AS `t2`
LEFT JOIN (SELECT `k1`, `k3`, `k4`
FROM `default`.`dst_union22_delta_n0`
-WHERE `k0` > 50 AND `k1` > 20 AND `ds` = '1') AS `t4` ON `t2`.`k1` = `t4`.`k1` AND `t2`.`=`)
+WHERE `k0` > 50 AND `k1` > 20 AND `ds` = '1') AS `t4` ON `t2`.`=` AND `t2`.`k1` = `t4`.`k1`)
GROUP BY `k1`, `k2`, `k3`, `k4`
STAGE DEPENDENCIES:
Stage-1 is a root stage
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 6164d9a..f435127 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
@@ -960,7 +960,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: vector_interval_2
- filterExpr: ((CAST( str1 AS INTERVAL YEAR TO MONTH) <= INTERVAL'1-3') and (CAST( str1 AS INTERVAL YEAR TO MONTH) < INTERVAL'1-3') and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and (INTERVAL'1-2' <= CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-2' < CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' >= CAST( str1 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' > CAST( str1 AS INTERV [...]
+ filterExpr: ((CAST( str1 AS INTERVAL YEAR TO MONTH) <= INTERVAL'1-3') and (CAST( str1 AS INTERVAL YEAR TO MONTH) < INTERVAL'1-3') and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and (INTERVAL'1-2' <= CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-2' < CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' >= CAST( str1 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' > CAST( str1 AS INTERV [...]
Statistics: Num rows: 2 Data size: 428 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -968,8 +968,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterIntervalYearMonthColLessEqualIntervalYearMonthScalar(col 7:interval_year_month, val 15)(children: CastStringToIntervalYearMonth(col 2:string) -> 7:interval_year_month), FilterIntervalYearMonthColLessIntervalYearMonthScalar(col 8:interval_year_month, val 15)(children: CastStringToIntervalYearMonth(col 2:string) -> 8:interval_year_month), FilterIntervalYearMonthColGreaterEqualIntervalYearMonthScalar(col 9:interv [...]
- predicate: ((CAST( str1 AS INTERVAL YEAR TO MONTH) <= INTERVAL'1-3') and (CAST( str1 AS INTERVAL YEAR TO MONTH) < INTERVAL'1-3') and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and (INTERVAL'1-2' <= CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-2' < CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' >= CAST( str1 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' > CAST( str1 AS INTER [...]
+ predicateExpression: FilterExprAndExpr(children: FilterIntervalYearMonthColLessEqualIntervalYearMonthScalar(col 7:interval_year_month, val 15)(children: CastStringToIntervalYearMonth(col 2:string) -> 7:interval_year_month), FilterIntervalYearMonthColLessIntervalYearMonthScalar(col 8:interval_year_month, val 15)(children: CastStringToIntervalYearMonth(col 2:string) -> 8:interval_year_month), FilterIntervalYearMonthColGreaterEqualIntervalYearMonthScalar(col 9:interv [...]
+ predicate: ((CAST( str1 AS INTERVAL YEAR TO MONTH) <= INTERVAL'1-3') and (CAST( str1 AS INTERVAL YEAR TO MONTH) < INTERVAL'1-3') and (CAST( str2 AS INTERVAL YEAR TO MONTH) >= INTERVAL'1-2') and (CAST( str2 AS INTERVAL YEAR TO MONTH) > INTERVAL'1-2') and (INTERVAL'1-2' <= CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-2' < CAST( str2 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' >= CAST( str1 AS INTERVAL YEAR TO MONTH)) and (INTERVAL'1-3' > CAST( str1 AS INTER [...]
Statistics: Num rows: 1 Data size: 214 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: ts (type: timestamp)
@@ -1160,7 +1160,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: vector_interval_2
- filterExpr: ((CAST( str3 AS INTERVAL DAY TO SECOND) <= INTERVAL'1 02:03:05.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) < INTERVAL'1 02:03:05.000000000') and (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 (INTERVAL'1 02:03:04.000000000' <= CAST( str4 AS INTERVAL DAY TO SECOND)) and (INTERVAL'1 02:03:04.000000000' < CAST( str4 AS INTERVAL DAY TO SECOND)) [...]
+ filterExpr: ((CAST( str3 AS INTERVAL DAY TO SECOND) <= INTERVAL'1 02:03:05.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) < INTERVAL'1 02:03:05.000000000') and (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 (INTERVAL'1 02:03:04.000000000' <= CAST( str4 AS INTERVAL DAY TO SECOND)) and (INTERVAL'1 02:03:04.000000000' < CAST( str4 AS INTERVAL DAY TO SECOND)) [...]
Statistics: Num rows: 2 Data size: 444 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -1168,8 +1168,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterIntervalDayTimeColLessEqualIntervalDayTimeScalar(col 7:interval_day_time, val 1 02:03:05.000000000)(children: CastStringToIntervalDayTime(col 4:string) -> 7:interval_day_time), FilterIntervalDayTimeColLessIntervalDayTimeScalar(col 8:interval_day_time, val 1 02:03:05.000000000)(children: CastStringToIntervalDayTime(col 4:string) -> 8:interval_day_time), FilterIntervalDayTimeColGreaterEqualIntervalDayTimeScalar( [...]
- predicate: ((CAST( str3 AS INTERVAL DAY TO SECOND) <= INTERVAL'1 02:03:05.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) < INTERVAL'1 02:03:05.000000000') and (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 (INTERVAL'1 02:03:04.000000000' <= CAST( str4 AS INTERVAL DAY TO SECOND)) and (INTERVAL'1 02:03:04.000000000' < CAST( str4 AS INTERVAL DAY TO SECOND)) [...]
+ predicateExpression: FilterExprAndExpr(children: FilterIntervalDayTimeColLessEqualIntervalDayTimeScalar(col 7:interval_day_time, val 1 02:03:05.000000000)(children: CastStringToIntervalDayTime(col 4:string) -> 7:interval_day_time), FilterIntervalDayTimeColLessIntervalDayTimeScalar(col 8:interval_day_time, val 1 02:03:05.000000000)(children: CastStringToIntervalDayTime(col 4:string) -> 8:interval_day_time), FilterIntervalDayTimeColGreaterEqualIntervalDayTimeScalar( [...]
+ predicate: ((CAST( str3 AS INTERVAL DAY TO SECOND) <= INTERVAL'1 02:03:05.000000000') and (CAST( str3 AS INTERVAL DAY TO SECOND) < INTERVAL'1 02:03:05.000000000') and (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 (INTERVAL'1 02:03:04.000000000' <= CAST( str4 AS INTERVAL DAY TO SECOND)) and (INTERVAL'1 02:03:04.000000000' < CAST( str4 AS INTERVAL DAY TO SECOND)) [...]
Statistics: Num rows: 1 Data size: 222 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: ts (type: timestamp)
@@ -1350,7 +1350,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: vector_interval_2
- filterExpr: ((DATE'2002-03-01' = (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and DATE'2002-03-01' BETWEEN (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) AND (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' and (dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and (DATE'2002-03-01' = (dt + INTERVAL'1-2')) and [...]
+ filterExpr: (((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and ((dt + INTERVAL'1-2') = DATE'2002-03-01') and DATE'2002-03-01' BETWEEN (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) AND (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) and (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' and (dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and (dt + INTERVAL'1-2') BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' and [...]
Statistics: Num rows: 2 Data size: 366 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -1358,8 +1358,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterDateScalarEqualDateColumn(val 11747, col 8:date)(children: DateColAddIntervalYearMonthColumn(col 1:date, col 7:interval_year_month)(children: CastStringToIntervalYearMonth(col 2:string) -> 7:interval_year_month) -> 8:date), SelectColumnIsTrue(col 13:boolean)(children: VectorUDFAdaptor(DATE'2002-03-01' BETWEEN (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) AND (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)))(childre [...]
- predicate: ((DATE'2002-03-01' = (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and DATE'2002-03-01' BETWEEN (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) AND (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) and ((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' and (dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and (DATE'2002-03-01' = (dt + INTERVAL'1-2')) and [...]
+ predicateExpression: FilterExprAndExpr(children: FilterDateColEqualDateScalar(col 8:date, val 11747)(children: DateColAddIntervalYearMonthColumn(col 1:date, col 7:interval_year_month)(children: CastStringToIntervalYearMonth(col 2:string) -> 7:interval_year_month) -> 8:date), FilterDateColEqualDateScalar(col 9:date, val 11747)(children: DateColAddIntervalYearMonthScalar(col 1:date, val 1-2) -> 9:date), SelectColumnIsTrue(col 14:boolean)(children: VectorUDFAdaptor(D [...]
+ predicate: (((dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) = DATE'2002-03-01') and ((dt + INTERVAL'1-2') = DATE'2002-03-01') and DATE'2002-03-01' BETWEEN (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) AND (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) and (dt + CAST( str1 AS INTERVAL YEAR TO MONTH)) BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' and (dt <> (dt + CAST( str1 AS INTERVAL YEAR TO MONTH))) and (dt + INTERVAL'1-2') BETWEEN DATE'2002-03-01' AND DATE'2002-03-01' an [...]
Statistics: Num rows: 1 Data size: 183 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: ts (type: timestamp)
@@ -1540,7 +1540,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: vector_interval_2
- filterExpr: ((TIMESTAMP'2002-02-01 01:02:03' < (ts + INTERVAL'1-2')) and (TIMESTAMP'2002-04-01 01:02:03' > (ts + INTERVAL'1-2')) and ((ts + INTERVAL'1-2') > TIMESTAMP'2002-02-01 01:02:03') and ((ts + INTERVAL'1-2') < TIMESTAMP'2002-04-01 01:02:03') and (ts < (ts + INTERVAL'1-0')) and (ts > (ts - INTERVAL'1-0')) and (TIMESTAMP'2002-03-01 01:02:03' = (ts + INTERVAL'1-2')) and TIMESTAMP'2002-03-01 01:02:03' BETWEEN (ts + INTERVAL'1-2') AND (ts + INTERVAL'1-2') and (TIMESTA [...]
+ filterExpr: ((TIMESTAMP'2002-02-01 01:02:03' < (ts + INTERVAL'1-2')) and (TIMESTAMP'2002-04-01 01:02:03' > (ts + INTERVAL'1-2')) and ((ts + INTERVAL'1-2') > TIMESTAMP'2002-02-01 01:02:03') and ((ts + INTERVAL'1-2') < TIMESTAMP'2002-04-01 01:02:03') and (ts < (ts + INTERVAL'1-0')) and (ts > (ts - INTERVAL'1-0')) and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and TIMESTAMP'2002-03-01 01:02:03' BETWEEN (ts + INTERVAL'1-2') AND (ts + INTERVAL'1-2') and (TIMESTA [...]
Statistics: Num rows: 2 Data size: 80 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -1548,8 +1548,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2002-02-01 01:02:03, col 7:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, val 1-2) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2002-04-01 01:02:03, col 8:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, val 1-2) -> 8:timestamp), FilterTimestampColGreaterTimestampScalar(col 9:timestamp, val 2002 [...]
- predicate: ((TIMESTAMP'2002-02-01 01:02:03' < (ts + INTERVAL'1-2')) and (TIMESTAMP'2002-04-01 01:02:03' > (ts + INTERVAL'1-2')) and ((ts + INTERVAL'1-2') > TIMESTAMP'2002-02-01 01:02:03') and ((ts + INTERVAL'1-2') < TIMESTAMP'2002-04-01 01:02:03') and (ts < (ts + INTERVAL'1-0')) and (ts > (ts - INTERVAL'1-0')) and (TIMESTAMP'2002-03-01 01:02:03' = (ts + INTERVAL'1-2')) and TIMESTAMP'2002-03-01 01:02:03' BETWEEN (ts + INTERVAL'1-2') AND (ts + INTERVAL'1-2') and (TIMEST [...]
+ predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2002-02-01 01:02:03, col 7:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, val 1-2) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2002-04-01 01:02:03, col 8:timestamp)(children: TimestampColAddIntervalYearMonthScalar(col 0:timestamp, val 1-2) -> 8:timestamp), FilterTimestampColGreaterTimestampScalar(col 9:timestamp, val 2002 [...]
+ predicate: ((TIMESTAMP'2002-02-01 01:02:03' < (ts + INTERVAL'1-2')) and (TIMESTAMP'2002-04-01 01:02:03' > (ts + INTERVAL'1-2')) and ((ts + INTERVAL'1-2') > TIMESTAMP'2002-02-01 01:02:03') and ((ts + INTERVAL'1-2') < TIMESTAMP'2002-04-01 01:02:03') and (ts < (ts + INTERVAL'1-0')) and (ts > (ts - INTERVAL'1-0')) and ((ts + INTERVAL'1-2') = TIMESTAMP'2002-03-01 01:02:03') and TIMESTAMP'2002-03-01 01:02:03' BETWEEN (ts + INTERVAL'1-2') AND (ts + INTERVAL'1-2') and (TIMEST [...]
Statistics: Num rows: 1 Data size: 40 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: ts (type: timestamp)
@@ -1740,7 +1740,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: vector_interval_2
- filterExpr: ((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: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 > (dt - INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' = (dt + INTERVAL'0 01:0 [...]
+ filterExpr: ((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: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 > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 01:02:03.000000000') = TIMESTAMP'2001 [...]
Statistics: Num rows: 2 Data size: 192 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -1748,8 +1748,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 7:timestamp)(children: DateColAddIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 8:timestamp)(children: DateColSubtractIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 8:timestamp), FilterTimestampColGreaterTimestampScalar(col 9:time [...]
- predicate: ((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: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 > (dt - INTERVAL'0 01:02:04.000000000')) and (TIMESTAMP'2001-01-01 01:02:03' = (dt + INTERVAL'0 01: [...]
+ predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 7:timestamp)(children: DateColAddIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 8:timestamp)(children: DateColSubtractIntervalDayTimeScalar(col 1:date, val 0 01:02:04.000000000) -> 8:timestamp), FilterTimestampColGreaterTimestampScalar(col 9:time [...]
+ predicate: ((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: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 > (dt - INTERVAL'0 01:02:04.000000000')) and ((dt + INTERVAL'0 01:02:03.000000000') = TIMESTAMP'200 [...]
Statistics: Num rows: 1 Data size: 96 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
expressions: ts (type: timestamp)
@@ -1940,7 +1940,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 (TIMESTAMP'2001-01-01 01:02:03' = (ts + INTERVAL'0 00:0 [...]
+ 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 [...]
Statistics: Num rows: 2 Data size: 80 Basic stats: COMPLETE Column stats: COMPLETE
TableScan Vectorization:
native: true
@@ -1948,8 +1948,8 @@ STAGE PLANS:
Filter Vectorization:
className: VectorFilterOperator
native: true
- predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 7:timestamp)(children: TimestampColAddIntervalDayTimeScalar(col 0:timestamp, val 1 00:00:00.000000000) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 8:timestamp)(children: TimestampColSubtractIntervalDayTimeScalar(col 0:timestamp, val 1 00:00:00.000000000) -> 8: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'0 00: [...]
+ predicateExpression: FilterExprAndExpr(children: FilterTimestampScalarLessTimestampColumn(val 2001-01-01 01:02:03, col 7:timestamp)(children: TimestampColAddIntervalDayTimeScalar(col 0:timestamp, val 1 00:00:00.000000000) -> 7:timestamp), FilterTimestampScalarGreaterTimestampColumn(val 2001-01-01 01:02:03, col 8:timestamp)(children: TimestampColSubtractIntervalDayTimeScalar(col 0:timestamp, val 1 00:00:00.000000000) -> 8: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 [...]
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/perf/tez/cbo_query74.q.out b/ql/src/test/results/clientpositive/perf/tez/cbo_query74.q.out
index d14c39a..47217f3 100644
--- a/ql/src/test/results/clientpositive/perf/tez/cbo_query74.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/cbo_query74.q.out
@@ -143,7 +143,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($3))])
HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($6, 1999), IN($6, 1998, 1999), IS NOT NULL($0))])
+ HiveFilter(condition=[AND(=($6, 1999), IS NOT NULL($0))])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveJoin(condition=[=($2, $4)], joinType=[inner], algorithm=[none], cost=[not available])
HiveJoin(condition=[=($2, $0)], joinType=[inner], algorithm=[none], cost=[not available])
@@ -158,7 +158,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveFilter(condition=[AND(IS NOT NULL($4), IS NOT NULL($0))])
HiveTableScan(table=[[default, web_sales]], table:alias=[web_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($6, 1999), IN($6, 1998, 1999), IS NOT NULL($0))])
+ HiveFilter(condition=[AND(=($6, 1999), IS NOT NULL($0))])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject($f0=[$0], $f4=[$3])
HiveFilter(condition=[>($3, 0)])
@@ -172,7 +172,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($3))])
HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($6, 1998), IN($6, 1998, 1999), IS NOT NULL($0))])
+ HiveFilter(condition=[AND(=($6, 1998), IS NOT NULL($0))])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject(customer_id=[$0], year_total=[$3], CAST=[CAST(IS NOT NULL($3)):BOOLEAN])
HiveFilter(condition=[>($3, 0)])
@@ -186,6 +186,6 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveFilter(condition=[AND(IS NOT NULL($4), IS NOT NULL($0))])
HiveTableScan(table=[[default, web_sales]], table:alias=[web_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($6, 1998), IN($6, 1998, 1999), IS NOT NULL($0))])
+ HiveFilter(condition=[AND(=($6, 1998), IS NOT NULL($0))])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query74.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query74.q.out
index 2574a76..0eb4b7c 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query74.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/cbo_query74.q.out
@@ -147,7 +147,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveProject(ss_sold_date_sk=[$0], ss_customer_sk=[$3], ss_net_paid=[$20])
HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($1, 1999), IN($1, 1998, 1999))])
+ HiveFilter(condition=[=($1, 1999)])
HiveProject(d_date_sk=[$0], d_year=[$6])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject($f0=[$0], $f1=[$1])
@@ -162,7 +162,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveProject(ss_sold_date_sk=[$0], ss_customer_sk=[$3], ss_net_paid=[$20])
HiveTableScan(table=[[default, store_sales]], table:alias=[store_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($1, 1998), IN($1, 1998, 1999))])
+ HiveFilter(condition=[=($1, 1998)])
HiveProject(d_date_sk=[$0], d_year=[$6])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject(c_customer_id=[$0], $f1=[$1])
@@ -176,7 +176,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveProject(ws_sold_date_sk=[$0], ws_bill_customer_sk=[$4], ws_net_paid=[$29])
HiveTableScan(table=[[default, web_sales]], table:alias=[web_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($1, 1999), IN($1, 1998, 1999))])
+ HiveFilter(condition=[=($1, 1999)])
HiveProject(d_date_sk=[$0], d_year=[$6])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject(customer_id=[$0], year_total=[$1], CAST=[CAST(IS NOT NULL($1)):BOOLEAN])
@@ -191,7 +191,7 @@ HiveSortLimit(sort0=[$2], sort1=[$0], sort2=[$1], dir0=[ASC], dir1=[ASC], dir2=[
HiveProject(ws_sold_date_sk=[$0], ws_bill_customer_sk=[$4], ws_net_paid=[$29])
HiveTableScan(table=[[default, web_sales]], table:alias=[web_sales])
HiveProject(d_date_sk=[$0])
- HiveFilter(condition=[AND(=($1, 1998), IN($1, 1998, 1999))])
+ HiveFilter(condition=[=($1, 1998)])
HiveProject(d_date_sk=[$0], d_year=[$6])
HiveTableScan(table=[[default, date_dim]], table:alias=[date_dim])
HiveProject(c_customer_id=[$1], c_first_name=[$8], c_last_name=[$9])
diff --git a/ql/src/test/results/clientpositive/perf/tez/constraints/query74.q.out b/ql/src/test/results/clientpositive/perf/tez/constraints/query74.q.out
index 4c89bb3..c9f758b 100644
--- a/ql/src/test/results/clientpositive/perf/tez/constraints/query74.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/constraints/query74.q.out
@@ -224,7 +224,7 @@ Stage-0
Select Operator [SEL_339] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_335] (rows=652 width=8)
- predicate:((_col1 = 1998) and (_col1) IN (1998, 1999))
+ predicate:(_col1 = 1998)
Select Operator [SEL_331] (rows=73049 width=8)
Output:["_col0","_col1"]
TableScan [TS_4] (rows=73049 width=8)
@@ -283,7 +283,7 @@ Stage-0
Select Operator [SEL_338] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_334] (rows=652 width=8)
- predicate:((_col1 = 1999) and (_col1) IN (1998, 1999))
+ predicate:(_col1 = 1999)
Please refer to the previous Select Operator [SEL_331]
<-Map 26 [SIMPLE_EDGE] vectorized
SHUFFLE [RS_385]
@@ -341,7 +341,7 @@ Stage-0
Select Operator [SEL_337] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_333] (rows=652 width=8)
- predicate:((_col1 = 1998) and (_col1) IN (1998, 1999))
+ predicate:(_col1 = 1998)
Please refer to the previous Select Operator [SEL_331]
<-Map 25 [SIMPLE_EDGE] vectorized
SHUFFLE [RS_376]
@@ -392,7 +392,7 @@ Stage-0
Select Operator [SEL_336] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_332] (rows=652 width=8)
- predicate:((_col1 = 1999) and (_col1) IN (1998, 1999))
+ predicate:(_col1 = 1999)
Please refer to the previous Select Operator [SEL_331]
<-Map 1 [SIMPLE_EDGE] vectorized
SHUFFLE [RS_361]
diff --git a/ql/src/test/results/clientpositive/perf/tez/query74.q.out b/ql/src/test/results/clientpositive/perf/tez/query74.q.out
index 831ade0..2d1ff69 100644
--- a/ql/src/test/results/clientpositive/perf/tez/query74.q.out
+++ b/ql/src/test/results/clientpositive/perf/tez/query74.q.out
@@ -208,7 +208,7 @@ Stage-0
Select Operator [SEL_292] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_289] (rows=652 width=8)
- predicate:((d_year = 1999) and (d_year) IN (1998, 1999) and d_date_sk is not null)
+ predicate:((d_year = 1999) and d_date_sk is not null)
TableScan [TS_65] (rows=73049 width=8)
default@date_dim,date_dim,Tbl:COMPLETE,Col:COMPLETE,Output:["d_date_sk","d_year"]
<-Map 17 [SIMPLE_EDGE] vectorized
@@ -269,7 +269,7 @@ Stage-0
Select Operator [SEL_294] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_291] (rows=652 width=8)
- predicate:((d_year = 1998) and (d_year) IN (1998, 1999) and d_date_sk is not null)
+ predicate:((d_year = 1998) and d_date_sk is not null)
Please refer to the previous TableScan [TS_65]
<-Map 13 [SIMPLE_EDGE] vectorized
SHUFFLE [RS_339]
@@ -329,7 +329,7 @@ Stage-0
Select Operator [SEL_293] (rows=652 width=4)
Output:["_col0"]
Filter Operator [FIL_290] (rows=652 width=8)
- predicate:((d_year = 1998) and (d_year) IN (1998, 1999) and d_date_sk is not null)
+ predicate:((d_year = 1998) and d_date_sk is not null)
Please refer to the previous TableScan [TS_65]
<-Map 9 [SIMPLE_EDGE] vectorized
SHUFFLE [RS_329]