diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java index f05c5ec..1db2453 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/HivePushFilterPastJoinRule.java @@ -29,7 +29,7 @@ public abstract class HivePushFilterPastJoinRule extends RelOptRule { public static final HivePushFilterPastJoinRule FILTER_ON_JOIN = new HivePushFilterPastJoinRule( - operand(HiveFilterRel.class, operand(HiveJoinRel.class, any())), + operand(FilterRelBase.class, operand(HiveJoinRel.class, any())), "HivePushFilterPastJoinRule:filter", true) { @Override public void onMatch(RelOptRuleCall call) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 233cb87..72f999a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -11893,8 +11893,8 @@ public RelNode applyPreCBOTransforms(RelNode basePlan, // Partition Pruning; otherwise Expression evaluation may try to execute // corelated sub query. basePlan = hepPlan(basePlan, mdProvider, - HivePushFilterPastJoinRule.FILTER_ON_JOIN, HivePushFilterPastJoinRule.JOIN, + HivePushFilterPastJoinRule.FILTER_ON_JOIN, new HivePartitionPrunerRule(SemanticAnalyzer.this.conf)); HiveRelFieldTrimmer fieldTrimmer = new HiveRelFieldTrimmer(null); diff --git a/ql/src/test/queries/clientpositive/cbo_correctness.q b/ql/src/test/queries/clientpositive/cbo_correctness.q index 72a65e5..c3fc211 100644 --- a/ql/src/test/queries/clientpositive/cbo_correctness.q +++ b/ql/src/test/queries/clientpositive/cbo_correctness.q @@ -205,9 +205,9 @@ with q1 as ( select c_int from q2 where c_boolean = false), q2 as ( select c_int,c_boolean from v1 where value = '1') select sum(c_int) from (select c_int from q1) a; ---with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), ---q2 as ( select c_int,c_boolean from v1 where value = '1') ---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int; +with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), +q2 as ( select c_int,c_boolean from v1 where value = '1') +select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int; drop view v1; diff --git a/ql/src/test/results/clientpositive/cbo_correctness.q.out b/ql/src/test/results/clientpositive/cbo_correctness.q.out index 2fd47a6..35e253e 100644 --- a/ql/src/test/results/clientpositive/cbo_correctness.q.out +++ b/ql/src/test/results/clientpositive/cbo_correctness.q.out @@ -15963,21 +15963,30 @@ POSTHOOK: Input: default@t1@dt=2014 POSTHOOK: Input: default@v1 #### A masked pattern was here #### 2 -PREHOOK: query: --with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), ---q2 as ( select c_int,c_boolean from v1 where value = '1') ---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int; - - -drop view v1 +PREHOOK: query: with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), +q2 as ( select c_int,c_boolean from v1 where value = '1') +select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +PREHOOK: Input: default@t1@dt=2014 +PREHOOK: Input: default@v1 +PREHOOK: Input: default@v4 +#### A masked pattern was here #### +POSTHOOK: query: with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), +q2 as ( select c_int,c_boolean from v1 where value = '1') +select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +POSTHOOK: Input: default@t1@dt=2014 +POSTHOOK: Input: default@v1 +POSTHOOK: Input: default@v4 +#### A masked pattern was here #### +31104 +PREHOOK: query: drop view v1 PREHOOK: type: DROPVIEW PREHOOK: Input: default@v1 PREHOOK: Output: default@v1 -POSTHOOK: query: --with q1 as ( select t1.c_int c_int from q2 join t1 where q2.c_int = t1.c_int), ---q2 as ( select c_int,c_boolean from v1 where value = '1') ---select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int; - - -drop view v1 +POSTHOOK: query: drop view v1 POSTHOOK: type: DROPVIEW POSTHOOK: Input: default@v1 POSTHOOK: Output: default@v1