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