> [...] I wanted to get a better idea what circumstances cause it. In this particular case I came across this failure while experimenting with SQL support in Stargate [1], which uses Apache Cassandra for storage and Cassandra's float type is actually 32-bit [2], so it naturally maps to java float.
In my use case data from storage is wired to Avatica's Frame objects via a custom Meta implementation. [1] https://github.com/stargate/stargate [2] https://cassandra.apache.org/doc/latest/cql/types.html On Fri, 30 Oct 2020 at 14:57, Dmitri Bourlatchkov < [email protected]> wrote: > Hello, > > I noticed that if the rows passed to org.apache.calcite.avatica.Meta.Frame > contain Float values, the following exception [1] occurs when the frame is > sent to the client with PROTOBUF serialization. > > Would this be considered a valid use case? > > I can only reproduce it in unit tests or with custom code using the > Avatica server. If Avatica is corrected to a JDBC backend, it appears to > always convert float values to Double and this failure mode does not > manifest. > > A similar class cast problem occurs with char values. > > What do you think? > > If you think it is worth fixing, I should be able to submit a pull request > quickly. I believe the fix is fairly small. > > Thanks, > Dmitri. > > [1] Exception snippet: > java.lang.ClassCastException: java.lang.Long cannot be cast to > java.lang.Float > at > org.apache.calcite.avatica.remote.TypedValue.writeToProtoWithType(TypedValue.java:600) > at > org.apache.calcite.avatica.remote.TypedValue.toProto(TypedValue.java:805) > at org.apache.calcite.avatica.Meta$Frame.serializeScalar(Meta.java:991) > at org.apache.calcite.avatica.Meta$Frame.parseColumn(Meta.java:977) > at org.apache.calcite.avatica.Meta$Frame.toProto(Meta.java:942) > at > org.apache.calcite.avatica.remote.Service$FetchResponse.serialize(Service.java:1468) > [...snip...] >
