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

TANG Wen-hui edited comment on CALCITE-3216 at 3/26/20, 9:51 AM:
-----------------------------------------------------------------

I am working on this issue, it seems that EnumerableUnion does not processes 
the inputs' RowType which are compatible but not totally same. I think we shoud 
unify the RowType of the inputs with the RowType of Union before the codegen 
phase of inputs, because during the codegen phase, the RowType of the inputs 
has been already translated to Java class.

Or we can optimize CastingEnumerator to realize Enumerable type cast during the 
codegen phase. 


was (Author: winipanda):
I am working on this issue, it seems that EnumerableUnion does not processes 
the inputs' RowType which are compatible but not totally same. I think we shoud 
unify the RowType of the inputs with the RowType of Union before the codegen 
phase of inputs, because during the codegen phase, the RowType of the inputs 
has been already translated to Java class.

Or we can optimize CastingEnumerator to realize Enumerable type cast. 

> ClassCastException when running window function over union
> ----------------------------------------------------------
>
>                 Key: CALCITE-3216
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3216
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Laurent Goujon
>            Priority: Major
>
> I discovered an issue in Calcite execution engine which can be captured by 
> this simple query:
> {code:sql}
> select *, count(*) over (partition by "id") from (
> select "id" from (VALUES(CAST(1 AS TINYINT))) "foo"("id")
> union
> select "id" from (VALUES(2)) "foo"("id"))
> {code}
> When running this query using JdbcTest for example, I got the following 
> stacktrace:
> {noformat}
> Caused by: java.lang.ClassCastException: java.lang.Byte cannot be cast to 
> java.lang.Integer
>       at Baz$3.apply(ANONYMOUS.java:55)
>       at 
> org.apache.calcite.linq4j.DefaultEnumerable.foreach(DefaultEnumerable.java:77)
>       at Baz.bind(Baz.java:43)
>       at 
> org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:355)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:316)
>       at 
> org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506)
>       at 
> org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497)
>       at 
> org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:1)
>       at 
> org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:667)
>       at 
> org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:566)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
>       at 
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
> {noformat}



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

Reply via email to