You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2011/06/30 21:25:10 UTC

svn commit: r1141678 - in /avro/branches/branch-1.5: ./ CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/Schema.java lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java

Author: cutting
Date: Thu Jun 30 19:25:09 2011
New Revision: 1141678

URL: http://svn.apache.org/viewvc?rev=1141678&view=rev
Log:
Merge -c 1141677 from trunk to 1.5 branch. Fixes: AVRO-838.

Modified:
    avro/branches/branch-1.5/   (props changed)
    avro/branches/branch-1.5/CHANGES.txt
    avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/Schema.java
    avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java
    avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java

Propchange: avro/branches/branch-1.5/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jun 30 19:25:09 2011
@@ -1 +1 @@
-/avro/trunk:1075938,1075993,1078917,1079055,1079060,1079063,1083246,1085921,1086727,1086730,1086866,1087076,1087129,1087136,1087439-1087440,1087463,1087472,1087792,1089128,1089131,1089550,1094812,1095206-1095208,1095493,1095529,1095548,1095550,1096798,1097916,1097927,1097968,1097974,1099257,1102332,1102335,1124127,1124971,1129053,1129071,1129697-1129706,1129729,1130503,1136342
+/avro/trunk:1075938,1075993,1078917,1079055,1079060,1079063,1083246,1085921,1086727,1086730,1086866,1087076,1087129,1087136,1087439-1087440,1087463,1087472,1087792,1089128,1089131,1089550,1094812,1095206-1095208,1095493,1095529,1095548,1095550,1096798,1097916,1097927,1097968,1097974,1099257,1102332,1102335,1124127,1124971,1129053,1129071,1129697-1129706,1129729,1130503,1136342,1141677

Modified: avro/branches/branch-1.5/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/CHANGES.txt?rev=1141678&r1=1141677&r2=1141678&view=diff
==============================================================================
--- avro/branches/branch-1.5/CHANGES.txt (original)
+++ avro/branches/branch-1.5/CHANGES.txt Thu Jun 30 19:25:09 2011
@@ -26,6 +26,10 @@ Avro 1.5.2 (unreleased)
     AVRO-826. C#: Add MD5 and hashcode functions to Protocol.
     (Dona Alvarez via cutting)
 
+    AVRO-838. Java: Permit invalid characters in record and field
+    names of schemas read from data files, for compatibility with
+    1.4. (cutting)
+
   BUG FIXES
 
     AVRO-818. C: Fix data file corruption bug in C library (dcreager)

Modified: avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/Schema.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/Schema.java?rev=1141678&r1=1141677&r2=1141678&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/Schema.java (original)
+++ avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/Schema.java Thu Jun 30 19:25:09 2011
@@ -909,6 +909,19 @@ public abstract class Schema {
     return parse(parseJson(jsonSchema), new Names());
   }
 
+  /** Construct a schema from <a href="http://json.org/">JSON</a> text.
+   * @param validate true if names should be validated, false if not.
+   */
+  public static Schema parse(String jsonSchema, boolean validate) {
+    boolean saved = validateNames.get();
+    try {
+      validateNames.set(validate);
+      return parse(jsonSchema);
+    } finally {
+      validateNames.set(saved);
+    }
+  }
+
   static final Map<String,Type> PRIMITIVES = new HashMap<String,Type>();
   static {
     PRIMITIVES.put("string",  Type.STRING);
@@ -956,7 +969,15 @@ public abstract class Schema {
     }
   }
   
+  private static ThreadLocal<Boolean> validateNames
+    = new ThreadLocal<Boolean>() {
+    @Override protected Boolean initialValue() {
+      return true;
+    }
+  };
+    
   private static String validateName(String name) {
+    if (!validateNames.get()) return name;        // not validating names
     int length = name.length();
     if (length == 0)
       throw new SchemaParseException("Empty name");

Modified: avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java?rev=1141678&r1=1141677&r2=1141678&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java (original)
+++ avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java Thu Jun 30 19:25:09 2011
@@ -121,7 +121,7 @@ public class DataFileStream<D> implement
     
     // finalize the header
     header.metaKeyList = Collections.unmodifiableList(header.metaKeyList);
-    header.schema = Schema.parse(getMetaString(DataFileConstants.SCHEMA));
+    header.schema = Schema.parse(getMetaString(DataFileConstants.SCHEMA),false);
     this.codec = resolveCodec();
     reader.setSchema(header.schema);
   }

Modified: avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java?rev=1141678&r1=1141677&r2=1141678&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java (original)
+++ avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java Thu Jun 30 19:25:09 2011
@@ -210,6 +210,12 @@ public class TestSchema {
                     +"{\"name\":\"f.g\",\"type\":\"int\"}]}");
   }
 
+  @Test public void testInvalidNameTolerance() {
+    Schema.parse("{\"type\":\"record\",\"name\":\"1X\",\"fields\":[]}", false);
+    Schema.parse("{\"type\":\"record\",\"name\":\"X-\",\"fields\":[]}", false);
+    Schema.parse("{\"type\":\"record\",\"name\":\"X$\",\"fields\":[]}", false);
+  }
+
   @Test
   public void testMapInRecord() throws Exception {
     String json = "{\"type\":\"record\", \"name\":\"Test\", \"fields\":"