Apologies for the slow reply Ruben, I appreciate your help. The full stack trace (I was prototyping in sqlline) seems to be more helpful:
Here is what seems to be the most useful bits: ====================================== java.sql.SQLException: Error while preparing plan [EnumerableCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{0}]) JdbcToEnumerableConverter Caused by: java.lang.IllegalStateException: Unable to implement EnumerableCorrelate Suppressed: java.lang.NullPointerException: variable $cor0 is not found at java.base/java.util.Objects.requireNonNull(Objects.java:334) at org.apache.calcite.rel.rel2sql.SqlImplementor$BaseContext.getAliasContext(SqlImplementor.java:1429) at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:628) .... at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:427) And here is the entire thing: ====================================== java.sql.SQLException: Error while preparing plan [EnumerableCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{0}]) JdbcToEnumerableConverter JdbcTableScan(table=[[hsql, PUBLIC, houses]]) EnumerableCollect(field=[EXPR$0]) EnumerableProject(id=[$0], name=[$1], todos=[$3]) EnumerableCorrelate(correlation=[$cor1], joinType=[inner], requiredColumns=[{0}]) JdbcToEnumerableConverter JdbcFilter(condition=[=($2, $cor0.id)]) JdbcTableScan(table=[[hsql, PUBLIC, users]]) EnumerableCollect(field=[EXPR$0]) JdbcToEnumerableConverter JdbcProject(id=[$0], description=[$2]) JdbcFilter(condition=[=($1, $cor1.id)]) JdbcTableScan(table=[[hsql, PUBLIC, todos]]) ] at org.apache.calcite.avatica.Helper.createException(Helper.java:56) at org.apache.calcite.avatica.Helper.createException(Helper.java:41) at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:239) at org.apache.calcite.jdbc.CalciteConnectionImpl.access$100(CalciteConnectionImpl.java:101) at org.apache.calcite.jdbc.CalciteConnectionImpl$2.prepareStatement(CalciteConnectionImpl.java:188) at CalciteSchemaManager.executeQuery(CalciteSchemaManager.kt:209) at CalciteSchemaManager.executeQuery(CalciteSchemaManager.kt:213) at ForeignKeyTest.throwawayTest(ForeignKeyTest.kt:265) Caused by: java.lang.IllegalStateException: Unable to implement EnumerableCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{0}]): rowcount = 22500.0, cumulative cost = {318610.0 rows, 562611.0 cpu, 0.0 io}, id = 315 JdbcToEnumerableConverter: rowcount = 100.0, cumulative cost = {110.0 rows, 111.0 cpu, 0.0 io}, id = 293 JdbcTableScan(table=[[hsql, PUBLIC, houses]]): rowcount = 100.0, cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 15 EnumerableCollect(field=[EXPR$0]): rowcount = 225.0, cumulative cost = {2959.0 rows, 5625.0 cpu, 0.0 io}, id = 313 EnumerableCalc(expr#0..3=[{inputs}], proj#0..1=[{exprs}], todos=[$t3]): rowcount = 225.0, cumulative cost = {2734.0 rows, 5400.0 cpu, 0.0 io}, id = 317 EnumerableCorrelate(correlation=[$cor1], joinType=[inner], requiredColumns=[{0}]): rowcount = 225.0, cumulative cost = {2509.0 rows, 3825.0 cpu, 0.0 io}, id = 309 JdbcToEnumerableConverter: rowcount = 15.0, cumulative cost = {116.5 rows, 202.5 cpu, 0.0 io}, id = 298 JdbcFilter(condition=[=($2, $cor0.id)]): rowcount = 15.0, cumulative cost = {115.0 rows, 201.0 cpu, 0.0 io}, id = 296 JdbcTableScan(table=[[hsql, PUBLIC, users]]): rowcount = 100.0, cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 16 EnumerableCollect(field=[EXPR$0]): rowcount = 15.0, cumulative cost = {143.5 rows, 241.5 cpu, 0.0 io}, id = 307 JdbcToEnumerableConverter: rowcount = 15.0, cumulative cost = {128.5 rows, 226.5 cpu, 0.0 io}, id = 305 JdbcProject(id=[$0], description=[$2]): rowcount = 15.0, cumulative cost = {127.0 rows, 225.0 cpu, 0.0 io}, id = 303 JdbcFilter(condition=[=($1, $cor1.id)]): rowcount = 15.0, cumulative cost = {115.0 rows, 201.0 cpu, 0.0 io}, id = 301 JdbcTableScan(table=[[hsql, PUBLIC, todos]]): rowcount = 100.0, cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 18 at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:114) at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:114) at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1130) at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.prepare_(CalcitePrepareImpl.java:1032) at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.prepareRel(CalcitePrepareImpl.java:988) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:668) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:513) at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:483) at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:249) at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:229) ... 88 more Suppressed: java.lang.NullPointerException: variable $cor0 is not found at java.base/java.util.Objects.requireNonNull(Objects.java:334) at org.apache.calcite.rel.rel2sql.SqlImplementor$BaseContext.getAliasContext(SqlImplementor.java:1429) at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:628) at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:1069) at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.callToSql(SqlImplementor.java:776) at org.apache.calcite.rel.rel2sql.SqlImplementor$Context.toSql(SqlImplementor.java:750) at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:427) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:531) at org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:139) at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:147) at org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:201) at org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:189) at org.apache.calcite.adapter.jdbc.JdbcToEnumerableConverter.generateSql(JdbcToEnumerableConverter.java:351) at org.apache.calcite.adapter.jdbc.JdbcToEnumerableConverter.implement(JdbcToEnumerableConverter.java:107) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:104) at org.apache.calcite.adapter.enumerable.EnumerableCorrelate.implement(EnumerableCorrelate.java:113) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:104) at org.apache.calcite.adapter.enumerable.EnumerableCalc.implement(EnumerableCalc.java:118) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:104) at org.apache.calcite.adapter.enumerable.EnumerableCollect.implement(EnumerableCollect.java:81) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.visitChild(EnumerableRelImplementor.java:104) at org.apache.calcite.adapter.enumerable.EnumerableCorrelate.implement(EnumerableCorrelate.java:139) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:111) ... 97 more On Mon, Feb 14, 2022 at 1:14 PM Ruben Q L <rube...@gmail.com> wrote: > Hello Gavin, > > what's the full stack trace that you get? > > On Mon, Feb 14, 2022 at 3:24 PM Gavin Ray <ray.gavi...@gmail.com> wrote: > > > The following query seems to work perfectly: > > > > SELECT > > "houses"."id", > > "houses"."name", > > "houses"."address", > > ARRAY( > > SELECT > > "users"."id", > > "users"."name" > > FROM > > "users" > > WHERE > > "users"."house_id" = "houses"."id" > > ) AS "users" > > FROM > > "houses"; > > > > However, if I modify the inner ARRAY() query for "users" to be: > > > > SELECT > > "users"."id", > > "users"."name", > > ARRAY( > > SELECT > > "todos"."id", > > "todos"."description" > > FROM > > "todos" > > WHERE > > "todos"."user_id" = "users"."id" > > ) AS "todos" > > FROM > > "users" > > > > =================================================== > > > > Unable to implement EnumerableNestedLoopJoin(condition=[true], > > joinType=[inner]): rowcount = 22500.0, cumulative cost = {227855.0 rows, > > 18242.0 cpu, 0.0 io}, id = 12787 > > EnumerableTableScan(table=[[example, houses]]): rowcount = 100.0, > > cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 12718 > > EnumerableCollect(field=[x]): rowcount = 225.0, cumulative cost = > {2755.0 > > rows, 18141.0 cpu, 0.0 io}, id = 12785 > > EnumerableCalc(expr#0..3=[{inputs}], proj#0..1=[{exprs}], > todos=[$t3]): > > rowcount = 225.0, cumulative cost = {2530.0 rows, 17916.0 cpu, 0.0 io}, > id > > = 12793 > > EnumerableCorrelate(correlation=[$cor1], joinType=[inner], > > requiredColumns=[{0}]): rowcount = 225.0, cumulative cost = {2305.0 rows, > > 16341.0 cpu, 0.0 io}, id = 12781 > > EnumerableCalc(expr#0..2=[{inputs}], expr#3=[$cor0], expr#4=[$ > > t3.id], > > expr#5=[=($t2, $t4)], proj#0..2=[{exprs}], $condition=[$t5]): rowcount = > > 15.0, cumulative cost = {115.0 rows, 1101.0 cpu, 0.0 io}, id = 12789 > > EnumerableTableScan(table=[[example, users]]): rowcount = > 100.0, > > cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 12722 > > EnumerableCollect(field=[x]): rowcount = 15.0, cumulative cost = > > {130.0 rows, 1016.0 cpu, 0.0 io}, id = 12779 > > EnumerableCalc(expr#0..2=[{inputs}], expr#3=[$cor1], expr#4=[$ > > t3.id], expr#5=[=($t1, $t4)], id=[$t0], description=[$t2], > > $condition=[$t5]): rowcount = 15.0, cumulative cost = {115.0 rows, 1001.0 > > cpu, 0.0 io}, id = 12797 > > EnumerableTableScan(table=[[example, todos]]): rowcount = > > 100.0, cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 12728 > > (state=,code=0) > > >