[ https://issues.apache.org/jira/browse/CRUNCH-547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14638748#comment-14638748 ]
Gabriel Reid commented on CRUNCH-547: ------------------------------------- Patch looks good to me, but would be good to have a test for it in there somewhere. > AvroType operators can create nested unions > ------------------------------------------- > > Key: CRUNCH-547 > URL: https://issues.apache.org/jira/browse/CRUNCH-547 > Project: Crunch > Issue Type: Bug > Components: IO > Reporter: Adric Eckstein > Attachments: CRUNCH-547.patch > > > When using avro reflection to create PTypes, the type might represent a union > type, as specified by the @Union annotation. Derived types from this, such > as tableOf() and collections() will create a null union from this (already > union) type and create a nested union which throws an AvroRuntimeException. > @org.apache.avro.reflect.Union({ Foo1.class, Foo2.class }) > public static interface Foo { > public String getFoo(); > } > public static class Foo1 implements Foo { > private final Double value = 1.0; > @Override > public String getFoo() { > return value.toString(); > } > } > public static class Foo2 implements Foo { > private final Integer value = 2; > @Override > public String getFoo() { > return value.toString(); > } > } > Schema schema = ReflectData.get().getSchema(Foo.class); > AvroType<Foo> ptype = Avros.reflects(Foo.class, schema); > Avros.tableOf(Avros.strings(), ptype); > Avros.collections(ptype); > Exception in thread "main" org.apache.avro.AvroRuntimeException: Nested > union: [["double","string"],"null"] > ... > Seems like the methods Avros.allowNulls() and AvroTableType.nullable() both > are calling Schema.createUnion(unionSchema, nullSchema), and could add an > extra case statement to use the already existing union schema. -- This message was sent by Atlassian JIRA (v6.3.4#6332)