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;