You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by za...@apache.org on 2021/02/15 09:26:50 UTC
[calcite] branch master updated: [CALCITE-4494] Improve performance
of checking RelNode presence in RelSubset (Igor Lozynskyi)
This is an automated email from the ASF dual-hosted git repository.
zabetak 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 78cc3e3 [CALCITE-4494] Improve performance of checking RelNode presence in RelSubset (Igor Lozynskyi)
78cc3e3 is described below
commit 78cc3e3f739704ec4fa36bee9b465b61a672f873
Author: Igor Lozynskyi <Ig...@logianalytics.com>
AuthorDate: Thu Feb 11 18:46:16 2021 +0200
[CALCITE-4494] Improve performance of checking RelNode presence in RelSubset (Igor Lozynskyi)
Close apache/calcite#2347
---
core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java | 7 +++++++
.../main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java | 5 ++---
.../main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java | 3 ++-
3 files changed, 11 insertions(+), 4 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 7ad29ca..8e4a75e 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
@@ -434,6 +434,13 @@ public class RelSubset extends AbstractRelNode {
}
/**
+ * Returns whether this subset contains the specified relational expression.
+ */
+ public boolean contains(RelNode node) {
+ return set.rels.contains(node) && node.getTraitSet().satisfies(traitSet);
+ }
+
+ /**
* Returns stream of subsets whose traitset satisfies
* current subset's traitset.
*/
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
index 4c84927..c610ca3 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
@@ -200,7 +200,7 @@ public class VolcanoRuleCall extends RelOptRuleCall {
// When rename RelNode via VolcanoPlanner#rename(RelNode rel),
// we may remove rel from its subset: "subset.set.rels.remove(rel)".
// Skip rule match when the rel has been removed from set.
- || (subset != rel && !subset.getRelList().contains(rel))) {
+ || (subset != rel && !subset.contains(rel))) {
LOGGER.debug(
"Rule [{}] not fired because operand #{} ({}) belongs to obsolete set",
getRule(), i, rel);
@@ -391,8 +391,7 @@ public class VolcanoRuleCall extends RelOptRuleCall {
continue;
}
} else {
- List<RelNode> inputRels = input.getRelList();
- if (!inputRels.contains(previous)) {
+ if (!input.contains(previous)) {
continue;
}
}
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
index 89cdd94..e12d300 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
@@ -846,8 +846,9 @@ public class RelMdPredicates
for (int j = 0, i = fields.nextSetBit(0); i >= 0; i = fields
.nextSetBit(i + 1), j++) {
columns[j] = i;
+ int fieldIndex = i;
columnSets[j] = requireNonNull(equivalence.get(i),
- "equivalence.get(i) is null for " + i + ", " + equivalence);
+ () -> "equivalence.get(i) is null for " + fieldIndex + ", " + equivalence);
iterationIdx[j] = 0;
}
firstCall = true;