Author: khorgath Date: Sat Aug 17 00:42:16 2013 New Revision: 1514929 URL: http://svn.apache.org/r1514929 Log: HIVE-5105 HCatSchema.remove(HCatFieldSchema hcatFieldSchema) does not clean up fieldPositionMap (Eugene Koifman via Sushanth Sowmyan)
Modified: hive/trunk/hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatSchema.java hive/trunk/hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java Modified: hive/trunk/hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatSchema.java URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatSchema.java?rev=1514929&r1=1514928&r2=1514929&view=diff ============================================================================== --- hive/trunk/hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatSchema.java (original) +++ hive/trunk/hcatalog/core/src/main/java/org/apache/hcatalog/data/schema/HCatSchema.java Sat Aug 17 00:42:16 2013 @@ -36,6 +36,7 @@ public class HCatSchema implements Seria private static final long serialVersionUID = 1L; private final List<HCatFieldSchema> fieldSchemas; + //HCatFieldSchema.getName()->position private final Map<String, Integer> fieldPositionMap; private final List<String> fieldNames; @@ -118,7 +119,7 @@ public class HCatSchema implements Seria } fieldSchemas.remove(hcatFieldSchema); - fieldPositionMap.remove(hcatFieldSchema); + fieldPositionMap.remove(hcatFieldSchema.getName()); fieldNames.remove(hcatFieldSchema.getName()); } Modified: hive/trunk/hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java?rev=1514929&r1=1514928&r2=1514929&view=diff ============================================================================== --- hive/trunk/hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java (original) +++ hive/trunk/hcatalog/core/src/test/java/org/apache/hcatalog/data/schema/TestHCatSchema.java Sat Aug 17 00:42:16 2013 @@ -76,4 +76,21 @@ public class TestHCatSchema extends Test assertTrue(iae.getMessage().contains("Field named memberID already exists")); } } + public void testRemoveAddField() throws HCatException { + List<HCatFieldSchema> fieldSchemaList = new ArrayList<HCatFieldSchema>(); + + fieldSchemaList.add(new HCatFieldSchema("memberID", HCatFieldSchema.Type.INT, "as a number")); + HCatFieldSchema locationField = new HCatFieldSchema("location", HCatFieldSchema.Type.STRING, "there's Waldo"); + fieldSchemaList.add(locationField); + HCatSchema schema = new HCatSchema(fieldSchemaList); + schema.remove(locationField); + Integer position = schema.getPosition(locationField.getName()); + assertTrue("position is not null after remove" , position == null); + try { + schema.append(locationField); + } + catch (HCatException ex) { + assertFalse(ex.getMessage(), true); + } + } }