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);