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

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

commit 3f550c3f28d75d0f75b5815a22395dbecf992f03
Author: jinxing <[email protected]>
AuthorDate: Fri Jul 5 10:55:03 2019 +0800

    [CALCITE-3167] Make equals and hashCode methods final in AbstractRelNode, 
and remove overriding methods in EnumerableTableScan (Jin Xing)
    
    Close apache/calcite#1294
---
 .../adapter/enumerable/EnumerableTableScan.java    | 10 ----------
 .../calcite/plan/RelOptMaterializations.java       |  3 +++
 .../org/apache/calcite/rel/AbstractRelNode.java    | 22 ++++++++++++++++++++++
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScan.java
 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScan.java
index 18dcee1..dfd7ac3 100644
--- 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScan.java
+++ 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScan.java
@@ -83,16 +83,6 @@ public class EnumerableTableScan
     return new EnumerableTableScan(cluster, traitSet, relOptTable, 
elementType);
   }
 
-  @Override public boolean equals(Object obj) {
-    return obj == this
-        || obj instanceof EnumerableTableScan
-        && table.equals(((EnumerableTableScan) obj).table);
-  }
-
-  @Override public int hashCode() {
-    return table.hashCode();
-  }
-
   /** Returns whether EnumerableTableScan can generate code to handle a
    * particular variant of the Table SPI. */
   public static boolean canHandle(Table table) {
diff --git 
a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java 
b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
index e89b31f..2aa8afd 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
@@ -189,6 +189,9 @@ public abstract class RelOptMaterializations {
             .addRuleInstance(ProjectRemoveRule.INSTANCE)
             .build();
 
+    // We must use the same HEP planner for the two optimizations below.
+    // Thus different nodes with the same digest will share the same vertex in
+    // the plan graph. This is important for the matching process.
     final HepPlanner hepPlanner = new HepPlanner(program);
     hepPlanner.setRoot(target);
     target = hepPlanner.findBestExp();
diff --git a/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java 
b/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java
index f4899a1..d957ea2 100644
--- a/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java
+++ b/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java
@@ -390,6 +390,28 @@ public abstract class AbstractRelNode implements RelNode {
   }
 
   /**
+   * {@inheritDoc}
+   *
+   * <p>This method (and {@link #hashCode} is intentionally final. We do not 
want
+   * sub-classes of {@link RelNode} to redefine identity. Various algorithms
+   * (e.g. visitors, planner) can define the identity as meets their needs.
+   */
+  @Override public final boolean equals(Object obj) {
+    return super.equals(obj);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method (and {@link #equals} is intentionally final. We do not want
+   * sub-classes of {@link RelNode} to redefine identity. Various algorithms
+   * (e.g. visitors, planner) can define the identity as meets their needs.
+   */
+  @Override public final int hashCode() {
+    return super.hashCode();
+  }
+
+  /**
    * A writer object used exclusively for computing the digest of a RelNode.
    *
    * <p>The writer is meant to be used only for computing a single digest and 
then thrown away.

Reply via email to