You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by tonytao <to...@outlook.com> on 2020/12/08 06:32:45 UTC

[Bug Report]RelToSqlConverter stack error in 1.24-1.26

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



Re: [Bug Report]RelToSqlConverter stack error in 1.24-1.26

Posted by tonytao <to...@outlook.com>.
method *visitRoot* work well.Ichange my code to :

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

fixed the problem.
Thank you again!

On 12/8/20 4:09 PM, tonytao wrote:
> Tkansks,I created a 
> jira:https://issues.apache.org/jira/browse/CALCITE-4430
>
> On 12/8/20 2:50 PM, Chunwei Lei wrote:
>> Hi, Tao.
>>
>> Thank you for your report. It would be great if you can file an JIRA and
>> provide
>> a test case that can reproduce the error.
>>
>> Best,
>> Chunwei
>>
>>
>> On Tue, Dec 8, 2020 at 2:33 PM tonytao <to...@outlook.com> wrote:
>>
>>> 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
>>>
>>>
>>>
>


Re: [Bug Report]RelToSqlConverter stack error in 1.24-1.26

Posted by tonytao <to...@outlook.com>.
Tkansks,I created a jira:https://issues.apache.org/jira/browse/CALCITE-4430

On 12/8/20 2:50 PM, Chunwei Lei wrote:
> Hi, Tao.
>
> Thank you for your report. It would be great if you can file an JIRA and
> provide
> a test case that can reproduce the error.
>
> Best,
> Chunwei
>
>
> On Tue, Dec 8, 2020 at 2:33 PM tonytao <to...@outlook.com> wrote:
>
>> 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
>>
>>
>>


Re: [Bug Report]RelToSqlConverter stack error in 1.24-1.26

Posted by Chunwei Lei <ch...@gmail.com>.
Hi, Tao.

Thank you for your report. It would be great if you can file an JIRA and
provide
a test case that can reproduce the error.

Best,
Chunwei


On Tue, Dec 8, 2020 at 2:33 PM tonytao <to...@outlook.com> wrote:

> 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
>
>
>