[
https://issues.apache.org/jira/browse/CALCITE-3848?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jesus Camacho Rodriguez resolved CALCITE-3848.
----------------------------------------------
Fix Version/s: 1.23.0
Resolution: Fixed
Fixed in
https://github.com/apache/calcite/commit/18b9bc36e8be5b9a038548d9513466a756eeba61.
Thanks [~vgarg]!
> Rewriting for materialized view consisting of group by on join keys fails
> with Mappings$NoElementException
> ----------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-3848
> URL: https://issues.apache.org/jira/browse/CALCITE-3848
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Vineet Garg
> Assignee: Vineet Garg
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.23.0
>
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> Test case
> {code:java}
> + @Test public void testAggregateOnJoinKeys() {
> + checkMaterialize(
> + "select \"deptno\", \"empid\", \"salary\"\n"
> + + "from \"emps\"\n"
> + + "group by \"deptno\", \"empid\", \"salary\"",
> + "select \"empid\", \"depts\".\"deptno\" \n"
> + + "from \"emps\"\n"
> + + "join \"depts\" on \"depts\".\"deptno\" = \"empid\" group by
> \"empid\", \"depts\".\"deptno\"",
> + HR_FKUK_MODEL,
> + CalciteAssert.checkResultContains(
> + "EnumerableCalc(expr#0=[{inputs}], empid=[$t0], empid0=[$t0])\n"
> + + " EnumerableAggregate(group=[{1}])\n"
> + + " EnumerableHashJoin(condition=[=($1, $3)],
> joinType=[inner])\n"
> + + " EnumerableTableScan(table=[[hr, m0]])"));
> + }
> +
> {code}
> Error:
> {code}
> Caused by: java.lang.RuntimeException: Error while applying rule
> MaterializedViewAggregateRule(Aggregate), args
> [rel#64476:EnumerableAggregate.ENUMERABLE.[](input=RelSubset#64475,group={0,
> 1})]
> at
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:260)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:634)
> at
> org.apache.calcite.tools.Programs.lambda$standard$3(Programs.java:286)
> at
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:346)
> at
> org.apache.calcite.prepare.Prepare.optimize(Prepare.java:165)
> at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:290)
> at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:207)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:634)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:498)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:468)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
> at
> org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550)
> at
> org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
> at
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
> ... 16 more
> Next exception 1: [CIRCULAR REFERENCE SQLException]
> Next exception 2: [CIRCULAR REFERENCE RuntimeException]
> Next exception 3:
> org.apache.calcite.util.mapping.Mappings$NoElementException: source #0 has no
> target in mapping [size=1, sourceCount=2, targetCount=7, elements=[1:1]]
> at
> org.apache.calcite.util.mapping.Mappings$AbstractMapping.getTarget(Mappings.java:881)
> at
> org.apache.calcite.rel.rules.materialize.MaterializedViewAggregateRule.rewriteView(MaterializedViewAggregateRule.java:677)
> at
> org.apache.calcite.rel.rules.materialize.MaterializedViewRule.perform(MaterializedViewRule.java:485)
> at
> org.apache.calcite.rel.rules.materialize.MaterializedViewOnlyAggregateRule.onMatch(MaterializedViewOnlyAggregateRule.java:63)
> at
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:233)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:634)
> at
> org.apache.calcite.tools.Programs.lambda$standard$3(Programs.java:286)
> at
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:346)
> at
> org.apache.calcite.prepare.Prepare.optimize(Prepare.java:165)
> at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:290)
> at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:207)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:634)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:498)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:468)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
> at
> org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550)
> at
> org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
> at
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
> ... 16 more
> Caused by: [CIRCULAR REFERENCE PlaceholderException]
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)