Author: cutting
Date: Mon Aug 4 20:08:11 2014
New Revision: 1615764
URL: http://svn.apache.org/r1615764
Log:
AVRO-1544. Java: Fix GenericData#validate for unions with null. Contributed by
Matthew Hayes.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
Modified: avro/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1615764&r1=1615763&r2=1615764&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Aug 4 20:08:11 2014
@@ -12,6 +12,9 @@ Trunk (not yet released)
AVRO-1553. Java: MapReduce never uses MapOutputValueSchema (tomwhite)
+ AVRO-1544. Java: Fix GenericData#validate for unions with null.
+ (Matthew Hayes via cutting)
+
Avro 1.7.7 (23 July 2014)
NEW FEATURES
Modified:
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?rev=1615764&r1=1615763&r2=1615764&view=diff
==============================================================================
---
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
(original)
+++
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
Mon Aug 4 20:08:11 2014
@@ -375,6 +375,7 @@ public class GenericData {
}
return true;
case ENUM:
+ if (datum == null) return false;
return schema.getEnumSymbols().contains(datum.toString());
case ARRAY:
if (!(isArray(datum))) return false;
Modified:
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java?rev=1615764&r1=1615763&r2=1615764&view=diff
==============================================================================
---
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
(original)
+++
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
Mon Aug 4 20:08:11 2014
@@ -404,4 +404,40 @@ public class TestGenericData {
assertEquals(buffer, buffer_copy);
}
+
+ @Test
+ public void testValidateNullableEnum() {
+ List<Schema> unionTypes = new ArrayList<Schema>();
+ Schema schema;
+ Schema nullSchema = Schema.create(Type.NULL);
+ Schema enumSchema = Schema.createEnum("AnEnum", null, null,
Arrays.asList("X","Y","Z"));
+ GenericEnumSymbol w = new GenericData.EnumSymbol(enumSchema, "W");
+ GenericEnumSymbol x = new GenericData.EnumSymbol(enumSchema, "X");
+ GenericEnumSymbol y = new GenericData.EnumSymbol(enumSchema, "Y");
+ GenericEnumSymbol z = new GenericData.EnumSymbol(enumSchema, "Z");
+
+ // null is first
+ unionTypes.clear();
+ unionTypes.add(nullSchema);
+ unionTypes.add(enumSchema);
+ schema = Schema.createUnion(unionTypes);
+
+ assertTrue(GenericData.get().validate(schema, z));
+ assertTrue(GenericData.get().validate(schema, y));
+ assertTrue(GenericData.get().validate(schema, x));
+ assertFalse(GenericData.get().validate(schema, w));
+ assertTrue(GenericData.get().validate(schema, null));
+
+ // null is last
+ unionTypes.clear();
+ unionTypes.add(enumSchema);
+ unionTypes.add(nullSchema);
+ schema = Schema.createUnion(unionTypes);
+
+ assertTrue(GenericData.get().validate(schema, z));
+ assertTrue(GenericData.get().validate(schema, y));
+ assertTrue(GenericData.get().validate(schema, x));
+ assertFalse(GenericData.get().validate(schema, w));
+ assertTrue(GenericData.get().validate(schema, null));
+ }
}