Not sure if this is helpful, but enabling TRACE logging shows this:

[Test worker] DEBUG org.apache.calcite.sql2rel - Plan after converting
SqlNode to RelNode
LogicalProject(ID=[$0], USER_ID=[$1], TITLE=[$2], CONTENT=[$3], ID0=[$4],
POST_ID=[$5], CONTENT0=[$6])
  LogicalJoin(condition=[=($0, $5)], joinType=[inner])
    JdbcTableScan(table=[[db1, PUBLIC, POSTS]])
    JdbcTableScan(table=[[db2, PUBLIC, COMMENTS]])

[Test worker] TRACE org.apache.calcite.plan.RelOptPlanner - Subset cost
changed: subset [rel#11:RelSubset#0.JDBC.PUBLIC.[]] cost was {inf} now
{100.0 rows, 101.0 cpu, 0.0 io}
[Test worker] TRACE org.apache.calcite.plan.RelOptPlanner - Register
rel#7:JdbcTableScan.JDBC.PUBLIC.[](table=[db1, PUBLIC, POSTS]) in
rel#11:RelSubset#0.JDBC.PUBLIC.[]
[Test worker] TRACE org.apache.calcite.plan.RelOptPlanner - Rule-match
queued: rule [JdbcToEnumerableConverterRule(in:JDBC.PUBLIC,out:ENUMERABLE)]
rels [#7]

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)


On Mon, Jan 31, 2022 at 4:42 PM Gavin Ray <[email protected]> wrote:

> 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