I took the "FrameworksTest#executeQuery()" code from the Calcite repo here
and have been using it:
https://github.com/apache/calcite/blob/de847c38f3544f9c7282984f32dc1093bdb2fb60/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java#L444-L477

Have been getting an error I don't understand.
I have a rootSchema, with two sub-schemas, that each have JdbcSchema's from
hsqldb

https://gist.github.com/GavinRay97/cf39a9dd92a793df506ecc2135d6da0b#file-test-kt-L68-L78

If I query just a single schema, it works fine:
=============================================
Query: select * from db1.PUBLIC.POSTS

-- Logical Plan
LogicalProject(inputs=[0..3])
  JdbcTableScan(table=[[db1, PUBLIC, POSTS]])

-- Mid Plan
LogicalProject(subset=[rel#8:RelSubset#1.ENUMERABLE.[]], inputs=[0..3])
  JdbcTableScan(subset=[rel#5:RelSubset#0.JDBC.PUBLIC.[]], table=[[db1,
PUBLIC, POSTS]])

-- Best Plan
JdbcToEnumerableConverter
  JdbcTableScan(table=[[hsqldb1, PUBLIC, POSTS]])

If I add a JOIN though, it fails before reaching the mid-plan:
=============================================
Query:
            select * from db1.PUBLIC.POSTS
            inner join db2.PUBLIC.COMMENTS
                    on db1.PUBLIC.POSTS.ID = db2.PUBLIC.COMMENTS.POST_ID

-- Logical Plan
LogicalProject(inputs=[0..6])
  LogicalJoin(condition=[=($0, $5)], joinType=[inner])
    JdbcTableScan(table=[[db1, PUBLIC, POSTS]])
    JdbcTableScan(table=[[db2, PUBLIC, COMMENTS]])

java.lang.AssertionError: Rule's description should be unique;
existing rule=JdbcToEnumerableConverterRule(in:JDBC.PUBLIC,out:ENUMERABLE);
new rule=JdbcToEnumerableConverterRule(in:JDBC.PUBLIC,out:ENUMERABLE)
at
org.apache.calcite.plan.AbstractRelOptPlanner.addRule(AbstractRelOptPlanner.java:163)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.addRule(VolcanoPlanner.java:418)
at
org.apache.calcite.adapter.jdbc.JdbcConvention.register(JdbcConvention.java:66)
at
org.apache.calcite.plan.AbstractRelOptPlanner.registerClass(AbstractRelOptPlanner.java:240)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1365)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:598)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:613)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:95)
at
org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:274)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1270)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:598)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:613)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:95)
at
org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:274)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1270)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:598)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:613)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.changeTraits(VolcanoPlanner.java:498)
at CalciteUtils.executeQuery(CalciteUtils.kt:41)
at ForeignKeyTest.testForeignKey(ForeignKeyTest.kt:82)

Reply via email to