​(Calcite 1.15.0-SNASHOT and Avalitca 1.10.0)​
​I'm
workin on an adapter for in-memory NoSql
​data ​
system
​. The implementations tries to push down all supported aggregation
operations, such as AVG, MAX and COUNT. It works for most of them but fails
for COUNT:
0: jdbc:calcite:model=
​...
> SELECT COUNT(*) FROM "BookMaster";
java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.Long
at
org.apache.calcite.avatica.util.AbstractCursor$LongAccessor.getLong(AbstractCursor.java:550)
at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite.java:306)
at
org.apache.calcite.avatica.AvaticaResultSet.getObject(AvaticaResultSet.java:409)
at sqlline.Rows$Row.<init>(Rows.java:157)
​P
roblem IMO is that the
​COUNT result form the ​
underlaying system
​is of type
Integer while
​C
alcite expects Long
​ (e.g. BIGINT) as
hardcoded in SqlCountAggFunction
​.java.
​I can't alter the ​SqlCountAggFunction so I wonder what is the right place
in Calcite to implement/configure this type conversion? ​
​This issue looks very similar (
https://issues.apache.org/jira/browse/CALCITE-665)​ but i am not sure i
completely understand the resolution?
Thanks,
Christian​