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)