diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTranslate.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTranslate.java index 7c71a03..814ec6a 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTranslate.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTranslate.java @@ -148,10 +148,12 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen .getPrimitiveCategory(); if (primitiveCategory != PrimitiveCategory.STRING + && primitiveCategory != PrimitiveCategory.CHAR + && primitiveCategory != PrimitiveCategory.VARCHAR && primitiveCategory != PrimitiveCategory.VOID) { throw new UDFArgumentTypeException(i, - "A string argument was expected but an argument of type " + arguments[i].getTypeName() - + " was given."); + "A string, char, or varchar argument was expected but an argument of type " + + arguments[i].getTypeName() + " was given."); } } diff --git ql/src/test/queries/clientpositive/udf_translate.q ql/src/test/queries/clientpositive/udf_translate.q index 21d7998..1f349aa 100644 --- ql/src/test/queries/clientpositive/udf_translate.q +++ ql/src/test/queries/clientpositive/udf_translate.q @@ -37,3 +37,7 @@ SELECT translate('abcd', 'abc', '1234') FROM src tablesample (1 rows); -- Test proper function over UTF-8 characters SELECT translate('Àbcd', 'À', 'Ã') FROM src tablesample (1 rows); +-- Run some queries where the arguments are not strings but chars and varchars +SELECT translate(CAST('abcd' AS CHAR(5)), CAST('aba' AS VARCHAR(5)), CAST('123' AS CHAR(5))), + translate(CAST('abcd' AS VARCHAR(9)), CAST('aba' AS CHAR(9)), CAST('12' AS VARCHAR(9))) + FROM src tablesample (1 rows); diff --git ql/src/test/results/clientpositive/udf_translate.q.out ql/src/test/results/clientpositive/udf_translate.q.out index 1bebc01..9ab682f 100644 --- ql/src/test/results/clientpositive/udf_translate.q.out +++ ql/src/test/results/clientpositive/udf_translate.q.out @@ -145,3 +145,18 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### Ãbcd +PREHOOK: query: -- Run some queries where the arguments are not strings but chars and varchars +SELECT translate(CAST('abcd' AS CHAR(5)), CAST('aba' AS VARCHAR(5)), CAST('123' AS CHAR(5))), + translate(CAST('abcd' AS VARCHAR(9)), CAST('aba' AS CHAR(9)), CAST('12' AS VARCHAR(9))) + FROM src tablesample (1 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: -- Run some queries where the arguments are not strings but chars and varchars +SELECT translate(CAST('abcd' AS CHAR(5)), CAST('aba' AS VARCHAR(5)), CAST('123' AS CHAR(5))), + translate(CAST('abcd' AS VARCHAR(9)), CAST('aba' AS CHAR(9)), CAST('12' AS VARCHAR(9))) + FROM src tablesample (1 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +12cd 12cd