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

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

commit 4ae2dae62398f319f1daa0cea77edd88b6c8f004
Author: Stamatis Zampetakis <zabe...@gmail.com>
AuthorDate: Mon Oct 17 15:24:34 2022 +0200

    HIVE-26642: Replace HiveFilterMergeRule with Calcite's built-in 
implementation (Stamatis Zampetakis reviewed by Krisztian Kasa)
    
    Closes #3678
---
 .../hadoop/hive/ql/optimizer/calcite/Bug.java      |  6 ---
 .../calcite/rules/HiveFilterMergeRule.java         | 59 ----------------------
 .../hadoop/hive/ql/parse/CalcitePlanner.java       |  8 ++-
 3 files changed, 6 insertions(+), 67 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java
index dc984861e3f..32f8cff74b9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/Bug.java
@@ -34,12 +34,6 @@ public final class Bug {
    * Whether <a 
href="https://issues.apache.org/jira/browse/CALCITE-1851";>CALCITE-1851</a> is 
fixed.
    */
   public static final boolean CALCITE_1851_FIXED = false;
-  
-  /**
-   * Whether <a href="https://issues.apache.org/jira/browse/CALCITE-3982";>issue
-   * CALCITE-3982</a> is fixed.
-   */
-  public static final boolean CALCITE_3982_FIXED = false;
 
   /**
    * Whether <a href="https://issues.apache.org/jira/browse/CALCITE-4166";>issue
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java
deleted file mode 100644
index 4f820af7563..00000000000
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveFilterMergeRule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hive.ql.optimizer.calcite.rules;
-
-import org.apache.calcite.plan.RelOptRule;
-import org.apache.calcite.plan.RelOptRuleCall;
-import org.apache.calcite.tools.RelBuilder;
-import org.apache.hadoop.hive.ql.optimizer.calcite.Bug;
-import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories;
-import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveFilter;
-
-/**
- * Mostly a copy of {@link org.apache.calcite.rel.rules.FilterMergeRule}.
- * However, it relies in relBuilder to create the new condition and thus
- * simplifies/flattens the predicate before creating the new filter.
- */
-public class HiveFilterMergeRule extends RelOptRule {
-
-  public static final HiveFilterMergeRule INSTANCE =
-      new HiveFilterMergeRule();
-
-  /** Private constructor. */
-  private HiveFilterMergeRule() {
-    super(operand(HiveFilter.class,
-        operand(HiveFilter.class, any())),
-        HiveRelFactories.HIVE_BUILDER, null);
-    if (Bug.CALCITE_3982_FIXED) {
-      throw new AssertionError("Remove logic in HiveFilterMergeRule when 
[CALCITE-3982] "
-          + "has been fixed and use directly Calcite's FilterMergeRule 
instead.");
-    }
-  }
-
-  //~ Methods ----------------------------------------------------------------
-
-  public void onMatch(RelOptRuleCall call) {
-    final HiveFilter topFilter = call.rel(0);
-    final HiveFilter bottomFilter = call.rel(1);
-
-    final RelBuilder relBuilder = call.builder();
-    relBuilder.push(bottomFilter.getInput())
-        .filter(bottomFilter.getCondition(), topFilter.getCondition());
-
-    call.transformTo(relBuilder.build());
-  }
-}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index 0683586e86c..5a6d256cb20 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -90,6 +90,8 @@ import 
org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
 import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
 import org.apache.calcite.rel.metadata.RelMetadataProvider;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.rules.CoreRules;
+import org.apache.calcite.rel.rules.FilterMergeRule;
 import org.apache.calcite.rel.rules.JoinToMultiJoinRule;
 import org.apache.calcite.rel.rules.LoptOptimizeJoinRule;
 import org.apache.calcite.rel.rules.ProjectMergeRule;
@@ -217,7 +219,6 @@ import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveExpandDistinctAggre
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFieldTrimmerRule;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterAggregateTransposeRule;
 import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterJoinRule;
-import org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterMergeRule;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterProjectTSTransposeRule;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterProjectTransposeRule;
 import 
org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveFilterSetOpTransposeRule;
@@ -1847,7 +1848,10 @@ public class CalcitePlanner extends SemanticAnalyzer {
       rules.add(HiveFilterJoinRule.FILTER_ON_JOIN);
       rules.add(new HiveFilterAggregateTransposeRule(Filter.class, 
HiveRelFactories.HIVE_BUILDER,
           Aggregate.class));
-      rules.add(HiveFilterMergeRule.INSTANCE);
+      rules.add(FilterMergeRule.Config.DEFAULT
+          .withOperandFor(HiveFilter.class)
+          .withRelBuilderFactory(HiveRelFactories.HIVE_BUILDER)
+          .toRule());
       if (conf.getBoolVar(HiveConf.ConfVars.HIVE_OPTIMIZE_REDUCE_WITH_STATS)) {
         rules.add(HiveReduceExpressionsWithStatsRule.INSTANCE);
       }

Reply via email to