avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marcio Silva (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-973) Union behavior not consistent
Date Fri, 10 Feb 2012 22:26:59 GMT

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

Marcio Silva commented on AVRO-973:
-----------------------------------

I agree, a full solution that resolves this issue for records would require record instances
that provided access to their schema.  I've started stubbing out some code for AVRO-283 that
uses meta-classes to create specific records, but maybe we need the equivalent of the Java
GenericContainer interface on the python side.

In order to preserve some backwards compatibility with the existing code-base, we should keep
a dict-like record option in addition to the specific record implementation.  Both should
probably provide access to the schema information in a common way.
                
> Union behavior not consistent
> -----------------------------
>
>                 Key: AVRO-973
>                 URL: https://issues.apache.org/jira/browse/AVRO-973
>             Project: Avro
>          Issue Type: Bug
>          Components: python
>    Affects Versions: 1.6.1, 1.6.2
>            Reporter: Gaurav Nanda
>              Labels: patch
>         Attachments: AVRO-973-patch-1.patch, AVRO-973-patch-2.patch, AVRO-973-patch-3.patch,
AVRO-973-wrapper.patch, AVRO-973-wrapper.patch, test_unions.py
>
>   Original Estimate: 0.25h
>  Remaining Estimate: 0.25h
>
> Python's union does not respect the order in which type is specified.
> For following schema: {"type":"map","values":["int","long","float","double","string","boolean"]},
an integer value is written as double, but it should respect the order in which types have
been specified.
> Fixed Code (io.py):
> def write_union(self, writers_schema, datum, encoder):
>    """
>    A union is encoded by first writing a long value indicating
>    the zero-based position within the union of the schema of its value.
>    The value is then encoded per the indicated schema within the union.
>    """
>    # resolve union
>    index_of_schema = -1
>    for i, candidate_schema in enumerate(writers_schema.schemas):
>      if validate(candidate_schema, datum):
>        index_of_schema = i
>        break // XXX Add break statement here XXX//
>    if index_of_schema < 0: raise AvroTypeException(writers_schema, datum)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message