Index: ql/src/test/results/clientpositive/explode_null.q.out =================================================================== --- ql/src/test/results/clientpositive/explode_null.q.out (revision 0) +++ ql/src/test/results/clientpositive/explode_null.q.out (revision 0) @@ -0,0 +1,17 @@ +PREHOOK: query: SELECT explode(col) AS myCol FROM + (SELECT array(1,2,3) AS col FROM src LIMIT 1 + UNION ALL + SELECT IF(false, array(1,2,3), NULL) AS col FROM src LIMIT 1) a +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/task2/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-08_15-57-57_440_1997210643218047348/10000 +POSTHOOK: query: SELECT explode(col) AS myCol FROM + (SELECT array(1,2,3) AS col FROM src LIMIT 1 + UNION ALL + SELECT IF(false, array(1,2,3), NULL) AS col FROM src LIMIT 1) a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/task2/trunk/VENDOR.hive/trunk/build/ql/scratchdir/hive_2010-04-08_15-57-57_440_1997210643218047348/10000 +1 +2 +3 Index: ql/src/test/queries/clientpositive/explode_null.q =================================================================== --- ql/src/test/queries/clientpositive/explode_null.q (revision 0) +++ ql/src/test/queries/clientpositive/explode_null.q (revision 0) @@ -0,0 +1,5 @@ +SELECT explode(col) AS myCol FROM + (SELECT array(1,2,3) AS col FROM src LIMIT 1 + UNION ALL + SELECT IF(false, array(1,2,3), NULL) AS col FROM src LIMIT 1) a; + \ No newline at end of file Index: ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFExplode.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFExplode.java (revision 5754) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFExplode.java (working copy) @@ -62,12 +62,14 @@ fieldOIs); } - private Object[] forwardObj = new Object[1]; + private final Object[] forwardObj = new Object[1]; @Override public void process(Object[] o) throws HiveException { - List list = listOI.getList(o[0]); + if(list == null) { + return; + } for (Object r : list) { forwardObj[0] = r; forward(forwardObj);