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);
+ }
}