diff --git serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java index 1354680584..a775907436 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/ColumnProjectionUtils.java @@ -113,6 +113,10 @@ public static void setReadColumns(Configuration conf, List ids) { * (e.g. RCFile and ORC) can know what columns are needed. */ public static void appendReadColumns(Configuration conf, List ids) { + if (ids == null || ids.isEmpty()) { + conf.setBoolean(READ_ALL_COLUMNS, false); + return; + } String id = toReadColumnIDString(ids); String old = conf.get(READ_COLUMN_IDS_CONF_STR, null); String newConfStr = id; 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;