This is an automated email from the ASF dual-hosted git repository.

nkollar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/master by this push:
     new f6417e8  AVRO-2415 - Union resolver regression when dealing with 
arrays (#537)
f6417e8 is described below

commit f6417e88b9973e932b8bad66fa6894d42c43c663
Author: Martin Jubelgas <[email protected]>
AuthorDate: Mon Jun 17 11:23:16 2019 +0200

    AVRO-2415 - Union resolver regression when dealing with arrays (#537)
---
 .../org/apache/avro/io/parsing/ResolvingGrammarGenerator.java | 11 +++++------
 .../src/test/java/org/apache/avro/TestSchemaValidation.java   |  3 +++
 lang/java/avro/src/test/java/org/apache/avro/TestSchemas.java |  3 +++
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
 
b/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
index f3f61e2..b3d173f 100644
--- 
a/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
+++ 
b/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
@@ -91,6 +91,11 @@ public class ResolvingGrammarGenerator extends 
ValidatingGrammarGenerator {
     } else if (action instanceof Resolver.Promote) {
       return Symbol.resolve(simpleGen(action.writer, seen), 
simpleGen(action.reader, seen));
 
+    } else if (action instanceof Resolver.ReaderUnion) {
+      Resolver.ReaderUnion ru = (Resolver.ReaderUnion) action;
+      Symbol s = generate(ru.actualAction, seen);
+      return Symbol.seq(Symbol.unionAdjustAction(ru.firstMatch, s), 
Symbol.UNION);
+
     } else if (action.writer.getType() == Schema.Type.ARRAY) {
       Symbol es = generate(((Resolver.Container) action).elementAction, seen);
       return Symbol.seq(Symbol.repeat(Symbol.ARRAY_END, es), 
Symbol.ARRAY_START);
@@ -112,12 +117,6 @@ public class ResolvingGrammarGenerator extends 
ValidatingGrammarGenerator {
         i++;
       }
       return Symbol.seq(Symbol.alt(symbols, labels), 
Symbol.WRITER_UNION_ACTION);
-
-    } else if (action instanceof Resolver.ReaderUnion) {
-      Resolver.ReaderUnion ru = (Resolver.ReaderUnion) action;
-      Symbol s = generate(ru.actualAction, seen);
-      return Symbol.seq(Symbol.unionAdjustAction(ru.firstMatch, s), 
Symbol.UNION);
-
     } else if (action instanceof Resolver.EnumAdjust) {
       Resolver.EnumAdjust e = (Resolver.EnumAdjust) action;
       Object[] adjs = new Object[e.adjustments.length];
diff --git 
a/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java 
b/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java
index 23f06f2..f338ad4 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java
@@ -77,6 +77,9 @@ public class TestSchemaValidation {
       new ReaderWriter(BYTES_UNION_SCHEMA, STRING_UNION_SCHEMA),
       new ReaderWriter(DOUBLE_UNION_SCHEMA, INT_FLOAT_UNION_SCHEMA),
 
+      new ReaderWriter(NULL_INT_ARRAY_UNION_SCHEMA, INT_ARRAY_SCHEMA),
+      new ReaderWriter(NULL_INT_MAP_UNION_SCHEMA, INT_MAP_SCHEMA),
+
       // Readers capable of reading all branches of a union are compatible
       new ReaderWriter(FLOAT_SCHEMA, INT_FLOAT_UNION_SCHEMA), new 
ReaderWriter(LONG_SCHEMA, INT_LONG_UNION_SCHEMA),
       new ReaderWriter(DOUBLE_SCHEMA, INT_FLOAT_UNION_SCHEMA),
diff --git a/lang/java/avro/src/test/java/org/apache/avro/TestSchemas.java 
b/lang/java/avro/src/test/java/org/apache/avro/TestSchemas.java
index ddaf540..96c54ff 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/TestSchemas.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/TestSchemas.java
@@ -80,6 +80,9 @@ public class TestSchemas {
   static final Schema INT_LONG_FLOAT_DOUBLE_UNION_SCHEMA = Schema
       .createUnion(list(INT_SCHEMA, LONG_SCHEMA, FLOAT_SCHEMA, DOUBLE_SCHEMA));
 
+  static final Schema NULL_INT_ARRAY_UNION_SCHEMA = 
Schema.createUnion(list(NULL_SCHEMA, INT_ARRAY_SCHEMA));
+  static final Schema NULL_INT_MAP_UNION_SCHEMA = 
Schema.createUnion(list(NULL_SCHEMA, INT_MAP_SCHEMA));
+
   // Non recursive records:
   static final Schema EMPTY_RECORD1 = Schema.createRecord("Record1", null, 
null, false);
   static final Schema EMPTY_RECORD2 = Schema.createRecord("Record2", null, 
null, false);

Reply via email to