You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Ruben Q L (Jira)" <ji...@apache.org> on 2019/10/25 15:55:00 UTC

[jira] [Assigned] (CALCITE-3376) VolcanoPlanner CannotPlanException: best rel is null even though there is an option with non-infinite cost

     [ https://issues.apache.org/jira/browse/CALCITE-3376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ruben Q L reassigned CALCITE-3376:
----------------------------------

    Assignee: Ruben Q L

> VolcanoPlanner CannotPlanException: best rel is null even though there is an option with non-infinite cost
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-3376
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3376
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.21.0
>            Reporter: Ruben Q L
>            Assignee: Ruben Q L
>            Priority: Major
>         Attachments: Diagram.png, Graphviz.png, logsTRACE.txt, stackTrace.txt
>
>
> The problem can be reproduced by adding this test to PlannerTest.java:
> {code:java}
>   @Test public void testCannotPlanException() throws Exception {
>     RelBuilder builder = RelBuilder.create(RelBuilderTest.config().build());
>     RuleSet ruleSet =
>         RuleSets.ofList(
>             //EnumerableRules.ENUMERABLE_JOIN_RULE, // with this rule it works!
>             JoinToCorrelateRule.INSTANCE,
>             EnumerableRules.ENUMERABLE_CORRELATE_RULE,
>             EnumerableRules.ENUMERABLE_PROJECT_RULE,
>             EnumerableRules.ENUMERABLE_FILTER_RULE,
>             EnumerableRules.ENUMERABLE_SORT_RULE,
>             EnumerableRules.ENUMERABLE_UNION_RULE,
>             EnumerableRules.ENUMERABLE_TABLE_SCAN_RULE);
>     builder
>         .scan("EMP")
>         .scan("EMP")
>         .union(true)
>         .scan("EMP")
>         .scan("EMP")
>         .union(true)
>         .join(
>             JoinRelType.INNER,
>             builder.equals(
>                 builder.field(2, 0, "DEPTNO"),
>                 builder.field(2, 1, "EMPNO")));
>     RelNode relNode = builder.build();
>     RelOptPlanner planner = relNode.getCluster().getPlanner();
>     Program program = Programs.of(ruleSet);
>     RelTraitSet toTraits = relNode.getTraitSet()
>         .replace(EnumerableConvention.INSTANCE);
>     RelNode output = program.run(planner, relNode, toTraits,
>         ImmutableList.of(), ImmutableList.of());
>     String outputStr = toString(output);
>   }
> {code}
> Running this test causes the following exception (full stack trace attached):
> {code:java}
> org.apache.calcite.plan.RelOptPlanner$CannotPlanException: There are not enough rules to produce a node with desired properties: convention=ENUMERABLE, sort=[]. All the inputs have relevant nodes, however the cost is still infinite.
> Root: rel#13:Subset#2.ENUMERABLE.[]
> {code}
> The last part of the message (_All the inputs have relevant nodes, however the cost is still infinite_) seems relevant, because we can see that {{rel#13}}'s best is {{null}}, and it should be {{rel#21}} (which has a non-infinite cost):
> {code:java}
> rel#13:Subset#2.ENUMERABLE.[], best=null, importance=1.0
>     rel#14:AbstractConverter.ENUMERABLE.[](input=RelSubset#12, convention=ENUMERABLE, sort=[]), rowcount=117.6, cumulative cost={inf}
>     rel#21:EnumerableCorrelate.ENUMERABLE.[](left=RelSubset#19, right=RelSubset#20, correlation=$cor0, joinType=inner, requiredColumns={7}), rowcount=1.0, cumulative cost={1770.6000000000001 rows, 2466.0 cpu, 0.0 io}
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)