You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2019/10/23 22:32:36 UTC

[calcite] 01/04: Add RelBuilder.fields(ImmutableBitSet)

This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit 331e4feef8d6f98b29b331f62c2c109ea3ba7e00
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Tue Oct 22 13:13:17 2019 -0700

    Add RelBuilder.fields(ImmutableBitSet)
---
 .../calcite/rel/rules/AbstractMaterializedViewRule.java |  4 ++--
 .../apache/calcite/rel/rules/AggregateRemoveRule.java   |  4 ++--
 .../main/java/org/apache/calcite/tools/RelBuilder.java  | 17 +++++++++--------
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java
index 06f33cc..516c159 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java
@@ -1205,7 +1205,7 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule {
         // Aggregate was not inserted but we need to prune columns
         result = relBuilder
             .push(result)
-            .project(relBuilder.fields(groupSet.asList()))
+            .project(relBuilder.fields(groupSet))
             .build();
       }
       if (topProject != null) {
@@ -1490,7 +1490,7 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule {
           // Aggregate was not inserted but we need to prune columns
           result = relBuilder
               .push(result)
-              .project(relBuilder.fields(groupSet.asList()))
+              .project(relBuilder.fields(groupSet))
               .build();
         }
         // We introduce a project on top, as group by columns order is lost
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
index 1cfd621..2ea110f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
@@ -115,13 +115,13 @@ public class AggregateRemoveRule extends RelOptRule {
     final RelNode newInput = convert(input, aggregate.getTraitSet().simplify());
     relBuilder.push(newInput);
     if (!projects.isEmpty()) {
-      projects.addAll(0, relBuilder.fields(aggregate.getGroupSet().asList()));
+      projects.addAll(0, relBuilder.fields(aggregate.getGroupSet()));
       relBuilder.project(projects);
     } else if (newInput.getRowType().getFieldCount()
         > aggregate.getRowType().getFieldCount()) {
       // If aggregate was projecting a subset of columns, and there were no
       // aggregate functions, add a project for the same effect.
-      relBuilder.project(relBuilder.fields(aggregate.getGroupSet().asList()));
+      relBuilder.project(relBuilder.fields(aggregate.getGroupSet()));
     }
     call.transformTo(relBuilder.build());
   }
diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index a8b51a4..a86a96c 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -565,6 +565,11 @@ public class RelBuilder {
     return nodes.build();
   }
 
+  /** Returns references to fields for a given bit set of input ordinals. */
+  public ImmutableList<RexNode> fields(ImmutableBitSet ordinals) {
+    return fields(ordinals.asList());
+  }
+
   /** Returns references to fields identified by name. */
   public ImmutableList<RexNode> fields(Iterable<String> fieldNames) {
     final ImmutableList.Builder<RexNode> builder = ImmutableList.builder();
@@ -818,12 +823,8 @@ public class RelBuilder {
       throw new IllegalArgumentException("out of bounds: " + groupSet);
     }
     Objects.requireNonNull(groupSets);
-    final ImmutableList<RexNode> nodes =
-        fields(ImmutableIntList.of(groupSet.toArray()));
-    final List<ImmutableList<RexNode>> nodeLists =
-        Util.transform(groupSets,
-            bitSet -> fields(ImmutableIntList.of(bitSet.toArray())));
-    return groupKey_(nodes, nodeLists);
+    final ImmutableList<RexNode> nodes = fields(groupSet);
+    return groupKey_(nodes, Util.transform(groupSets, bitSet -> fields(bitSet)));
   }
 
   @Deprecated // to be removed before 2.0
@@ -1571,13 +1572,13 @@ public class RelBuilder {
         final Boolean unique = mq.areColumnsUnique(peek(), groupSet);
         if (unique != null && unique) {
           // Rel is already unique.
-          return project(fields(groupSet.asList()));
+          return project(fields(groupSet));
         }
       }
       final Double maxRowCount = mq.getMaxRowCount(peek());
       if (maxRowCount != null && maxRowCount <= 1D) {
         // If there is at most one row, rel is already unique.
-        return project(fields(groupSet.asList()));
+        return project(fields(groupSet));
       }
     }
     final ImmutableList<ImmutableBitSet> groupSets;