This is an automated email from the ASF dual-hosted git repository. jcamacho pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 046bb81a9a4ac3e5b63c0ca4a0141446df325a44 Author: Jesus Camacho Rodriguez <[email protected]> AuthorDate: Mon May 13 10:34:47 2019 -0700 [CALCITE-3052] Error while applying rule MaterializedViewAggregateRule(Project-Aggregate): ArrayIndexOutOfBoundsException Close apache/calcite#1212 --- .../org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 101b42a..f1b12eb 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 @@ -1462,6 +1462,7 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule { // Cannot rollup this aggregate, bail out return null; } + rewritingMapping.set(k, queryAggregate.getGroupCount() + aggregateCalls.size()); final RexInputRef operand = rexBuilder.makeInputRef(input, k); aggregateCalls.add( // TODO: handle aggregate ordering @@ -1469,7 +1470,6 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule { .approximate(queryAggCall.isApproximate()) .distinct(queryAggCall.isDistinct()) .as(queryAggCall.name)); - rewritingMapping.set(k, sourceIdx); added = true; } } @@ -1502,9 +1502,10 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule { rexBuilder.makeInputRef(result, groupSet.indexOf(inverseMapping.getTarget(i)))); } - for (int i = 0; i < queryAggregate.getAggCallList().size(); i++) { + // We add aggregate functions that are present in result to projection list + for (int i = queryAggregate.getGroupCount(); i < result.getRowType().getFieldCount(); i++) { projects.add( - rexBuilder.makeInputRef(result, queryAggregate.getGroupCount() + i)); + rexBuilder.makeInputRef(result, i)); } result = relBuilder .push(result)
