You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by to...@apache.org on 2015/08/25 16:27:56 UTC

svn commit: r1697684 - in /avro/branches/branch-1.8: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java

Author: tomwhite
Date: Tue Aug 25 14:27:55 2015
New Revision: 1697684

URL: http://svn.apache.org/r1697684
Log:
AVRO-1676. Java: Do not treat enum symbols as immutable when deep copying. Contributed by Mike Rodriguez.

Modified:
    avro/branches/branch-1.8/CHANGES.txt
    avro/branches/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
    avro/branches/branch-1.8/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java

Modified: avro/branches/branch-1.8/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.8/CHANGES.txt?rev=1697684&r1=1697683&r2=1697684&view=diff
==============================================================================
--- avro/branches/branch-1.8/CHANGES.txt (original)
+++ avro/branches/branch-1.8/CHANGES.txt Tue Aug 25 14:27:55 2015
@@ -181,6 +181,9 @@ Avro 1.8.0 (10 August 2014)
     AVRO-1491. Avro.ipc.dll not included in release zip/build file.
     (Dmitry Kovalev via tomwhite)
 
+    AVRO-1676. Java: Do not treat enum symbols as immutable when deep copying.
+    (Mike Rodriguez via tomwhite)
+
 Avro 1.7.7 (23 July 2014)
 
   NEW FEATURES

Modified: avro/branches/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?rev=1697684&r1=1697683&r2=1697684&view=diff
==============================================================================
--- avro/branches/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java (original)
+++ avro/branches/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java Tue Aug 25 14:27:55 2015
@@ -1049,8 +1049,7 @@ public class GenericData {
       case DOUBLE:
         return value; // immutable
       case ENUM:
-        // Enums are immutable; shallow copy will suffice
-        return value;
+        return (T)createEnum(value.toString(), schema);
       case FIXED:
         return (T)createFixed(null, ((GenericFixed) value).bytes(), schema);
       case FLOAT:

Modified: avro/branches/branch-1.8/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.8/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java?rev=1697684&r1=1697683&r2=1697684&view=diff
==============================================================================
--- avro/branches/branch-1.8/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java (original)
+++ avro/branches/branch-1.8/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificData.java Tue Aug 25 14:27:55 2015
@@ -46,6 +46,8 @@ import org.apache.avro.test.MD5;
 import org.apache.avro.test.Kind;
 import org.apache.avro.test.Reserved;
 
+import org.apache.avro.generic.GenericRecord;
+
 public class TestSpecificData {
   
   @Test
@@ -101,6 +103,16 @@ public class TestSpecificData {
         new SpecificDatumReader<Object>());
 }
 
+  @Test public void testConvertGenericToSpecific() {
+    GenericRecord generic = new GenericData.Record(TestRecord.SCHEMA$);
+    generic.put("name", "foo");
+    generic.put("kind", new GenericData.EnumSymbol(Kind.SCHEMA$, "BAR"));
+    generic.put("hash", new GenericData.Fixed
+                (MD5.SCHEMA$, new byte[]{0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5}));
+    TestRecord specific =
+      (TestRecord)SpecificData.get().deepCopy(TestRecord.SCHEMA$, generic);
+  }
+
   @Test public void testGetClassSchema() throws Exception {
     Assert.assertEquals(TestRecord.getClassSchema(), TestRecord.SCHEMA$);
     Assert.assertEquals(MD5.getClassSchema(), MD5.SCHEMA$);