You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by da...@apache.org on 2020/02/14 01:13:12 UTC
[calcite] branch master updated: [CALCITE-3793] AssertionError
throws for planner digest cache key when the rel type is not struct
This is an automated email from the ASF dual-hosted git repository.
danny0405 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 8a89028 [CALCITE-3793] AssertionError throws for planner digest cache key when the rel type is not struct
8a89028 is described below
commit 8a890281761d4cf3073566ba1a7fcb483af4c5b0
Author: yuzhao.cyz <yu...@gmail.com>
AuthorDate: Thu Feb 13 15:20:04 2020 +0800
[CALCITE-3793] AssertionError throws for planner digest cache key when the rel type is not struct
Apache Flink and Apache Druid all the customize type for rel node which
is not a strict type.
---
.../org/apache/calcite/plan/AbstractRelOptPlanner.java | 16 ++++++++++++++++
.../java/org/apache/calcite/plan/hep/HepPlanner.java | 4 ----
.../org/apache/calcite/plan/volcano/VolcanoPlanner.java | 8 +-------
3 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java b/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
index 3804023..25c7c51 100644
--- a/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
@@ -20,13 +20,16 @@ import org.apache.calcite.plan.volcano.RelSubset;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexExecutor;
import org.apache.calcite.util.CancelFlag;
+import org.apache.calcite.util.Pair;
import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -433,4 +436,17 @@ public abstract class AbstractRelOptPlanner implements RelOptPlanner {
return clazz.isAssignableFrom(c);
});
}
+
+ /** Computes the key for relational expression digest cache. */
+ protected static Pair<String, List<RelDataType>> key(RelNode rel) {
+ return key(rel.getDigest(), rel.getRowType());
+ }
+
+ /** Computes the key for relational expression digest cache. */
+ protected static Pair<String, List<RelDataType>> key(String digest, RelDataType relType) {
+ final List<RelDataType> v = relType.isStruct()
+ ? Pair.right(relType.getFieldList())
+ : Collections.singletonList(relType);
+ return Pair.of(digest, v);
+ }
}
diff --git a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
index a018b01..3f9dd35 100644
--- a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
@@ -920,10 +920,6 @@ public class HepPlanner extends AbstractRelOptPlanner {
false);
}
- private static Pair<String, List<RelDataType>> key(RelNode rel) {
- return Pair.of(rel.getDigest(), Pair.right(rel.getRowType().getFieldList()));
- }
-
private RelNode buildFinalPlan(HepRelVertex vertex) {
RelNode rel = vertex.getCurrentRel();
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
index 07bc412..5b5df67 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
@@ -1128,11 +1128,6 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
}
}
- /** Computes the key for {@link #mapDigestToRel}. */
- private static Pair<String, List<RelDataType>> key(RelNode rel) {
- return Pair.of(rel.getDigest(), Pair.right(rel.getRowType().getFieldList()));
- }
-
public String toDot() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
@@ -1375,8 +1370,7 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
void rename(RelNode rel) {
final String oldDigest = rel.getDigest();
if (fixUpInputs(rel)) {
- final Pair<String, List<RelDataType>> oldKey =
- Pair.of(oldDigest, Pair.right(rel.getRowType().getFieldList()));
+ final Pair<String, List<RelDataType>> oldKey = key(oldDigest, rel.getRowType());
final RelNode removed = mapDigestToRel.remove(oldKey);
assert removed == rel;
final String newDigest = rel.recomputeDigest();