Index: ql/src/test/results/clientpositive/udf_concat.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_concat.q.out (revision 0) +++ ql/src/test/results/clientpositive/udf_concat.q.out (revision 0) @@ -0,0 +1,22 @@ +query: DESCRIBE FUNCTION concat +concat(str1, str2, ... strN) - returns the concatenation of str1, str2, ... strN +query: DESCRIBE FUNCTION EXTENDED concat +concat(str1, str2, ... strN) - returns the concatenation of str1, str2, ... strN +Returns NULL if any argument is NULL. +Example: + > SELECT concat('abc', 'def') FROM src LIMIT 1; + 'abcdef' +query: SELECT + concat('a', 'b'), + concat('a', 'b', 'c'), + concat('a', null, 'c'), + concat(null), + concat('a'), + concat(null, 1, 2), + concat(1, 2, 3, 'a'), + concat(1, 2), + concat(1) +FROM src LIMIT 1 +Input: default/src +Output: file:/home/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1065349426/10000 +ab abc NULL NULL a NULL 123a 12 1 Index: ql/src/test/queries/clientpositive/udf_concat.q =================================================================== --- ql/src/test/queries/clientpositive/udf_concat.q (revision 0) +++ ql/src/test/queries/clientpositive/udf_concat.q (revision 0) @@ -0,0 +1,15 @@ +DESCRIBE FUNCTION concat; + +DESCRIBE FUNCTION EXTENDED concat; + +SELECT + concat('a', 'b'), + concat('a', 'b', 'c'), + concat('a', null, 'c'), + concat(null), + concat('a'), + concat(null, 1, 2), + concat(1, 2, 3, 'a'), + concat(1, 2), + concat(1) +FROM src LIMIT 1; Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java (revision 1815) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java (working copy) @@ -24,7 +24,7 @@ @description( name = "concat", - value = "_FUNC_(str1, str2) - returns the concatenation of str1 and str2", + value = "_FUNC_(str1, str2, ... strN) - returns the concatenation of str1, str2, ... strN", extended = "Returns NULL if any argument is NULL.\n" + "Example:\n" + " > SELECT _FUNC_('abc', 'def') FROM src LIMIT 1;\n" + @@ -36,14 +36,17 @@ } Text text = new Text(); - public Text evaluate(Text a, Text b) { - if (a == null || b == null) { - return null; + + + public Text evaluate(Text... args) { + text.clear(); + for(int i=0; i