[ https://issues.apache.org/jira/browse/AVRO-1898?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thiruvalluvan M. G. closed AVRO-1898. ------------------------------------- Closing issues that got resolved in earlier releases. > C++ library cannot parse unions with default values > --------------------------------------------------- > > Key: AVRO-1898 > URL: https://issues.apache.org/jira/browse/AVRO-1898 > Project: Apache Avro > Issue Type: Bug > Components: c++ > Affects Versions: 1.8.1 > Reporter: Hua Zhang > Assignee: Hua Zhang > Priority: Major > > I have a Avro file generated by the Java library, and when I tried to read it > using the C++ library, I got: > Unexpected type for default value: Expected 6, but found 1 > Which basically says the default value should be of type Object, but got type > Boolean. After some investigation, I found the exception is thrown when > parsing the default value of a union. Looks like the C++ library requires the > default value of a union to be an object. This is different from what the > Avro specification says, that the default value of a union should be of the > first type in the union. > This field is causing the problem: > { > "name" : "fake_name", > "type" : [ "boolean", "null" ], > "default" : false > } > From the code the C++ library is expecting: > { > "name" : "is_track_mau30", > "type" : [ "boolean", "null" ], > "default" : {"boolean": false} > } > The related code is in impl/Compiler.cc, line 284. If I change it to the > following, the Avro file can be parsed: > {code} > GenericUnion result(n); > result.selectBranch(0); > result.datum() = makeGenericDatum(n->leafAt(0), e, st); > return GenericDatum(n, result); > {code} > Why is the C++ library behaves different than the specification? Can/should > it be changed to follow the specification? It will be a breaking change > though. > Thanks and I'll be happy to contribute this change if it's deemed appropriate. -- This message was sent by Atlassian JIRA (v7.6.3#76005)