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 2012/05/16 23:57:46 UTC
svn commit: r1339387 - in /avro/trunk: ./
lang/java/avro/src/main/java/org/apache/avro/
lang/java/avro/src/main/java/org/apache/avro/generic/
lang/java/avro/src/test/java/org/apache/avro/generic/
lang/java/ipc/src/test/java/org/apache/avro/
Author: cutting
Date: Wed May 16 21:57:46 2012
New Revision: 1339387
URL: http://svn.apache.org/viewvc?rev=1339387&view=rev
Log:
AVRO-1049. Java: Fix GenericData.Record#equals() to correctly compare schemas and fix Schema#equals() to consider order.
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/generic/GenericData.java
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.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=1339387&r1=1339386&r2=1339387&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed May 16 21:57:46 2012
@@ -62,6 +62,9 @@ Avro 1.6.3 (5 March 2012)
parameters are a union of a primitive and null.
(Hamed Asghari via cutting)
+ AVRO-1049. Java: Fix GenericData.Record#equals() to correctly
+ compare schemas and fix Schema#equals() to consider order. (cutting)
+
IMPROVEMENTS
AVRO-1030. Fix a broken link in the documentation.
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=1339387&r1=1339386&r2=1339387&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 Wed May 16 21:57:46 2012
@@ -451,6 +451,7 @@ public abstract class Schema {
return (name.equals(that.name)) &&
(schema.equals(that.schema)) &&
defaultValueEquals(that.defaultValue) &&
+ (order == that.order) &&
props.equals(that.props);
}
public int hashCode() { return name.hashCode() + schema.computeHash(); }
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=1339387&r1=1339386&r2=1339387&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 16 21:57:46 2012
@@ -103,7 +103,7 @@ public class GenericData {
if (o == this) return true; // identical object
if (!(o instanceof Record)) return false; // not a record
Record that = (Record)o;
- if (!schema.getFullName().equals(that.schema.getFullName()))
+ if (!this.schema.equals(that.schema))
return false; // not the same schema
return GenericData.get().compare(this, that, schema, true) == 0;
}
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=1339387&r1=1339386&r2=1339387&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 Wed May 16 21:57:46 2012
@@ -140,6 +140,30 @@ public class TestGenericData {
return schema;
}
+ @Test public void testEquals2() {
+ Schema schema1 = Schema.createRecord("r", null, "x", false);
+ List<Field> fields1 = new ArrayList<Field>();
+ fields1.add(new Field("a", Schema.create(Schema.Type.STRING), null, null,
+ Field.Order.IGNORE));
+ schema1.setFields(fields1);
+
+ // only differs in field order
+ Schema schema2 = Schema.createRecord("r", null, "x", false);
+ List<Field> fields2 = new ArrayList<Field>();
+ fields2.add(new Field("a", Schema.create(Schema.Type.STRING), null, null,
+ Field.Order.ASCENDING));
+ schema2.setFields(fields2);
+
+ GenericRecord record1 = new GenericData.Record(schema1);
+ record1.put("a", "1");
+
+ GenericRecord record2 = new GenericData.Record(schema2);
+ record2.put("a", "2");
+
+ assertFalse(record2.equals(record1));
+ assertFalse(record1.equals(record2));
+ }
+
@Test
public void testRecordGetFieldDoesntExist() throws Exception {
List<Field> fields = new ArrayList<Field>();
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=1339387&r1=1339386&r2=1339387&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 Wed May 16 21:57:46 2012
@@ -191,6 +191,10 @@ public class TestSchema {
+"[{\"name\":\"f\", \"type\":\"long\", \"foo\":\"bar\"}]}";
Schema schema = Schema.parse(recordJson);
+ GenericData.Record record = new GenericData.Record(schema);
+ record.put("f", 11L);
+ check(recordJson, "{\"f\":11}", record, false);
+
// test field props
assertEquals("bar", schema.getField("f").getProp("foo"));
assertEquals("bar", Schema.parse(schema.toString())
@@ -198,9 +202,6 @@ public class TestSchema {
schema.getField("f").addProp("baz", "boo");
assertEquals("boo", schema.getField("f").getProp("baz"));
- GenericData.Record record = new GenericData.Record(schema);
- record.put("f", 11L);
- check(recordJson, "{\"f\":11}", record, false);
checkParseError("{\"type\":\"record\"}");
checkParseError("{\"type\":\"record\",\"name\":\"X\"}");
checkParseError("{\"type\":\"record\",\"name\":\"X\",\"fields\":\"Y\"}");