Repository: calcite Updated Branches: refs/heads/master a3dd90f10 -> fb8c072ed
[CALCITE-2051] Rules using Aggregate might check for simple grouping sets incorrectly Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/fb8c072e Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/fb8c072e Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/fb8c072e Branch: refs/heads/master Commit: fb8c072ed77e6a1754b33394713c2499e73adccf Parents: a3dd90f Author: Jesus Camacho Rodriguez <[email protected]> Authored: Tue Nov 14 16:14:51 2017 -0800 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Mon Nov 20 13:22:54 2017 -0800 ---------------------------------------------------------------------- .../rel/rules/AggregateExpandDistinctAggregatesRule.java | 3 ++- .../apache/calcite/rel/rules/AggregateFilterTransposeRule.java | 5 +++-- .../org/apache/calcite/rel/rules/AggregateProjectMergeRule.java | 3 ++- .../apache/calcite/rel/rules/FilterAggregateTransposeRule.java | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/fb8c072e/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java ---------------------------------------------------------------------- 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 53068d0..019259c 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 @@ -22,6 +22,7 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; +import org.apache.calcite.rel.core.Aggregate.Group; import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.core.RelFactories; @@ -158,7 +159,7 @@ public final class AggregateExpandDistinctAggregatesRule extends RelOptRule { // arguments then we can use a more efficient form. if (nonDistinctAggCallCount == 0 && argLists.size() == 1 - && aggregate.getGroupSets().size() == 1) { + && aggregate.getGroupType() == Group.SIMPLE) { final Pair<List<Integer>, Integer> pair = Iterables.getOnlyElement(argLists); final RelBuilder relBuilder = call.builder(); http://git-wip-us.apache.org/repos/asf/calcite/blob/fb8c072e/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java index 68a047d..6e9e508 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java @@ -23,6 +23,7 @@ import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.plan.SubstitutionVisitor; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; +import org.apache.calcite.rel.core.Aggregate.Group; import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.Filter; import org.apache.calcite.rel.core.RelFactories; @@ -107,7 +108,7 @@ public class AggregateFilterTransposeRule extends RelOptRule { RexUtil.apply(mapping, filter.getCondition()); final Filter newFilter = filter.copy(filter.getTraitSet(), newAggregate, newCondition); - if (allColumnsInAggregate && aggregate.getGroupSets().size() == 1) { + if (allColumnsInAggregate && aggregate.getGroupType() == Group.SIMPLE) { // Everything needed by the filter is returned by the aggregate. assert newGroupSet.equals(aggregate.getGroupSet()); call.transformTo(newFilter); @@ -120,7 +121,7 @@ public class AggregateFilterTransposeRule extends RelOptRule { topGroupSet.set(newGroupSet.indexOf(c)); } ImmutableList<ImmutableBitSet> newGroupingSets = null; - if (aggregate.groupSets.size() > 1) { + if (aggregate.getGroupType() != Group.SIMPLE) { ImmutableList.Builder<ImmutableBitSet> newGroupingSetsBuilder = ImmutableList.builder(); for (ImmutableBitSet groupingSet : aggregate.getGroupSets()) { http://git-wip-us.apache.org/repos/asf/calcite/blob/fb8c072e/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java index 432a891..e7ddd58 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java @@ -20,6 +20,7 @@ import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; +import org.apache.calcite.rel.core.Aggregate.Group; import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.Project; import org.apache.calcite.rel.core.RelFactories; @@ -88,7 +89,7 @@ public class AggregateProjectMergeRule extends RelOptRule { final ImmutableBitSet newGroupSet = aggregate.getGroupSet().permute(map); ImmutableList<ImmutableBitSet> newGroupingSets = null; - if (aggregate.getGroupSets().size() > 1) { + if (aggregate.getGroupType() != Group.SIMPLE) { newGroupingSets = ImmutableBitSet.ORDERING.immutableSortedCopy( ImmutableBitSet.permute(aggregate.getGroupSets(), map)); http://git-wip-us.apache.org/repos/asf/calcite/blob/fb8c072e/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java index f971be3..f65d874 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java @@ -23,6 +23,7 @@ import org.apache.calcite.plan.RelOptRuleOperand; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Aggregate; +import org.apache.calcite.rel.core.Aggregate.Group; import org.apache.calcite.rel.core.Filter; import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.type.RelDataTypeField; @@ -137,7 +138,7 @@ public class FilterAggregateTransposeRule extends RelOptRule { return false; } - if (aggregate.getGroupSets().size() > 1) { + if (aggregate.getGroupType() != Group.SIMPLE) { // If grouping sets are used, the filter can be pushed if // the columns referenced in the predicate are present in // all the grouping sets.
