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 315266420ee4113d766af16166a91ac8cb362db0 Author: Julian Hyde <[email protected]> AuthorDate: Thu Jan 9 12:33:42 2020 -0800 Really deprecate RelBuilder.groupKey(ImmutableBitSet, ImmutableList<ImmutableBitSet>) --- .../calcite/rel/logical/ToLogicalConverter.java | 4 +++- .../apache/calcite/rel/mutable/MutableRels.java | 4 +++- .../rel/rules/AggregateCaseToFilterRule.java | 3 ++- .../AggregateExpandDistinctAggregatesRule.java | 10 ++++++--- .../rel/rules/AggregateJoinTransposeRule.java | 3 ++- .../rel/rules/AggregateReduceFunctionsRule.java | 3 ++- .../rel/rules/AggregateUnionTransposeRule.java | 4 +++- .../apache/calcite/sql2rel/RelDecorrelator.java | 24 ++++++++++++++-------- .../apache/calcite/sql2rel/RelFieldTrimmer.java | 3 ++- .../java/org/apache/calcite/tools/RelBuilder.java | 7 ++++--- .../org/apache/calcite/test/RelBuilderTest.java | 17 ++++++++------- .../org/apache/calcite/test/RelOptRulesTest.java | 8 ++++---- .../org/apache/calcite/piglet/PigRelOpVisitor.java | 3 ++- .../calcite/piglet/PigToSqlAggregateRule.java | 6 ++++-- 14 files changed, 63 insertions(+), 36 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/rel/logical/ToLogicalConverter.java b/core/src/main/java/org/apache/calcite/rel/logical/ToLogicalConverter.java index d4f491c..60ff322 100644 --- a/core/src/main/java/org/apache/calcite/rel/logical/ToLogicalConverter.java +++ b/core/src/main/java/org/apache/calcite/rel/logical/ToLogicalConverter.java @@ -39,6 +39,7 @@ import org.apache.calcite.rel.core.Union; import org.apache.calcite.rel.core.Values; import org.apache.calcite.rel.core.Window; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.util.ImmutableBitSet; /** * Shuttle to convert any rel plan to a plan with all logical nodes. @@ -59,7 +60,8 @@ public class ToLogicalConverter extends RelShuttleImpl { final Aggregate agg = (Aggregate) relNode; return relBuilder.push(visit(agg.getInput())) .aggregate( - relBuilder.groupKey(agg.getGroupSet(), agg.groupSets), + relBuilder.groupKey(agg.getGroupSet(), + (Iterable<ImmutableBitSet>) agg.groupSets), agg.getAggCallList()) .build(); } diff --git a/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java b/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java index 70a5fb9..a5e1826 100644 --- a/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java +++ b/core/src/main/java/org/apache/calcite/rel/mutable/MutableRels.java @@ -54,6 +54,7 @@ import org.apache.calcite.rex.RexInputRef; import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexUtil; import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.Util; import org.apache.calcite.util.mapping.Mapping; import org.apache.calcite.util.mapping.MappingType; @@ -213,7 +214,8 @@ public abstract class MutableRels { final MutableAggregate aggregate = (MutableAggregate) node; relBuilder.push(fromMutable(aggregate.input, relBuilder)); relBuilder.aggregate( - relBuilder.groupKey(aggregate.groupSet, aggregate.groupSets), + relBuilder.groupKey(aggregate.groupSet, + (Iterable<ImmutableBitSet>) aggregate.groupSets), aggregate.aggCalls); return relBuilder.build(); case SORT: diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateCaseToFilterRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateCaseToFilterRule.java index 2c64943..d7876cb 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateCaseToFilterRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateCaseToFilterRule.java @@ -36,6 +36,7 @@ import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.tools.RelBuilder; import org.apache.calcite.tools.RelBuilderFactory; +import org.apache.calcite.util.ImmutableBitSet; import com.google.common.collect.ImmutableList; @@ -131,7 +132,7 @@ public class AggregateCaseToFilterRule extends RelOptRule { final RelBuilder.GroupKey groupKey = relBuilder.groupKey(aggregate.getGroupSet(), - aggregate.getGroupSets()); + (Iterable<ImmutableBitSet>) aggregate.getGroupSets()); relBuilder.aggregate(groupKey, newCalls) .convert(aggregate.getRowType(), false); diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java index e7aeb62..1ba326f 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java @@ -247,7 +247,8 @@ public final class AggregateExpandDistinctAggregatesRule extends RelOptRule { int n = 0; if (!newAggCallList.isEmpty()) { final RelBuilder.GroupKey groupKey = - relBuilder.groupKey(groupSet, aggregate.getGroupSets()); + relBuilder.groupKey(groupSet, + (Iterable<ImmutableBitSet>) aggregate.getGroupSets()); relBuilder.aggregate(groupKey, newAggCallList); ++n; } @@ -442,7 +443,9 @@ public final class AggregateExpandDistinctAggregatesRule extends RelOptRule { filters.put(groupSet.e, z + groupSet.i); } - relBuilder.aggregate(relBuilder.groupKey(fullGroupSet, groupSets), + relBuilder.aggregate( + relBuilder.groupKey(fullGroupSet, + (Iterable<ImmutableBitSet>) groupSets), distinctAggCalls); final RelNode distinct = relBuilder.peek(); @@ -491,7 +494,8 @@ public final class AggregateExpandDistinctAggregatesRule extends RelOptRule { relBuilder.aggregate( relBuilder.groupKey( remap(fullGroupSet, aggregate.getGroupSet()), - remap(fullGroupSet, aggregate.getGroupSets())), + (Iterable<ImmutableBitSet>) + remap(fullGroupSet, aggregate.getGroupSets())), newCalls); relBuilder.convert(aggregate.getRowType(), true); call.transformTo(relBuilder.build()); diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateJoinTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateJoinTransposeRule.java index 26ba061..60daf7a 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateJoinTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateJoinTransposeRule.java @@ -374,7 +374,8 @@ public class AggregateJoinTransposeRule extends RelOptRule { if (!aggConvertedToProjects) { relBuilder.aggregate( relBuilder.groupKey(Mappings.apply(mapping, aggregate.getGroupSet()), - Mappings.apply2(mapping, aggregate.getGroupSets())), + (Iterable<ImmutableBitSet>) + Mappings.apply2(mapping, aggregate.getGroupSets())), newAggCalls); } diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java index 201bc45..1fa8023 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java @@ -38,6 +38,7 @@ import org.apache.calcite.sql.type.SqlTypeUtil; import org.apache.calcite.tools.RelBuilder; import org.apache.calcite.tools.RelBuilderFactory; import org.apache.calcite.util.CompositeList; +import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.ImmutableIntList; import org.apache.calcite.util.Util; @@ -833,7 +834,7 @@ public class AggregateReduceFunctionsRule extends RelOptRule { List<AggregateCall> newCalls) { relBuilder.aggregate( relBuilder.groupKey(oldAggregate.getGroupSet(), - oldAggregate.getGroupSets()), + (Iterable<ImmutableBitSet>) oldAggregate.getGroupSets()), newCalls); } diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateUnionTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateUnionTransposeRule.java index 3750892..6619713 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateUnionTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateUnionTransposeRule.java @@ -39,6 +39,7 @@ import org.apache.calcite.sql.fun.SqlSumAggFunction; import org.apache.calcite.sql.fun.SqlSumEmptyIsZeroAggFunction; import org.apache.calcite.tools.RelBuilder; import org.apache.calcite.tools.RelBuilderFactory; +import org.apache.calcite.util.ImmutableBitSet; import com.google.common.collect.ImmutableList; @@ -144,7 +145,8 @@ public class AggregateUnionTransposeRule extends RelOptRule { // create a new union whose children are the aggregates created above relBuilder.union(true, union.getInputs().size()); relBuilder.aggregate( - relBuilder.groupKey(aggRel.getGroupSet(), aggRel.getGroupSets()), + relBuilder.groupKey(aggRel.getGroupSet(), + (Iterable<ImmutableBitSet>) aggRel.getGroupSets()), transformedAggCalls); call.transformTo(relBuilder.build()); } diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java index f64211e..0eae4d6 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java @@ -563,14 +563,16 @@ public class RelDecorrelator implements ReflectiveVisitor { List<AggregateCall> newAggCalls = new ArrayList<>(); List<AggregateCall> oldAggCalls = rel.getAggCallList(); - ImmutableList<ImmutableBitSet> newGroupSets = null; - if (rel.getGroupType() != Aggregate.Group.SIMPLE) { + final Iterable<ImmutableBitSet> newGroupSets; + if (rel.getGroupType() == Aggregate.Group.SIMPLE) { + newGroupSets = null; + } else { final ImmutableBitSet addedGroupSet = ImmutableBitSet.range(oldGroupKeyCount, newGroupKeyCount); - final Iterable<ImmutableBitSet> tmpGroupSets = - Iterables.transform(rel.getGroupSets(), - bitSet -> bitSet.union(addedGroupSet)); - newGroupSets = ImmutableBitSet.ORDERING.immutableSortedCopy(tmpGroupSets); + newGroupSets = + ImmutableBitSet.ORDERING.immutableSortedCopy( + Iterables.transform(rel.getGroupSets(), + bitSet -> bitSet.union(addedGroupSet))); } int oldInputOutputFieldCount = rel.getGroupSet().cardinality(); @@ -604,8 +606,11 @@ public class RelDecorrelator implements ReflectiveVisitor { newInputOutputFieldCount + i); } - relBuilder.push(newProject).aggregate( - relBuilder.groupKey(newGroupSet, newGroupSets), newAggCalls); + relBuilder.push(newProject) + .aggregate(newGroupSets == null + ? relBuilder.groupKey(newGroupSet) + : relBuilder.groupKey(newGroupSet, newGroupSets), + newAggCalls); if (!omittedConstants.isEmpty()) { final List<RexNode> postProjects = new ArrayList<>(relBuilder.fields()); @@ -2366,7 +2371,8 @@ public class RelDecorrelator implements ReflectiveVisitor { ImmutableBitSet groupSet = ImmutableBitSet.range(groupCount); - builder.push(joinOutputProject).aggregate(builder.groupKey(groupSet, null), newAggCalls); + builder.push(joinOutputProject) + .aggregate(builder.groupKey(groupSet), newAggCalls); List<RexNode> newAggOutputProjectList = new ArrayList<>(); for (int i : groupSet) { newAggOutputProjectList.add( diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java b/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java index 52c9dbf..456b4eb 100644 --- a/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java +++ b/core/src/main/java/org/apache/calcite/sql2rel/RelFieldTrimmer.java @@ -885,7 +885,8 @@ public class RelFieldTrimmer implements ReflectiveVisitor { } final RelBuilder.GroupKey groupKey = - relBuilder.groupKey(newGroupSet, newGroupSets); + relBuilder.groupKey(newGroupSet, + (Iterable<ImmutableBitSet>) newGroupSets); relBuilder.aggregate(groupKey, newAggCallList); return result(relBuilder.build(), mapping); 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 075ae62..f31d892 100644 --- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java +++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java @@ -786,7 +786,8 @@ public class RelBuilder { * expressions, only column projections, but is efficient, especially when you * are coming from an existing {@link Aggregate}. */ public GroupKey groupKey(@Nonnull ImmutableBitSet groupSet) { - return groupKey(groupSet, ImmutableList.of(groupSet)); + return groupKey(groupSet, + (Iterable<ImmutableBitSet>) ImmutableList.of(groupSet)); } /** Creates a group key with grouping sets, both identified by field positions @@ -800,8 +801,8 @@ public class RelBuilder { return groupKey_(groupSet, ImmutableList.copyOf(groupSets)); } - /** As {@link #groupKey(ImmutableBitSet, Iterable)}. */ - // deprecated, to be removed before 2.0 + /** @deprecated Use {@link #groupKey(ImmutableBitSet, Iterable)}. */ + @Deprecated // to be removed before 2.0 public GroupKey groupKey(ImmutableBitSet groupSet, ImmutableList<ImmutableBitSet> groupSets) { return groupKey_(groupSet, groupSets == null diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java index 84811cf..e5468dc 100644 --- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java +++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java @@ -1088,8 +1088,9 @@ public class RelBuilderTest { builder.scan("EMP") .aggregate( builder.groupKey(ImmutableBitSet.of(7), - ImmutableList.of(ImmutableBitSet.of(7), - ImmutableBitSet.of())), + (Iterable<ImmutableBitSet>) + ImmutableList.of(ImmutableBitSet.of(7), + ImmutableBitSet.of())), builder.count() .filter( builder.call(SqlStdOperatorTable.GREATER_THAN, @@ -1209,8 +1210,9 @@ public class RelBuilderTest { builder.scan("EMP") .aggregate( builder.groupKey(ImmutableBitSet.of(7), - ImmutableList.of(ImmutableBitSet.of(4), - ImmutableBitSet.of()))) + (Iterable<ImmutableBitSet>) + ImmutableList.of(ImmutableBitSet.of(4), + ImmutableBitSet.of()))) .build(); fail("expected error, got " + root); } catch (IllegalArgumentException e) { @@ -1225,9 +1227,10 @@ public class RelBuilderTest { builder.scan("EMP") .aggregate( builder.groupKey(ImmutableBitSet.of(7, 6), - ImmutableList.of(ImmutableBitSet.of(7), - ImmutableBitSet.of(6), - ImmutableBitSet.of(7)))) + (Iterable<ImmutableBitSet>) + ImmutableList.of(ImmutableBitSet.of(7), + ImmutableBitSet.of(6), + ImmutableBitSet.of(7)))) .build(); final String expected = "" + "LogicalAggregate(group=[{6, 7}], groups=[[{6}, {7}]])\n" diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java index 4cde6e7..7b614e0 100644 --- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java +++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java @@ -398,7 +398,7 @@ public class RelOptRulesTest extends RelOptTestBase { } @Test public void testNotPushExpression() { - final String sql = "select 1 from emp inner join dept \n" + final String sql = "select 1 from emp inner join dept\n" + "on emp.deptno=dept.deptno and emp.ename is not null"; sql(sql).withRule(JoinPushExpressionsRule.INSTANCE) .checkUnchanged(); @@ -2413,7 +2413,7 @@ public class RelOptRulesTest extends RelOptTestBase { } @Test public void testReduceConstants2() throws Exception { - final String sql = "select p1 is not distinct from p0 \n" + final String sql = "select p1 is not distinct from p0\n" + "from (values (2, cast(null as integer))) as t(p0, p1)"; sql(sql).withRule(ReduceExpressionsRule.PROJECT_INSTANCE, ReduceExpressionsRule.FILTER_INSTANCE, @@ -2728,7 +2728,7 @@ public class RelOptRulesTest extends RelOptTestBase { @Test public void testReduceValuesUnderProjectFilter() throws Exception { // Plan should be same as for // select * from (values (11, 1, 10), (23, 3, 20)) as t(x, b, a)"); - final String sql = "select a + b as x, b, a \n" + final String sql = "select a + b as x, b, a\n" + "from (values (10, 1), (30, 7), (20, 3)) as t(a, b)\n" + "where a - b < 21"; sql(sql).withRule(FilterProjectTransposeRule.INSTANCE, @@ -5821,7 +5821,7 @@ public class RelOptRulesTest extends RelOptTestBase { * <a href="https://issues.apache.org/jira/browse/CALCITE-2744">[CALCITE-2744] * RelDecorrelator use wrong output map for LogicalAggregate decorrelate</a>. */ @Test public void testDecorrelateAggWithConstantGroupKey() { - final String sql = "SELECT * FROM emp A where sal in \n" + final String sql = "SELECT * FROM emp A where sal in\n" + "(SELECT max(sal) FROM emp B where A.mgr = B.empno group by deptno, 'abc')"; sql(sql) .withLateDecorrelation(true) diff --git a/piglet/src/main/java/org/apache/calcite/piglet/PigRelOpVisitor.java b/piglet/src/main/java/org/apache/calcite/piglet/PigRelOpVisitor.java index 460b54c..c064613 100644 --- a/piglet/src/main/java/org/apache/calcite/piglet/PigRelOpVisitor.java +++ b/piglet/src/main/java/org/apache/calcite/piglet/PigRelOpVisitor.java @@ -318,7 +318,8 @@ class PigRelOpVisitor extends PigRelOpWalker.PlanPreVisitor { final ImmutableList<ImmutableBitSet> groupSets = (groupType == GroupType.CUBE) ? ImmutableList.copyOf(groupSet.powerSet()) : groupsetBuilder.build(); - RelBuilder.GroupKey groupKey = builder.groupKey(groupSet, groupSets); + RelBuilder.GroupKey groupKey = builder.groupKey(groupSet, + (Iterable<ImmutableBitSet>) groupSets); // Finally, do COLLECT aggregate. builder.cogroup(ImmutableList.of(groupKey)); diff --git a/piglet/src/main/java/org/apache/calcite/piglet/PigToSqlAggregateRule.java b/piglet/src/main/java/org/apache/calcite/piglet/PigToSqlAggregateRule.java index 07bdc19..e584771 100644 --- a/piglet/src/main/java/org/apache/calcite/piglet/PigToSqlAggregateRule.java +++ b/piglet/src/main/java/org/apache/calcite/piglet/PigToSqlAggregateRule.java @@ -36,6 +36,7 @@ import org.apache.calcite.sql.SqlKind; import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.tools.RelBuilder; import org.apache.calcite.tools.RelBuilderFactory; +import org.apache.calcite.util.ImmutableBitSet; import java.math.BigDecimal; import java.util.ArrayList; @@ -254,8 +255,9 @@ public class PigToSqlAggregateRule extends RelOptRule { // Step 2 build new Aggregate // Copy the group key - final RelBuilder.GroupKey groupKey = relBuilder.groupKey(oldAgg.getGroupSet(), - oldAgg.groupSets); + final RelBuilder.GroupKey groupKey = + relBuilder.groupKey(oldAgg.getGroupSet(), + (Iterable<ImmutableBitSet>) oldAgg.groupSets); // The construct the agg call list final List<RelBuilder.AggCall> aggCalls = new ArrayList<>(); if (needGoupingCol) {
