[prev in list] [next in list] [prev in thread] [next in thread] 

List:       avro-commits
Subject:    svn commit: r1480374 - in /avro/trunk: ./ lang/java/avro/src/main/java/org/apache/avro/generic/
From:       cutting () apache ! org
Date:       2013-05-08 17:35:51
Message-ID: 20130508173552.4810F2388906 () eris ! apache ! org
[Download RAW message or body]

Author: cutting
Date: Wed May  8 17:35:51 2013
New Revision: 1480374

URL: http://svn.apache.org/r1480374
Log:
Java: Fix Trevni to correctly read unions and specific enums.

Added:
    avro/trunk/lang/java/trevni/avro/src/test/cases/enum/
    avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.avsc
    avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.json
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/main/java/org/apache/avro/generic/GenericDatumReader.java
  avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificDatumReader.java
  avro/trunk/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/AvroColumnReader.java


Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1480374&r1=1480373&r2=1480374&view=diff
 ==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed May  8 17:35:51 2013
@@ -67,6 +67,9 @@ Trunk (not yet released)
     AVRO-1306. Java mapred: Fix incorrect documentation for combiners.
     (Mina Naguib via martinkl)
 
+    AVRO-1320. Java: Fix Trevni to correctly read unions and specific enums.
+    (cutting)
+
 Avro 1.7.4 (22 February 2012)
 
   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=1480374&r1=1480373&r2=1480374&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 \
Wed May  8 17:35:51 2013 @@ -971,6 +971,12 @@ public class GenericData {
     return fixed;
   }
   
+  /** Called to create an enum value. May be overridden for alternate enum
+   * representations.  By default, returns a GenericEnumSymbol. */
+  public Object createEnum(String symbol, Schema schema) {
+    return new EnumSymbol(schema, symbol);
+  }
+
   /**
    * Called to create new record instances. Subclasses may override to use a
    * different record implementation. The returned instance must conform to the

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java
                
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java?rev=1480374&r1=1480373&r2=1480374&view=diff
 ==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java \
                (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java \
Wed May  8 17:35:51 2013 @@ -202,7 +202,7 @@ public class GenericDatumReader<D> imple
   /** Called to create an enum value. May be overridden for alternate enum
    * representations.  By default, returns a GenericEnumSymbol. */
   protected Object createEnum(String symbol, Schema schema) {
-    return new GenericData.EnumSymbol(schema, symbol);
+    return data.createEnum(symbol, schema);
   }
 
   /** Called to read an array instance.  May be overridden for alternate array

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
                
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java?rev=1480374&r1=1480373&r2=1480374&view=diff
 ==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java \
                (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java \
Wed May  8 17:35:51 2013 @@ -93,6 +93,13 @@ public class SpecificData extends Generi
   }
 
   @Override
+  public Object createEnum(String symbol, Schema schema) {
+    Class c = getClass(schema);
+    if (c == null) return super.createEnum(symbol, schema); // punt to generic
+    return Enum.valueOf(c, symbol);
+  }
+
+  @Override
   protected Schema getEnumSchema(Object datum) {
     return (datum instanceof Enum)
       ? getSchema(datum.getClass())

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificDatumReader.java
                
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/a \
vro/specific/SpecificDatumReader.java?rev=1480374&r1=1480373&r2=1480374&view=diff \
                ==============================================================================
                
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificDatumReader.java \
                (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificDatumReader.java \
Wed May  8 17:35:51 2013 @@ -72,14 +72,6 @@ public class SpecificDatumReader<T> exte
     super.setSchema(actual);
   }
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Object createEnum(String symbol, Schema schema) {
-    Class c = getSpecificData().getClass(schema);
-    if (c == null) return super.createEnum(symbol, schema); // punt to generic
-    return Enum.valueOf(c, symbol);
-  }
-
   @Override protected Class findStringClass(Schema schema) {
     Class stringClass = null;
     switch (schema.getType()) {

Modified: avro/trunk/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/AvroColumnReader.java
                
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/trevni/avro/src/main/java/org/a \
pache/trevni/avro/AvroColumnReader.java?rev=1480374&r1=1480373&r2=1480374&view=diff \
                ==============================================================================
                
--- avro/trunk/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/AvroColumnReader.java \
                (original)
+++ avro/trunk/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/AvroColumnReader.java \
Wed May  8 17:35:51 2013 @@ -238,7 +238,7 @@ public class AvroColumnReader<D>
       for (Schema branch : s.getTypes()) {
         if (branch.getType() == Schema.Type.NULL) continue;
         if (values[column].nextLength() == 1) {
-          value = nextValue(s, column);
+          value = nextValue(branch, column);
           column++;
           if (!isSimple(branch))
             value = read(branch);
@@ -257,9 +257,9 @@ public class AvroColumnReader<D>
     
     switch (s.getType()) {
     case ENUM:
-      return new GenericData.EnumSymbol(s, s.getEnumSymbols().get((Integer)v));
+      return model.createEnum(s.getEnumSymbols().get((Integer)v), s);
     case FIXED:
-      return new GenericData.Fixed(s, ((ByteBuffer)v).array());
+      return model.createFixed(null, ((ByteBuffer)v).array(), s);
     }
 
     return v;

Added: avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.avsc
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.avsc?rev=1480374&view=auto
 ==============================================================================
--- avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.avsc (added)
+++ avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.avsc Wed May  8 \
17:35:51 2013 @@ -0,0 +1,17 @@
+{
+    "type": "record",
+    "name": "Test",
+    "fields": [
+        {
+            "name": "kind",
+            "type": [
+                "null",
+                {
+                    "name": "Kind",
+                    "type": "enum",
+                    "symbols": ["X", "Y", "Z"]
+                }
+            ]
+        }
+    ]
+}

Added: avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.json
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.json?rev=1480374&view=auto
 ==============================================================================
--- avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.json (added)
+++ avro/trunk/lang/java/trevni/avro/src/test/cases/enum/input.json Wed May  8 \
17:35:51 2013 @@ -0,0 +1,4 @@
+{"kind":null}
+{"kind":{"Kind":"X"}}
+{"kind":{"Kind":"Y"}}
+{"kind":{"Kind":"Z"}}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic