Description
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)
Attachments
Attachments
Issue Links
- is related to
-
AVRO-1343 Python: validate too permissive on records with extra fields
- Patch Available