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

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


The following commit(s) were added to refs/heads/master by this push:
     new bf0ca49  [CALCITE-3447] MutableScans with the same qualified name are 
not equivalent (Dai Min, Jin Xing)
bf0ca49 is described below

commit bf0ca495a4690f9f66374e9e67af8760c09719c7
Author: jinxing64 <[email protected]>
AuthorDate: Sun Apr 19 20:44:08 2020 +0800

    [CALCITE-3447] MutableScans with the same qualified name are not equivalent 
(Dai Min, Jin Xing)
---
 .../apache/calcite/rel/mutable/MutableScan.java    |  5 ++--
 .../org/apache/calcite/test/MutableRelTest.java    | 34 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/mutable/MutableScan.java 
b/core/src/main/java/org/apache/calcite/rel/mutable/MutableScan.java
index 3e73301..4efc2d1 100644
--- a/core/src/main/java/org/apache/calcite/rel/mutable/MutableScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/mutable/MutableScan.java
@@ -36,11 +36,12 @@ public class MutableScan extends MutableLeafRel {
   @Override public boolean equals(Object obj) {
     return obj == this
         || obj instanceof MutableScan
-        && rel.equals(((MutableScan) obj).rel);
+        && rel.getTable().getQualifiedName().equals(((MutableScan) obj).rel
+            .getTable().getQualifiedName());
   }
 
   @Override public int hashCode() {
-    return rel.hashCode();
+    return rel.getTable().getQualifiedName().hashCode();
   }
 
   @Override public StringBuilder digest(StringBuilder buf) {
diff --git a/core/src/test/java/org/apache/calcite/test/MutableRelTest.java 
b/core/src/test/java/org/apache/calcite/test/MutableRelTest.java
index 89b7f32..7597cfb 100644
--- a/core/src/test/java/org/apache/calcite/test/MutableRelTest.java
+++ b/core/src/test/java/org/apache/calcite/test/MutableRelTest.java
@@ -25,6 +25,7 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.rel.mutable.MutableRel;
 import org.apache.calcite.rel.mutable.MutableRels;
+import org.apache.calcite.rel.mutable.MutableScan;
 import org.apache.calcite.rel.rules.FilterJoinRule;
 import org.apache.calcite.rel.rules.FilterProjectTransposeRule;
 import org.apache.calcite.rel.rules.FilterToCalcRule;
@@ -33,6 +34,7 @@ import org.apache.calcite.rel.rules.ProjectToWindowRule;
 import org.apache.calcite.rel.rules.SemiJoinRule;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.sql2rel.RelDecorrelator;
+import org.apache.calcite.tools.FrameworkConfig;
 import org.apache.calcite.tools.RelBuilder;
 
 import com.google.common.collect.ImmutableList;
@@ -45,6 +47,9 @@ import java.util.List;
 import static org.apache.calcite.plan.RelOptUtil.equal;
 import static org.apache.calcite.util.Litmus.IGNORE;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -221,6 +226,30 @@ class MutableRelTest {
     assertEquals(mutableRel1, mutableRel2);
   }
 
+  /** Verifies equivalence of {@link MutableScan} */
+  @Test public void testMutableScanEquivalence() {
+    final FrameworkConfig config = RelBuilderTest.config().build();
+    final RelBuilder builder = RelBuilder.create(config);
+
+    assertThat(mutableScanOf(builder, "EMP"),
+        equalTo(mutableScanOf(builder, "EMP")));
+    assertThat(mutableScanOf(builder, "EMP").hashCode(),
+        equalTo(mutableScanOf(builder, "EMP").hashCode()));
+
+    assertThat(mutableScanOf(builder, "scott", "EMP"),
+        equalTo(mutableScanOf(builder, "scott", "EMP")));
+    assertThat(mutableScanOf(builder, "scott", "EMP").hashCode(),
+        equalTo(mutableScanOf(builder, "scott", "EMP").hashCode()));
+
+    assertThat(mutableScanOf(builder, "scott", "EMP"),
+        equalTo(mutableScanOf(builder, "EMP")));
+    assertThat(mutableScanOf(builder, "scott", "EMP").hashCode(),
+        equalTo(mutableScanOf(builder, "EMP").hashCode()));
+
+    assertThat(mutableScanOf(builder, "EMP"),
+        not(equalTo(mutableScanOf(builder, "DEPT"))));
+  }
+
   /** Verifies that after conversion to and from a MutableRel, the new
    * RelNode remains identical to the original RelNode. */
   private static void checkConvertMutableRel(String rel, String sql) {
@@ -287,4 +316,9 @@ class MutableRelTest {
     RelNode rel = test.createTester().convertSqlToRel(sql).rel;
     return MutableRels.toMutable(rel);
   }
+
+  private MutableScan mutableScanOf(RelBuilder builder, String... tableNames) {
+    final RelNode scan = builder.scan(tableNames).build();
+    return (MutableScan) MutableRels.toMutable(scan);
+  }
 }

Reply via email to