[
https://issues.apache.org/jira/browse/CALCITE-580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14314753#comment-14314753
]
Julian Hyde commented on CALCITE-580:
-------------------------------------
I'm done with this case, but you're welcome to refactor that code into a
method. In fact for each column we should call "get" for each type allowed by
the JDBC compatibility matrix (e.g. for an INTEGER column you can call getLong
or getShort but not getTimestamp). JdbcTest.CONVERSIONS has that matrix -- I
typed it in from the JDBC spec -- but it's not currently used.
> Average aggregation on an Integer column throws java.lang.ClassCastException
> ----------------------------------------------------------------------------
>
> Key: CALCITE-580
> URL: https://issues.apache.org/jira/browse/CALCITE-580
> Project: Calcite
> Issue Type: Bug
> Reporter: Low Chin Wei
> Assignee: Julian Hyde
> Fix For: 1.1.0-incubating
>
>
> There are 2 Integer columns: a, c in table abc.
> While running the following sql, it throw the ClassCastException:
> select a, avg(c) as agg from abc group by a
> Exception in thread "main" java.lang.ClassCastException: java.lang.Long
> incompatible with java.lang.Integer
> at
> org.apache.calcite.avatica.util.AbstractCursor$IntAccessor.getInt(AbstractCursor.java:460)
> at
> org.apache.calcite.avatica.AvaticaResultSet.getInt(AvaticaResultSet.java:311)
> The generated code that I think causing the issue, it try to cast the result
> to long.
> public Object current() {
> final Object[] current = (Object[]) inputEnumerator.current();
> return new Object[] {
> current[0],
> (long) org.apache.calcite.runtime.SqlFunctions.toInt(current[1]) /
> org.apache.calcite.runtime.SqlFunctions.toLong(current[2])};
> }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)