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)