You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2019/05/15 18:14:22 UTC

[calcite] 02/02: [CALCITE-3052] Error while applying rule MaterializedViewAggregateRule(Project-Aggregate): ArrayIndexOutOfBoundsException

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 <jc...@apache.org>
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)