[ 
https://issues.apache.org/jira/browse/CALCITE-3850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17060564#comment-17060564
 ] 

fa zheng commented on CALCITE-3850:
-----------------------------------

The error stack strace is :
java.sql.SQLException: Error while executing SQL "select * from (select 
empno,name,deptno from emps)e join (select * from depts)d on (case when 
e.deptno=1 then e.deptno else e.deptno end) = d.deptno join (select * from 
sdepts)f on (case when e.deptno=1 then e.deptno else e.deptno end) =f.deptno": 
while converting CASE WHEN `E`.`DEPTNO` = 1 THEN `E`.`DEPTNO` ELSE `E`.`DEPTNO` 
END = `F`.`DEPTNO`
        at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
        at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
        at 
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163)
        at 
org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217)
        at sqlline.Commands.executeSingleQuery(Commands.java:1008)
        at sqlline.Commands.execute(Commands.java:957)
        at sqlline.Commands.sql(Commands.java:921)
        at sqlline.SqlLine.dispatch(SqlLine.java:717)
        at sqlline.SqlLine.begin(SqlLine.java:536)
        at sqlline.SqlLine.start(SqlLine.java:266)
        at sqlline.SqlLine.main(SqlLine.java:205)
Caused by: java.lang.RuntimeException: while converting CASE WHEN `E`.`DEPTNO` 
= 1 THEN `E`.`DEPTNO` ELSE `E`.`DEPTNO` END = `F`.`DEPTNO`
        at 
org.apache.calcite.sql2rel.ReflectiveConvertletTable.lambda$registerNodeTypeMethod$0(ReflectiveConvertletTable.java:86)
        at 
org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4787)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4092)
        at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:139)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4656)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertJoinCondition(SqlToRelConverter.java:2708)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2100)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:646)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:627)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3181)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:563)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:265)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:231)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:638)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:502)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:472)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
        at 
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
        at 
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
        ... 8 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at 
org.apache.calcite.sql2rel.ReflectiveConvertletTable.lambda$registerNodeTypeMethod$0(ReflectiveConvertletTable.java:83)
        ... 28 more
Caused by: java.lang.AssertionError
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.getRootField(SqlToRelConverter.java:4448)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.adjustInputRef(SqlToRelConverter.java:3765)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:3737)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.access$2200(SqlToRelConverter.java:217)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4796)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4092)
        at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:317)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4656)
        at 
org.apache.calcite.sql2rel.StandardConvertletTable.convertExpressionList(StandardConvertletTable.java:793)
        at 
org.apache.calcite.sql2rel.StandardConvertletTable.convertCall(StandardConvertletTable.java:769)
        at 
org.apache.calcite.sql2rel.StandardConvertletTable.convertCall(StandardConvertletTable.java:756)
        ... 33 more

> AssertionError when converts a SQL parse tree into a relational algebra 
> expression
> ----------------------------------------------------------------------------------
>
>                 Key: CALCITE-3850
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3850
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.21.0
>            Reporter: fa zheng
>            Priority: Major
>
> I execute following sql with calcite 1.21.0 in flink 1.10. When the two 
> conditions of left outer join are like"ON t1.a=t2.a" and "ON t1.a=t3.a ", it 
> execute successfully. However, when the two conditions of left outer join are 
> like "ON IF(t1.a='...',CAST(RAND(123) AS STRING),t1.a)=t2.a" and "ON 
> IF(t1.a='...',CAST(RAND(123) AS STRING),t1.a)=t3.a", it gets a assert error 
> in method getRootField.
> It also can execute successfully with "ON t1.a=t2.a" and "ON 
> IF(t1.a='...',CAST(RAND(123) AS STRING),t1.a)=t3.a".
> But failed with "ON IF(t1.a='...',CAST(RAND(123) AS STRING),t1.a)=t2.a" and 
> "ON t1.a=t3.a"
> SELECT 
>      ...            
> FROM 
> (
>       SELECT
>               ...
> ) t1          
> LEFT OUTER JOIN 
> (
>     SELECT 
>        ...
> ) t2
> ON ...
> LEFT OUTER JOIN
> (
>      SELECT  
>          ...
> ) t3
> ON ...         



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to