Huw Campbell created AVRO-4093:
----------------------------------
Summary: New union defaulting rules is dangerous.
Key: AVRO-4093
URL: https://issues.apache.org/jira/browse/AVRO-4093
Project: Apache Avro
Issue Type: Bug
Components: spec
Affects Versions: 1.12.0
Reporter: Huw Campbell
{{In version 1.12, the specification for unions changed, so that the default
value must be one of the values instead of the first one.}}
{{While this sounds ok at first blush, it opens a whole kettle of worms with
regards to schemas which appear correct but contain bugs.}}
{{For example, this schema has three fields, which I want defaults for, in all
cases, I want the second one, but the first will be picked.}}
{{{ "type": "record"}}
{{, "name": "demo1"}}
{{, "fields" :}}
{{ [ { "name": "enum"}}
{{ , "type":}}
{{ [ \{ "type": "enum", "name": "suit", "symbols": [ "diamonds", "hearts",
"clubs", "spades" ] }}}
{{ , \{ "type": "enum", "name": "tools", "symbols": [ "shovels", "spades",
"hammers", "drills" ] }}}
{{ ]}}
{{ , "doc": "I want tools to be the default, but if I select spades we get a
suit!"}}
{{ , "default": "spades"}}
{{ }}}
{{ , { "name": "string_enum"}}
{{ , "type":}}
{{ [ \{ "type": "string" }}}
{{ , \{ "type": "enum", "name": "tools", "symbols": [ "shovels", "spades",
"hammers", "drills" ] }}}
{{ ]}}
{{ , "doc": "I want tools to be the default, but this will be a string"}}
{{ , "default": "drill"}}
{{ }}}
{{ , { "name": "int_long"}}
{{ , "type": [ "int", "long"]}}
{{ , "doc": "I can't make this a long"}}
{{ , "default": 400000000}}
{{ }}}
{{ , { "name": "records_ambiguity"}}
{{ , "type":}}
{{ [ { "name": "xs"}}
{{ , "type":}}
{{ { "type": "record"}}
{{ , "name": "xs"}}
{{ , "fields" : [ \{ "name": "z", "type": [ "null", "int" ],
"default": null }, \{ "name": "w", "type": [ "null", "int" ], "default": null
} ]}}
{{ }}}
{{ }}}
{{ , { "name": "ys"}}
{{ , "type":}}
{{ { "type": "record"}}
{{ , "name": "ys"}}
{{ , "fields" : [ \{ "name": "a", "type": "int" } , \{ "name": "c",
"type": "string" } ]}}
{{ }}}
{{ }}}
{{ ]}}
{{ , "doc": "I want ys, hence the fields a and c, xs has everything with
defaults, so it matches and the items are discarded."}}
{{ , "default": \{ "a": 2, "c": "yes" }}}
{{ }}}
{{ ]}}
{{}}}
{{Other things which it can get wrong are "fixed", fields which have names, so
two are fine, but they could be parsed as each other, "bytes", and so on.}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)