[
https://issues.apache.org/jira/browse/CALCITE-4849?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17427675#comment-17427675
]
xzh_dz commented on CALCITE-4849:
---------------------------------
[~jhkcool]
I tried to reproduce the problem in `MaterializedViewSubstitutionVisitorTest`,I
found that it can be rewritten by the materialized view.
{code:java}
// code placeholder
org.apache.calcite.test.MaterializedViewSubstitutionVisitorTest
@Test void test() {
final String mv = "select \"deptno\",\"name\" from \"emps\" where \"deptno\"
> 20";
final String query = "select \"name\" from \"emps\" where \"deptno\" > 30";
sql(mv, query).ok();
}
{code}
Can you reproduce the exception in Calcite?
> Query SQL cannot complete materialized view rewrite properly
> -------------------------------------------------------------
>
> Key: CALCITE-4849
> URL: https://issues.apache.org/jira/browse/CALCITE-4849
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.27.0
> Reporter: jhkcool
> Priority: Major
>
> {code:java}
> #materialization view MV:
> SELECT name,age FROM test WHERE age>20
> #query sql:
> SELECT name FROM test WHERE age>30
> #expect results after rewriting
> SELECT name FROM MV WHERE age>30
> {code}
> but there is a exception:
> {code:java}
> e.message: source #1 has no target in mapping [size=1, sourceCount=2,
> targetCount=1, elements=[0:0]]
> Java exception follows:
> org.apache.calcite.util.mapping.Mappings$NoElementException: source #1 has no
> target in mapping [size=1, sourceCount=2, targetCount=1, elements=[0:0]]
> at
> org.apache.calcite.util.mapping.Mappings$AbstractMapping.getTarget(Mappings.java:944)
> at
> org.apache.calcite.rex.RexPermuteInputsShuttle.visitInputRef(RexPermuteInputsShuttle.java:87)
> at
> org.apache.calcite.rex.RexPermuteInputsShuttle.visitInputRef(RexPermuteInputsShuttle.java:35)
> at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:114)
> at org.apache.calcite.rex.RexShuttle.visitList(RexShuttle.java:161)
> at org.apache.calcite.rex.RexShuttle.visitCall(RexShuttle.java:113)
> at
> org.apache.calcite.rex.RexPermuteInputsShuttle.visitCall(RexPermuteInputsShuttle.java:102)
> at
> org.apache.calcite.rex.RexPermuteInputsShuttle.visitCall(RexPermuteInputsShuttle.java:35)
> at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
> at
> org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:438)
> at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:531)
> at
> org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:284)
> at
> org.apache.calcite.sql2rel.RelFieldTrimmer.trim(RelFieldTrimmer.java:171)
> at
> org.apache.calcite.plan.RelOptMaterializations.trimUnusedfields(RelOptMaterializations.java:232)
> at
> org.apache.calcite.plan.RelOptMaterializations.substitute(RelOptMaterializations.java:187)
> at
> org.apache.calcite.plan.RelOptMaterializations.useMaterializedViews(RelOptMaterializations.java:73)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerMaterializations(VolcanoPlanner.java:323)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:527)
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)