[ 
https://issues.apache.org/jira/browse/CALCITE-2234?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

jingzhang updated CALCITE-2234:
-------------------------------
    Description: 
|When run tpcDs query 47, 57, 63, 53, 89 sql, an AssertionError would be thrown 
out. The stack is as following. 
{code}java.lang.AssertionError 
at org.apache.calcite.sql.fun.SqlCastFunction.unparse(SqlCastFunction.java:172) 
at org.apache.calcite.sql.SqlDialect.unparseCall(SqlDialect.java:332) 
at org.apache.calcite.sql.SqlCall.unparse(SqlCall.java:103) 
at org.apache.calcite.sql.SqlUtil.unparseBinarySyntax(SqlUtil.java:323) 
at org.apache.calcite.sql.SqlSyntax$3.unparse(SqlSyntax.java:65) 
at org.apache.calcite.sql.SqlOperator.unparse(SqlOperator.java:332) 
at org.apache.calcite.sql.SqlDialect.unparseCall(SqlDialect.java:332) 
at org.apache.calcite.sql.SqlCall.unparse(SqlCall.java:103) 
at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:152) 
at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:158) 
at org.apache.calcite.sql.SqlNode.toString(SqlNode.java:125) 
at java.lang.String.valueOf(String.java:2994) 
at java.lang.StringBuilder.append(StringBuilder.java:131) 
at 
org.apache.calcite.sql2rel.ReflectiveConvertletTable$1.convertCall(ReflectiveConvertletTable.java:90)
 
at 
org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4684)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4020)
 
at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4586)
 
at 
org.apache.calcite.sql2rel.StandardConvertletTable$AvgVarianceConvertlet.convertCall(StandardConvertletTable.java:1190)
at 
org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1891)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.access$1800(SqlToRelConverter.java:215)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4579)
 
at 
org.apache.calcite.sql2rel.StandardConvertletTable$12.convertCall(StandardConvertletTable.java:267)
 
at 
org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4684)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4020)
 
at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) 
at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4586)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2862)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2710)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2073)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1965)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:2288)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1999)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1953)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2031)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2031)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:643)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2073)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1965)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:2288)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1999)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1953)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:643)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:560)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertWith(SqlToRelConverter.java:3931)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3098)
 
at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:560)\{code}
 
Because a Cast SqlCall  is created in StandardConvertletTable.expandAvg method, 
which only contains one operands. That's is volatile with assertion in 
SqlCastFunction.|

> Fix java.lang.AssertionError at 
> org.apache.calcite.sql.fun.SqlCastFunction.unparse 
> -----------------------------------------------------------------------------------
>
>                 Key: CALCITE-2234
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2234
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: jingzhang
>            Assignee: Julian Hyde
>            Priority: Major
>         Attachments: q47.sql
>
>
> |When run tpcDs query 47, 57, 63, 53, 89 sql, an AssertionError would be 
> thrown out. The stack is as following. 
> {code}java.lang.AssertionError 
> at 
> org.apache.calcite.sql.fun.SqlCastFunction.unparse(SqlCastFunction.java:172) 
> at org.apache.calcite.sql.SqlDialect.unparseCall(SqlDialect.java:332) 
> at org.apache.calcite.sql.SqlCall.unparse(SqlCall.java:103) 
> at org.apache.calcite.sql.SqlUtil.unparseBinarySyntax(SqlUtil.java:323) 
> at org.apache.calcite.sql.SqlSyntax$3.unparse(SqlSyntax.java:65) 
> at org.apache.calcite.sql.SqlOperator.unparse(SqlOperator.java:332) 
> at org.apache.calcite.sql.SqlDialect.unparseCall(SqlDialect.java:332) 
> at org.apache.calcite.sql.SqlCall.unparse(SqlCall.java:103) 
> at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:152) 
> at org.apache.calcite.sql.SqlNode.toSqlString(SqlNode.java:158) 
> at org.apache.calcite.sql.SqlNode.toString(SqlNode.java:125) 
> at java.lang.String.valueOf(String.java:2994) 
> at java.lang.StringBuilder.append(StringBuilder.java:131) 
> at 
> org.apache.calcite.sql2rel.ReflectiveConvertletTable$1.convertCall(ReflectiveConvertletTable.java:90)
>  
> at 
> org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4684)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4020)
>  
> at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) 
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4586)
>  
> at 
> org.apache.calcite.sql2rel.StandardConvertletTable$AvgVarianceConvertlet.convertCall(StandardConvertletTable.java:1190)
> at 
> org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1891)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.access$1800(SqlToRelConverter.java:215)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4579)
>  
> at 
> org.apache.calcite.sql2rel.StandardConvertletTable$12.convertCall(StandardConvertletTable.java:267)
>  
> at 
> org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4684)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4020)
>  
> at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) 
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4586)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2862)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2710)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2073)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1965)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:2288)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1999)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1953)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2031)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2031)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:643)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2073)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1965)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:2288)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1999)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1953)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:643)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:624)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3084)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:560)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertWith(SqlToRelConverter.java:3931)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3098)
>  
> at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:560)\{code}
>  
> Because a Cast SqlCall  is created in StandardConvertletTable.expandAvg 
> method, which only contains one operands. That's is volatile with assertion 
> in SqlCastFunction.|



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to