This is an automated email from the ASF dual-hosted git repository.
hyuan 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 7ab6435 [CALCITE-4105] Replace Pair with Flat2List in RelDigestWriter
7ab6435 is described below
commit 7ab643565a695cd46b6013392874c250fc0cb5a0
Author: Haisheng Yuan <[email protected]>
AuthorDate: Fri Jul 3 15:51:31 2020 -0500
[CALCITE-4105] Replace Pair with Flat2List in RelDigestWriter
---
.../org/apache/calcite/plan/volcano/RelSubset.java | 8 +++++++
.../org/apache/calcite/rel/AbstractRelNode.java | 27 ++++++++++++++--------
.../java/org/apache/calcite/rel/core/Filter.java | 4 ++++
.../java/org/apache/calcite/rel/core/Join.java | 4 ++++
.../java/org/apache/calcite/rel/core/Project.java | 4 ++++
.../main/java/org/apache/calcite/rex/RexCall.java | 1 -
6 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
index f77b5c7..afecdce 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
@@ -240,6 +240,14 @@ public class RelSubset extends AbstractRelNode {
pw.done(input);
}
+ @Override protected boolean digestEquals(Object obj) {
+ return this == obj;
+ }
+
+ @Override protected int digestHash() {
+ return this.hashCode();
+ }
+
@Override protected RelDataType deriveRowType() {
return set.rel.getRowType();
}
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 ce71993..b55c90d 100644
--- a/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java
+++ b/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java
@@ -28,12 +28,14 @@ import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.core.CorrelationId;
import org.apache.calcite.rel.hint.Hintable;
+import org.apache.calcite.rel.hint.RelHint;
import org.apache.calcite.rel.metadata.Metadata;
import org.apache.calcite.rel.metadata.MetadataFactory;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
+import org.apache.calcite.runtime.FlatLists;
import org.apache.calcite.sql.SqlExplainLevel;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.Litmus;
@@ -405,6 +407,7 @@ public abstract class AbstractRelNode implements RelNode {
* @return Whether the 2 RelNodes are equivalent or have the same digest.
* @see #digestHash()
*/
+ @API(since = "1.24", status = API.Status.EXPERIMENTAL)
protected boolean digestEquals(Object obj) {
if (this == obj) {
return true;
@@ -423,17 +426,19 @@ public abstract class AbstractRelNode implements RelNode {
*
* @see #digestEquals(Object)
*/
+ @API(since = "1.24", status = API.Status.EXPERIMENTAL)
protected int digestHash() {
return Objects.hash(getTraitSet(), getDigestItems());
}
- private List<Pair<String, Object>> getDigestItems() {
+ private List<List<Object>> getDigestItems() {
RelDigestWriter rdw = new RelDigestWriter();
explainTerms(rdw);
if (this instanceof Hintable) {
- rdw.item("hints", ((Hintable) this).getHints());
+ List<RelHint> hints = ((Hintable) this).getHints();
+ rdw.itemIf("hints", hints, !hints.isEmpty());
}
- return rdw.values;
+ return rdw.attrs;
}
private class InnerRelDigest implements RelDigest {
@@ -485,7 +490,7 @@ public abstract class AbstractRelNode implements RelNode {
*/
private static final class RelDigestWriter implements RelWriter {
- private final List<Pair<String, Object>> values = new ArrayList<>();
+ private final List<List<Object>> attrs = new ArrayList<>();
String digest = null;
@@ -503,7 +508,7 @@ public abstract class AbstractRelNode implements RelNode {
// convert it to String to keep the same behaviour.
value = "" + value;
}
- values.add(Pair.of(term, value));
+ attrs.add(FlatLists.of(term, value));
return this;
}
@@ -514,19 +519,21 @@ public abstract class AbstractRelNode implements RelNode {
sb.append(node.getTraitSet());
sb.append('(');
int j = 0;
- for (Pair<String, Object> value : values) {
+ for (List<Object> attr : attrs) {
+ String key = (String) attr.get(0);
+ Object value = attr.get(1);
if (j++ > 0) {
sb.append(',');
}
- sb.append(value.left);
+ sb.append(key);
sb.append('=');
- if (value.right instanceof RelNode) {
- RelNode input = (RelNode) value.right;
+ if (value instanceof RelNode) {
+ RelNode input = (RelNode) value;
sb.append(input.getRelTypeName());
sb.append('#');
sb.append(input.getId());
} else {
- sb.append(value.right);
+ sb.append(value);
}
}
sb.append(')');
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Filter.java
b/core/src/main/java/org/apache/calcite/rel/core/Filter.java
index 0efea06..64898f6 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Filter.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Filter.java
@@ -36,6 +36,8 @@ import org.apache.calcite.util.Litmus;
import com.google.common.collect.ImmutableList;
+import org.apiguardian.api.API;
+
import java.util.List;
import java.util.Objects;
@@ -154,6 +156,7 @@ public abstract class Filter extends SingleRel {
.item("condition", condition);
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected boolean digestEquals0(Object obj) {
if (this == obj) {
return true;
@@ -168,6 +171,7 @@ public abstract class Filter extends SingleRel {
&& getRowType().equalsSansFieldNames(o.getRowType());
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected int digestHash0() {
return Objects.hash(traitSet, input, condition);
}
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Join.java
b/core/src/main/java/org/apache/calcite/rel/core/Join.java
index b8f6c13..2472f0c 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Join.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Join.java
@@ -41,6 +41,8 @@ import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import org.apiguardian.api.API;
+
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -233,6 +235,7 @@ public abstract class Join extends BiRel implements
Hintable {
!getSystemFieldList().isEmpty());
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected boolean digestEquals0(Object obj) {
if (this == obj) {
return true;
@@ -249,6 +252,7 @@ public abstract class Join extends BiRel implements
Hintable {
&& getRowType().equalsSansFieldNames(o.getRowType());
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected int digestHash0() {
return Objects.hash(traitSet, left, right,
condition, joinType, hints);
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Project.java
b/core/src/main/java/org/apache/calcite/rel/core/Project.java
index 99083c0..841d823 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Project.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Project.java
@@ -46,6 +46,8 @@ import org.apache.calcite.util.mapping.Mappings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
+import org.apiguardian.api.API;
+
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
@@ -289,6 +291,7 @@ public abstract class Project extends SingleRel implements
Hintable {
return pw;
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected boolean digestEquals0(Object obj) {
if (this == obj) {
return true;
@@ -304,6 +307,7 @@ public abstract class Project extends SingleRel implements
Hintable {
&& getRowType().equalsSansFieldNames(o.getRowType());
}
+ @API(since = "1.24", status = API.Status.INTERNAL)
protected int digestHash0() {
return Objects.hash(traitSet, input, exps, hints);
}
diff --git a/core/src/main/java/org/apache/calcite/rex/RexCall.java
b/core/src/main/java/org/apache/calcite/rex/RexCall.java
index 701df4d..e604820 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexCall.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexCall.java
@@ -333,7 +333,6 @@ public class RexCall extends RexNode {
@Override public int hashCode() {
if (hash == 0) {
- assert digest == null;
hash = Objects.hash(op, operands);
}
return hash;