Thanks for the clarification. Yes, open a PR. Please don't assume that it will be me that reviews the PR.
Julian On Wed, Nov 4, 2020 at 7:14 AM Dmitri Bourlatchkov <[email protected]> wrote: > > Hi Julian, > > Apologies for pinging directly. Does the information below answer your > previous question about this or would you like me to go into more details? > > Does it sound worth a Jira ticket (and PR)? > > Thanks, > Dmitri. > > On Fri, 30 Oct 2020 at 17:25, Dmitri Bourlatchkov < > [email protected]> wrote: > > > > [...] 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...] > >> > >
