Author: xuefu
Date: Fri Dec 20 18:29:17 2013
New Revision: 1552778
URL: http://svn.apache.org/r1552778
Log:
HIVE-6039: Round, AVG and SUM functions reject char/varch input while accepting
string input (reviewed by Prasad)
Added:
hive/trunk/data/files/char_varchar_udf.txt
hive/trunk/ql/src/test/queries/clientpositive/char_varchar_udf.q
hive/trunk/ql/src/test/results/clientpositive/char_varchar_udf.q.out
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
Added: hive/trunk/data/files/char_varchar_udf.txt
URL:
http://svn.apache.org/viewvc/hive/trunk/data/files/char_varchar_udf.txt?rev=1552778&view=auto
==============================================================================
--- hive/trunk/data/files/char_varchar_udf.txt (added)
+++ hive/trunk/data/files/char_varchar_udf.txt Fri Dec 20 18:29:17 2013
@@ -0,0 +1 @@
+47.3224 2923.29346
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java?rev=1552778&r1=1552777&r2=1552778&view=diff
==============================================================================
---
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
(original)
+++
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFAverage.java
Fri Dec 20 18:29:17 2013
@@ -77,6 +77,8 @@ public class GenericUDAFAverage extends
case FLOAT:
case DOUBLE:
case STRING:
+ case VARCHAR:
+ case CHAR:
case TIMESTAMP:
return new GenericUDAFAverageEvaluatorDouble();
case DECIMAL:
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java?rev=1552778&r1=1552777&r2=1552778&view=diff
==============================================================================
---
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
(original)
+++
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFSum.java
Fri Dec 20 18:29:17 2013
@@ -71,6 +71,8 @@ public class GenericUDAFSum extends Abst
case FLOAT:
case DOUBLE:
case STRING:
+ case VARCHAR:
+ case CHAR:
return new GenericUDAFSumDouble();
case DECIMAL:
return new GenericUDAFSumHiveDecimal();
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java?rev=1552778&r1=1552777&r2=1552778&view=diff
==============================================================================
---
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
(original)
+++
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFRound.java
Fri Dec 20 18:29:17 2013
@@ -143,6 +143,7 @@ public class GenericUDFRound extends Gen
break;
case STRING:
case VARCHAR:
+ case CHAR:
outputOI =
PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(PrimitiveCategory.DOUBLE);
converterFromString = ObjectInspectorConverters.getConverter(inputOI,
outputOI);
break;
@@ -228,7 +229,8 @@ public class GenericUDFRound extends Gen
case DOUBLE:
return
round(((DoubleWritable)inputOI.getPrimitiveWritableObject(input)), scale);
case STRING:
- case VARCHAR:
+ case VARCHAR:
+ case CHAR:
DoubleWritable doubleValue = (DoubleWritable)
converterFromString.convert(input);
if (doubleValue == null) {
return null;
Added: hive/trunk/ql/src/test/queries/clientpositive/char_varchar_udf.q
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/char_varchar_udf.q?rev=1552778&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/char_varchar_udf.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/char_varchar_udf.q Fri Dec 20
18:29:17 2013
@@ -0,0 +1,9 @@
+DROP TABLE IF EXISTS char_varchar_udf;
+
+CREATE TABLE char_varchar_udf (c char(8), vc varchar(10)) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
+LOAD DATA LOCAL INPATH '../../data/files/char_varchar_udf.txt' INTO TABLE
char_varchar_udf;
+
+SELECT ROUND(c, 2), ROUND(vc, 3) FROM char_varchar_udf;
+SELECT AVG(c), AVG(vc), SUM(c), SUM(vc) FROM char_varchar_udf;
+
+DROP TABLE char_varchar_udf;
\ No newline at end of file
Added: hive/trunk/ql/src/test/results/clientpositive/char_varchar_udf.q.out
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/char_varchar_udf.q.out?rev=1552778&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/char_varchar_udf.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/char_varchar_udf.q.out Fri
Dec 20 18:29:17 2013
@@ -0,0 +1,41 @@
+PREHOOK: query: DROP TABLE IF EXISTS char_varchar_udf
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS char_varchar_udf
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE char_varchar_udf (c char(8), vc varchar(10)) ROW
FORMAT DELIMITED FIELDS TERMINATED BY '\t'
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE char_varchar_udf (c char(8), vc varchar(10)) ROW
FORMAT DELIMITED FIELDS TERMINATED BY '\t'
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@char_varchar_udf
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/char_varchar_udf.txt'
INTO TABLE char_varchar_udf
+PREHOOK: type: LOAD
+PREHOOK: Output: default@char_varchar_udf
+POSTHOOK: query: LOAD DATA LOCAL INPATH
'../../data/files/char_varchar_udf.txt' INTO TABLE char_varchar_udf
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@char_varchar_udf
+PREHOOK: query: SELECT ROUND(c, 2), ROUND(vc, 3) FROM char_varchar_udf
+PREHOOK: type: QUERY
+PREHOOK: Input: default@char_varchar_udf
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT ROUND(c, 2), ROUND(vc, 3) FROM char_varchar_udf
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@char_varchar_udf
+#### A masked pattern was here ####
+47.32 2923.293
+PREHOOK: query: SELECT AVG(c), AVG(vc), SUM(c), SUM(vc) FROM char_varchar_udf
+PREHOOK: type: QUERY
+PREHOOK: Input: default@char_varchar_udf
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT AVG(c), AVG(vc), SUM(c), SUM(vc) FROM char_varchar_udf
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@char_varchar_udf
+#### A masked pattern was here ####
+47.3224 2923.29346 47.3224 2923.29346
+PREHOOK: query: DROP TABLE char_varchar_udf
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@char_varchar_udf
+PREHOOK: Output: default@char_varchar_udf
+POSTHOOK: query: DROP TABLE char_varchar_udf
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@char_varchar_udf
+POSTHOOK: Output: default@char_varchar_udf