Thanks for the reference. I'll get used to it. But it was an unpleasant surprise. I wish I had some warning earlier, before a surprising value came out of schema resolution. Mistakes that are found earlier are often cheaper to correct.
It seems like it would better for schema parsing (or perhaps resolution) to fail if the default value doesn't match the first type in the union. That would require people to clarify existing schemas. Would it cause trouble in other ways? - John Kristian > From: Doug Cutting <[email protected]> > Reply-To: <[email protected]> > Date: Mon, 16 Aug 2010 12:03:18 -0700 > To: <[email protected]> > Subject: Re: field union default (in Java) > > On 08/16/2010 11:34 AM, John Kristian wrote: >> It seems tricky to add a nullable field with a default (for compatibility >> with previous versions). I find that the type of the default value must be >> declared first in the union. For example, this works: >> >> {"name":"myField", "type":["int", "null"], "default": 3} >> >> But this doesn't: >> >> {"name":"myField", "type":["null", "int"], "default": 3} >> >> When I resolve the latter from a writer's schema that doesn't declare the >> field, I get the value null, not 3. There's a similar problem with a null >> default: the resolved value is zero, not null, if "int" comes first in the >> union. > > John, > > That's the intended, specified behavior: > > "Default values for union fields correspond to the first schema in the > union." > > http://avro.apache.org/docs/current/spec.html#schema_complex > > Doug
