[ https://issues.apache.org/jira/browse/AVRO-2647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17062145#comment-17062145 ]
Andy Le commented on AVRO-2647: ------------------------------- [~rogpeppe] [~rskraba] Can we just throw errors while encountering such ambiguous schema? > specification does not fully specify semantics for unions in default types > -------------------------------------------------------------------------- > > Key: AVRO-2647 > URL: https://issues.apache.org/jira/browse/AVRO-2647 > Project: Apache Avro > Issue Type: Bug > Components: doc > Reporter: Roger > Priority: Minor > > Currently the specification does not make the semantics clear for union types > within complex types clear. In particular, the spec talks about union fields, > but leaves the semantics for unions in other contexts unspecified. > Here's an example which is undefined according to the current specification: > {code:json} > { > "type": "record", > "name": "R", > "fields": [ > { > "name": "F", > "type": { > "type": "array", > "items": [ > { > "type": "enum", > "name": "E1", > "symbols": ["A", "B"] > }, > { > "type": "enum", > "name": "E2", > "symbols": ["B", "A", "C"] > } > ] > }, > "default": ["A", "B", "C"] > } > ] > } > {code} > By experiment, most implementations seem to have chosen the semantics that > are documented in this PR. > In Java, the schema above is parsed without error, but when attempting to use > the default value, it fails with a NullPointerException (trying to find the > symbol C in E1). (Thanks for Ryan Skraba for this). > In [gogen-avro|https://github.com/actgardner/gogen-avro] it generates invalid > code because it's assuming E1 but generating the symbol for "C" anyway. > FWIW at some point in the future, I believe that it would be nice to align > the default value specification with the JSON encoding for Avro so there > aren't two subtly different JSON encodings of an Avro value. -- This message was sent by Atlassian Jira (v8.3.4#803005)