[ 
https://issues.apache.org/jira/browse/AVRO-1968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16756877#comment-16756877
 ] 

John Patrick Boueri commented on AVRO-1968:
-------------------------------------------

Hello [~neilf]

I would like fix this issue by breaking out of this loop in the case of the 
first match

[https://github.com/apache/avro/blob/master/lang/py/src/avro/io.py#L872-L876]

If you agree I can go ahead and make the patch.

 

Thanks!

> Python DatumWriter seems to evaluate union types in reverse order 
> ------------------------------------------------------------------
>
>                 Key: AVRO-1968
>                 URL: https://issues.apache.org/jira/browse/AVRO-1968
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: python
>    Affects Versions: 1.8.1
>            Reporter: Neil Ferguson
>            Priority: Major
>         Attachments: avro_test.py
>
>
> The Python DatumWriter seems to evaluate types in a union in reverse order. 
> For example, with the following schema:
> {noformat}
>         {
>             "type": "record",
>             "name": "MyRecord",
>             "fields": [
>                 {"name": "my_field", "type": ["boolean", "double"]}
>             ]
>         }
> {noformat}
> If I set my_field to a boolean in my data, it seems to be encoded as a 
> double. However, if I reverse the order of the types in my union 
> ({{["double", "boolean"]}}) it seems to be encoded as a boolean.
> This seems unintuitive for a couple of reasons:
>  * I'd expect the types in the union to be evaluated in the order they are 
> specified, but they seem to be evaluated in reverse order
>  * Encoding a boolean as a double is a bit weird
> I'm not sure if this is a bug or expected behaviour though. If this is the 
> expected behaviour (or it can't be changed without breaking things) then it 
> would be nice if this was documented somewhere (I searched by couldn't find 
> anything), as it's pretty unintuitive.
> I've attached a full test case. The test case encodes and then decodes the 
> data with both the original schema and the reversed version. For me it prints:
> {noformat}
> Type: <type 'float'>
> Type from reversed schema: <type 'bool'>
> {noformat}
> Ideally I'd expect the type to be 'bool' both times, but failing that I'd 
> expect the type to be 'bool' the first time, and 'float' the second time. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to