diff --git hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatFieldSchema.java hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatFieldSchema.java index f90fefe..25bda26 100644 --- hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatFieldSchema.java +++ hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatFieldSchema.java @@ -278,5 +278,14 @@ public boolean equals(Object obj) { } return true; } - + @Override + public int hashCode() { + //result could be cached if this object were to be made immutable... + int result = 17; + result = 31 * result + (category == null ? 0 : category.hashCode()); + result = 31 * result + (fieldName == null ? 0 : fieldName.hashCode()); + result = 31 * result + (getTypeString() == null ? 0 : + getTypeString().hashCode()); + return result; + } } diff --git hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java index 17e5d93..84bbc97 100644 --- hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java +++ hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java @@ -57,6 +57,13 @@ public void testCannotAddFieldMoreThanOnce() throws HCatException { assertEquals(2, schema.getFields().size()); } + public void testHashCodeEquals() throws HCatException { + HCatFieldSchema memberID1 = new HCatFieldSchema("memberID", HCatFieldSchema.Type.INT, "as a number"); + HCatFieldSchema memberID2 = new HCatFieldSchema("memberID", HCatFieldSchema.Type.INT, "as a number"); + assertTrue("Expected objects to be equal", memberID1.equals(memberID2)); + assertTrue("Expected hash codes to be equal", memberID1.hashCode() == memberID2.hashCode()); + } + public void testCannotInstantiateSchemaWithRepeatedFieldNames() throws HCatException { List fieldSchemaList = new ArrayList();