diff --git serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java index 1354680584..9844166bc5 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java @@ -26,6 +26,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.util.StringUtils; +import org.apache.hive.common.util.HiveStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -115,10 +116,7 @@ public static void setReadColumns(Configuration conf, List ids) { public static void appendReadColumns(Configuration conf, List ids) { String id = toReadColumnIDString(ids); String old = conf.get(READ_COLUMN_IDS_CONF_STR, null); - String newConfStr = id; - if (old != null && !old.isEmpty()) { - newConfStr = newConfStr + StringUtils.COMMA_STR + old; - } + String newConfStr = HiveStringUtils.joinIgnoringEmpty(new String[] {id, old}, StringUtils.COMMA); setReadColumnIDConf(conf, newConfStr); // Set READ_ALL_COLUMNS to false conf.setBoolean(READ_ALL_COLUMNS, false); diff --git serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java index 2b81b5468e..fbd9b07bc1 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java +++ serde/src/test/org/apache/hadoop/hive/serde2/TestColumnProjectionUtils.java @@ -85,6 +85,20 @@ public void testReadColumnIds() { } @Test + public void testMultipleIdsWithEmpty() { + List ids1 = Arrays.asList(1, 2); + List ids2 = new ArrayList(); + List ids3 = Arrays.asList(2, 3); + + ColumnProjectionUtils.appendReadColumns(conf, ids1); + ColumnProjectionUtils.appendReadColumns(conf, ids2); + ColumnProjectionUtils.appendReadColumns(conf, ids3); + + List actual = ColumnProjectionUtils.getReadColumnIDs(conf); + assertEquals(Arrays.asList(2, 3, 1), actual); + } + + @Test public void testDeprecatedMethods() { List columnIds = new ArrayList(); List actual;