diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFConcatWS.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFConcatWS.java index 606cb22..46998f8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFConcatWS.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFConcatWS.java @@ -109,8 +109,10 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { StringBuilder sb = new StringBuilder(); boolean first = true; + boolean nullArguments = true; for (int i = 1; i < arguments.length; i++) { if (arguments[i].get() != null) { + nullArguments = false; if (first) { first = false; } else { @@ -134,9 +136,13 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { } } } + if(nullArguments) { + return null; + }else { + resultText.set(sb.toString()); + return resultText; + } - resultText.set(sb.toString()); - return resultText; } @Override diff --git a/ql/src/test/queries/clientpositive/udf_concat_ws.q b/ql/src/test/queries/clientpositive/udf_concat_ws.q index 538dfae..5899742 100644 --- a/ql/src/test/queries/clientpositive/udf_concat_ws.q +++ b/ql/src/test/queries/clientpositive/udf_concat_ws.q @@ -43,3 +43,9 @@ SELECT concat_ws(NULL, array('www', 'face', 'book', 'com'), '1234'), concat_ws(NULL, 'www', array('face'), array('book', 'com', '1234')), concat_ws(NULL, array('www'), 'face', array('book', 'com', '1234')), concat_ws(NULL, array('www'), array('face', 'book', 'com'), '1234') FROM dest1 tablesample (1 rows); + + +SELECT concat_ws('.',NULL), + concat_ws('-',NULL), + concat_ws('.',NULL,NULL), + concat_ws('-',NULL,NULL) FROM dest1 ; diff --git a/ql/src/test/results/clientpositive/udf_concat_ws.q.out b/ql/src/test/results/clientpositive/udf_concat_ws.q.out index ea2d703..1b101d7 100644 --- a/ql/src/test/results/clientpositive/udf_concat_ws.q.out +++ b/ql/src/test/results/clientpositive/udf_concat_ws.q.out @@ -154,3 +154,18 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@dest1 #### A masked pattern was here #### NULL NULL NULL NULL NULL NULL NULL +PREHOOK: query: SELECT concat_ws('.',NULL), + concat_ws('-',NULL), + concat_ws('.',NULL,NULL), + concat_ws('-',NULL,NULL) FROM dest1 +PREHOOK: type: QUERY +PREHOOK: Input: default@dest1 +#### A masked pattern was here #### +POSTHOOK: query: SELECT concat_ws('.',NULL), + concat_ws('-',NULL), + concat_ws('.',NULL,NULL), + concat_ws('-',NULL,NULL) FROM dest1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@dest1 +#### A masked pattern was here #### +NULL NULL NULL NULL