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) {

Reply via email to