Hi folks,

I found a RelToSqlConverter bug existed in 1.24-1.26.

I has a logical plan as below:

      LogicalProject(id=[$0], CAST=[CAST($1):DATE])
        LogicalFilter(condition=[AND(<($1, 2011-12-01 00:00:00), >($0, 100))])
          JdbcTableScan(table=[[public, testdata]])

when concert it to sql ,

        RelToSqlConverter converter = new RelToSqlConverter(PostgresqlSqlDialect.DEFAULT);
        SqlSelect select = converter.visit(project1).asSelect();

it throw exception:

Exception in thread "main" java.lang.NullPointerException
    at java.base/java.util.Objects.requireNonNull(Objects.java:221)
    at org.apache.calcite.rel.rel2sql.RelToSqlConverter.result(RelToSqlConverter.java:152)     at org.apache.calcite.rel.rel2sql.SqlImplementor.result(SqlImplementor.java:483)     at org.apache.calcite.rel.rel2sql.SqlImplementor$Builder.result(SqlImplementor.java:1970)     at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:351)
    at com.glodon.newcalcite.App.main(App.java:111)

Here is this the bug explain:

In RelToSqlConverter,the stack generate 2 frames :

 * JdbcTableScan(parent was LogicalFilter)
 * LogicalFilter(parent was LogicalProject)

On "visit(TableScan e)"  the stack would peek and generate a result;on "visit(Filter e)" ,it would peek another frame and generate the result too.So on "visit(Project e)",the stack is empty,this cause the exception happened.

I'm not sure when "visitInput" in LogicalProject ,it should push LogicalProject(parent is NULL) instead of LogicalFilter(parent was LogicalProject).?

This error not existed in 1.23.

Best regards!

Tao Jin


Reply via email to