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:23:55 UTC
svn commit: r1141677 - in /avro/trunk: 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:23:55 2011
New Revision: 1141677
URL: http://svn.apache.org/viewvc?rev=1141677&view=rev
Log:
AVRO-838. Java: Permit invalid characters in record and field names of schemas read from data files, for compatibility with 1.4.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1141677&r1=1141676&r2=1141677&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Thu Jun 30 19:23:55 2011
@@ -51,6 +51,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/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java?rev=1141677&r1=1141676&r2=1141677&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java Thu Jun 30 19:23:55 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/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java?rev=1141677&r1=1141676&r2=1141677&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java Thu Jun 30 19:23:55 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/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java?rev=1141677&r1=1141676&r2=1141677&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java (original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java Thu Jun 30 19:23:55 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\":"