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)