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;