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

Reply via email to