TJ Banghart created CALCITE-7265:
------------------------------------

             Summary: 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


{{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}
{code:java}

Throws the following:
 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#performl|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