true, the version was rather old, thank you.
> On 18 Aug 2022, at 02:12, Benchao Li <libenc...@apache.org> wrote:
>
> Egor,
>
> What's the Calcite version are you using?
> I tried your code in 1.30.0 and 1.31.0, they both work fine.
>
> Egor Ryashin <riashin.e...@gmail.com> 于2022年8月17日周三 22:40写道:
>
>> Hi all,
>>
>> I’m trying to figure out why this conversion fails:
>>
>> WITH `A` AS (SELECT `TABLE_NAME`
>> FROM `main`.`TABLES`), `B` AS (SELECT 'k' AS `K`) (SELECT *
>> FROM `A`
>> INNER JOIN `B` ON `A`.`TABLE_NAME` = `B`.`K`)
>> Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1
>> out of bounds for length 1
>> at
>> java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
>> at
>> java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
>> at
>> java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
>> at java.base/java.util.Objects.checkIndex(Objects.java:359)
>> at java.base/java.util.ArrayList.get(ArrayList.java:427)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$LookupContext.findRel(SqlToRelConverter.java:5212)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.lookup(SqlToRelConverter.java:4345)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.lookupExp(SqlToRelConverter.java:4290)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:3637)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.access$2100(SqlToRelConverter.java:217)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4717)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4013)
>> at
>> org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:334)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4577)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3856)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:670)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:627)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3100)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:563)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertWith(SqlToRelConverter.java:3927)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3114)
>> at
>> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:563)
>> at org.apache.calcite.prepare.PlannerImpl.rel(PlannerImpl.java:235)
>>
>> The source code:
>> Connection connection = DriverManager.getConnection("jdbc:calcite:");
>> CalciteConnection calciteConnection =
>> connection.unwrap(CalciteConnection.class);
>> SchemaPlus rootSchema = calciteConnection.getRootSchema();
>> final DataSource ds = JdbcSchema.dataSource(
>> "jdbc:hsqldb:mem:db",
>> "org.hsqldb.jdbc.JDBCDriver",
>> "SA",
>> "");
>> rootSchema.add("main", JdbcSchema.create(rootSchema, "main", ds, null,
>> "INFORMATION_SCHEMA"));
>> FrameworkConfig config = Frameworks.newConfigBuilder()
>> .defaultSchema(rootSchema)
>> .build();
>>
>> Planner planner = Frameworks.getPlanner(config);
>>
>> SqlNode sqlNode = planner.parse("with a as (select TABLE_NAME from
>> \"main\".\"TABLES\"), b as (select 'k' as k) select * from a join b on
>> a.TABLE_NAME = b.K");
>> System.out.println(sqlNode.toString());
>>
>> sqlNode = planner.validate(sqlNode);
>>
>> RelRoot relRoot = planner.rel(sqlNode);
>> System.out.println(relRoot.toString());
>>
>> This one (without join) works fine:
>> with a as (select TABLE_NAME from \"main\".\"TABLES\"), b as (select 'k'
>> as k) select * from b
>> It doesn’t depend on the database, I tried another schema with the same
>> result.
>>
>>
>
> --
>
> Best,
> Benchao Li