diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToBinary.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToBinary.java index b31b81b..e449e74 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToBinary.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFToBinary.java @@ -25,13 +25,15 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveCharObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveVarcharObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter.BinaryConverter; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.VoidObjectInspector; @Description(name = "binary", value = "_FUNC_(a) - cast a to binary", - extended = "Currently only string or binary can be cast into binary") + extended = "Currently only string, char, varchar or binary can be cast into binary") public class GenericUDFToBinary extends GenericUDF { private transient PrimitiveObjectInspector argumentOI; @@ -52,9 +54,11 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen } if (!((argumentOI instanceof BinaryObjectInspector) + || (argumentOI instanceof HiveCharObjectInspector) + || (argumentOI instanceof HiveVarcharObjectInspector) || (argumentOI instanceof StringObjectInspector) || (argumentOI instanceof VoidObjectInspector))){ - throw new UDFArgumentException("Only string or binary data can be cast into binary " + + throw new UDFArgumentException("Only string, char, varchar or binary data can be cast into binary " + "data types."); } baConverter = new BinaryConverter(argumentOI, diff --git a/ql/src/test/queries/clientpositive/udf_binary.q b/ql/src/test/queries/clientpositive/udf_binary.q new file mode 100644 index 0000000..3c58800 --- /dev/null +++ b/ql/src/test/queries/clientpositive/udf_binary.q @@ -0,0 +1,8 @@ +set hive.fetch.task.conversion=more; + +DESCRIBE FUNCTION binary; +DESCRIBE FUNCTION EXTENDED binary; + +SELECT binary('abc') FROM src tablesample (1 rows); +SELECT binary(CAST('abc' AS VARCHAR(5))) FROM src tablesample (1 rows); +SELECT binary(CAST('abc' AS CHAR(5))) FROM src tablesample (1 rows); diff --git a/ql/src/test/results/clientpositive/udf_binary.q.out b/ql/src/test/results/clientpositive/udf_binary.q.out new file mode 100644 index 0000000..382b791 --- /dev/null +++ b/ql/src/test/results/clientpositive/udf_binary.q.out @@ -0,0 +1,38 @@ +PREHOOK: query: DESCRIBE FUNCTION binary +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION binary +POSTHOOK: type: DESCFUNCTION +binary(a) - cast a to binary +PREHOOK: query: DESCRIBE FUNCTION EXTENDED binary +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION EXTENDED binary +POSTHOOK: type: DESCFUNCTION +binary(a) - cast a to binary +Currently only string, char, varchar or binary can be cast into binary +PREHOOK: query: SELECT binary('abc') FROM src tablesample (1 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: SELECT binary('abc') FROM src tablesample (1 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +abc +PREHOOK: query: SELECT binary(CAST('abc' AS VARCHAR(5))) FROM src tablesample (1 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: SELECT binary(CAST('abc' AS VARCHAR(5))) FROM src tablesample (1 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +abc +PREHOOK: query: SELECT binary(CAST('abc' AS CHAR(5))) FROM src tablesample (1 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: SELECT binary(CAST('abc' AS CHAR(5))) FROM src tablesample (1 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +abc