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

TJ Banghart resolved CALCITE-7265.
----------------------------------
    Fix Version/s: 1.42.0
       Resolution: Fixed

> RelOptFixture#relFn cannot be used with VolcanoPlanner
> ------------------------------------------------------
>
>                 Key: CALCITE-7265
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7265
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.41.0
>            Reporter: TJ Banghart
>            Assignee: TJ Banghart
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 1.42.0
>
>
> {{RelOptFixture.relFn}} is incompatible with {{withVolcanoPlanner}} 
> Take a simple existing test case that uses `relFn` to set a test fixture, and 
> modify it to use a VolcanoPlanner instead of the default HepPlanner:
> {code:java}
>  @Test void testFilterSortTransposeOffset() {
>   final Function<RelBuilder, RelNode> relFn = b -> b
>       .scan("EMP")
>       .project(b.field(0))
>       .sortLimit(1, 0, b.field(0))
>       .filter(b.lessThan(b.field(0), b.literal(10)))
>       .build();
>   relFn(relFn)
>       .withVolcanoPlanner(false, p -> {
>         p.addRule(CoreRules.FILTER_SORT_TRANSPOSE);
>       })
>       .checkUnchanged();
> }{code}
> Throws the following:
> {code:java}
>  Relational expression 
> rel#3:LogicalFilter.NONE.[0](input=LogicalSort#2,condition=<($0, 10)) belongs 
> to a different planner than is currently being used.
> java.lang.AssertionError: Relational expression 
> rel#3:LogicalFilter.NONE.[0](input=LogicalSort#2,condition=<($0, 10)) belongs 
> to a different planner than is currently being used.
>     at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1266)
>     at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:600)
>     at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:615)
>     at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.changeTraits(VolcanoPlanner.java:500)
> ...{code}
> I believe this is because a new planner is created during {{check()}} and 
> {{{}checkUnchanged(){}}}: 
> See 
> [CalcitePrepareImp#perform|https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java#L972-L975].
> This makes it difficult to test plans with the VolcanoPlanner that do not 
> have a SQL representation.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to