avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curt Hagenlocher <c...@hagenlocher.org>
Subject Re: How is a union of multiple primitives handled?
Date Fri, 05 Apr 2013 16:31:40 GMT
This is a Python-specific issue, and results from the interplay of two
implementation-specific features:
1) Python ints, longs and floats can all legally be serialized as an Avro
double (or float). See io.py, line 118.
2) The union serializer picks the first type that allows legal
serialization.

I would be surprised if you got the same thing in Java; it's not the kind
of behavior I would expect from a statically-typed language.


On Fri, Apr 5, 2013 at 9:11 AM, Jonathan Coveney <jcoveney@gmail.com> wrote:

> The following gist illustrates my question:
>
> https://gist.github.com/jcoveney/5320422
>
> It seems pretty surprising to me that all of these cases all return 1.0,
> at least in python (I will now do this in Java, it's just more verbose). Is
> this an issue with python? Is this an issue period? Is this unexpected?
>
> At the very least, if you write 1 to ["int", "double"] you'd expect that
> it'd get serialized as an int? Or is there a set of rules governing which
> primitive type to choose? Is it implementation dependent?
>
> Also, the case where it throws an error, then returns 0 seems completely
> wrong. Why would it do that at all? Is it that once it throws an error, it
> gets into an inconsistent state and nothing is guaranteed?
>
> Thanks for helping me understand this!
>

Mime
View raw message