Index: contrib/src/test/results/clientpositive/udaf_example_min.q.out
===================================================================
--- contrib/src/test/results/clientpositive/udaf_example_min.q.out (revision 0)
+++ contrib/src/test/results/clientpositive/udaf_example_min.q.out (revision 0)
@@ -0,0 +1,97 @@
+PREHOOK: query: CREATE TEMPORARY FUNCTION example_min AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMin'
+PREHOOK: type: CREATEFUNCTION
+POSTHOOK: query: CREATE TEMPORARY FUNCTION example_min AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMin'
+POSTHOOK: type: CREATEFUNCTION
+PREHOOK: query: DESCRIBE FUNCTION EXTENDED example_min
+PREHOOK: type: DESCFUNCTION
+POSTHOOK: query: DESCRIBE FUNCTION EXTENDED example_min
+POSTHOOK: type: DESCFUNCTION
+example_min(expr) - Returns the minimum value of expr
+PREHOOK: query: EXPLAIN
+SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN
+SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION example_min (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5))) (TOK_SELEXPR (TOK_FUNCTION example_min (TOK_FUNCTION IF (> (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5) 250) TOK_NULL (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5)))))))
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Alias -> Map Operator Tree:
+ src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: value
+ type: string
+ outputColumnNames: value
+ Group By Operator
+ aggregations:
+ expr: example_min(substr(value, 5))
+ expr: example_min(if((substr(value, 5) > 250), null, substr(value, 5)))
+ bucketGroup: false
+ mode: hash
+ outputColumnNames: _col0, _col1
+ Reduce Output Operator
+ sort order:
+ tag: -1
+ value expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: example_min(VALUE._col0)
+ expr: example_min(VALUE._col1)
+ bucketGroup: false
+ mode: mergepartial
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+
+
+PREHOOK: query: SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/contrib/scratchdir/hive_2010-02-03_15-56-27_091_4596988815419170888/10000
+POSTHOOK: query: SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/contrib/scratchdir/hive_2010-02-03_15-56-27_091_4596988815419170888/10000
+0 0
+PREHOOK: query: DROP TEMPORARY FUNCTION example_min
+PREHOOK: type: DROPFUNCTION
+POSTHOOK: query: DROP TEMPORARY FUNCTION example_min
+POSTHOOK: type: DROPFUNCTION
Index: contrib/src/test/results/clientpositive/udaf_example_max.q.out
===================================================================
--- contrib/src/test/results/clientpositive/udaf_example_max.q.out (revision 0)
+++ contrib/src/test/results/clientpositive/udaf_example_max.q.out (revision 0)
@@ -0,0 +1,97 @@
+PREHOOK: query: CREATE TEMPORARY FUNCTION example_max AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMax'
+PREHOOK: type: CREATEFUNCTION
+POSTHOOK: query: CREATE TEMPORARY FUNCTION example_max AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMax'
+POSTHOOK: type: CREATEFUNCTION
+PREHOOK: query: DESCRIBE FUNCTION EXTENDED example_max
+PREHOOK: type: DESCFUNCTION
+POSTHOOK: query: DESCRIBE FUNCTION EXTENDED example_max
+POSTHOOK: type: DESCFUNCTION
+example_max(expr) - Returns the maximum value of expr
+PREHOOK: query: EXPLAIN
+SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN
+SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION example_max (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5))) (TOK_SELEXPR (TOK_FUNCTION example_max (TOK_FUNCTION IF (> (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5) 250) TOK_NULL (TOK_FUNCTION substr (TOK_TABLE_OR_COL value) 5)))))))
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Alias -> Map Operator Tree:
+ src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: value
+ type: string
+ outputColumnNames: value
+ Group By Operator
+ aggregations:
+ expr: example_max(substr(value, 5))
+ expr: example_max(if((substr(value, 5) > 250), null, substr(value, 5)))
+ bucketGroup: false
+ mode: hash
+ outputColumnNames: _col0, _col1
+ Reduce Output Operator
+ sort order:
+ tag: -1
+ value expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ Reduce Operator Tree:
+ Group By Operator
+ aggregations:
+ expr: example_max(VALUE._col0)
+ expr: example_max(VALUE._col1)
+ bucketGroup: false
+ mode: mergepartial
+ outputColumnNames: _col0, _col1
+ Select Operator
+ expressions:
+ expr: _col0
+ type: string
+ expr: _col1
+ type: string
+ outputColumnNames: _col0, _col1
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+
+
+PREHOOK: query: SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/contrib/scratchdir/hive_2010-02-03_16-15-04_638_1033240644659750207/10000
+POSTHOOK: query: SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/contrib/scratchdir/hive_2010-02-03_16-15-04_638_1033240644659750207/10000
+98 98
+PREHOOK: query: DROP TEMPORARY FUNCTION example_max
+PREHOOK: type: DROPFUNCTION
+POSTHOOK: query: DROP TEMPORARY FUNCTION example_max
+POSTHOOK: type: DROPFUNCTION
Index: contrib/src/test/queries/clientpositive/udaf_example_min.q
===================================================================
--- contrib/src/test/queries/clientpositive/udaf_example_min.q (revision 0)
+++ contrib/src/test/queries/clientpositive/udaf_example_min.q (revision 0)
@@ -0,0 +1,16 @@
+add jar ../build/contrib/hive_contrib.jar;
+
+CREATE TEMPORARY FUNCTION example_min AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMin';
+
+DESCRIBE FUNCTION EXTENDED example_min;
+
+EXPLAIN
+SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src;
+
+SELECT example_min(substr(value,5)),
+ example_min(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src;
+
+DROP TEMPORARY FUNCTION example_min;
Index: contrib/src/test/queries/clientpositive/udaf_example_max.q
===================================================================
--- contrib/src/test/queries/clientpositive/udaf_example_max.q (revision 0)
+++ contrib/src/test/queries/clientpositive/udaf_example_max.q (revision 0)
@@ -0,0 +1,16 @@
+add jar ../build/contrib/hive_contrib.jar;
+
+CREATE TEMPORARY FUNCTION example_max AS 'org.apache.hadoop.hive.contrib.udaf.example.UDAFExampleMax';
+
+DESCRIBE FUNCTION EXTENDED example_max;
+
+EXPLAIN
+SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src;
+
+SELECT example_max(substr(value,5)),
+ example_max(IF(substr(value,5) > 250, NULL, substr(value,5)))
+FROM src;
+
+DROP TEMPORARY FUNCTION example_max;
Index: contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMin.java
===================================================================
--- contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMin.java (revision 906284)
+++ contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMin.java (working copy)
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.hadoop.hive.ql.udf;
+package org.apache.hadoop.hive.contrib.udaf.example;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
@@ -29,8 +29,8 @@
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
-@Description(name = "min", value = "_FUNC_(expr) - Returns the minimum value of expr")
-public class UDAFMin extends UDAF {
+@Description(name = "example_min", value = "_FUNC_(expr) - Returns the minimum value of expr")
+public class UDAFExampleMin extends UDAF {
static public class MinShortEvaluator implements UDAFEvaluator {
private short mMin;
Property changes on: contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMin.java
___________________________________________________________________
Added: svn:mergeinfo
Index: contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMax.java
===================================================================
--- contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMax.java (revision 906284)
+++ contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMax.java (working copy)
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.hadoop.hive.ql.udf;
+package org.apache.hadoop.hive.contrib.udaf.example;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
@@ -29,8 +29,8 @@
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
-@Description(name = "max", value = "_FUNC_(expr) - Returns the maximum value of expr")
-public class UDAFMax extends UDAF {
+@Description(name = "example_max", value = "_FUNC_(expr) - Returns the maximum value of expr")
+public class UDAFExampleMax extends UDAF {
static public class MaxShortEvaluator implements UDAFEvaluator {
private short mMax;
Property changes on: contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/UDAFExampleMax.java
___________________________________________________________________
Added: svn:mergeinfo
Index: serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
===================================================================
--- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java (revision 906284)
+++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java (working copy)
@@ -397,6 +397,33 @@
}
/**
+ * Whether comparison is supported for this type.
+ * Currently all types that references any map are not comparable.
+ */
+ public static boolean compareSupported(ObjectInspector oi) {
+ switch (oi.getCategory()) {
+ case PRIMITIVE:
+ return true;
+ case LIST:
+ ListObjectInspector loi = (ListObjectInspector) oi;
+ return compareSupported(loi.getListElementObjectInspector());
+ case STRUCT:
+ StructObjectInspector soi = (StructObjectInspector) oi;
+ List extends StructField> fields = soi.getAllStructFieldRefs();
+ for (int f = 0; f < fields.size(); f++) {
+ if (!compareSupported(fields.get(f).getFieldObjectInspector())) {
+ return false;
+ }
+ }
+ return true;
+ case MAP:
+ return false;
+ default:
+ return false;
+ }
+ }
+
+ /**
* Compare two objects with their respective ObjectInspectors.
*/
public static int compare(Object o1, ObjectInspector oi1, Object o2,
Index: ql/src/test/results/clientnegative/udf_min.q.out
===================================================================
--- ql/src/test/results/clientnegative/udf_min.q.out (revision 0)
+++ ql/src/test/results/clientnegative/udf_min.q.out (revision 0)
@@ -0,0 +1 @@
+FAILED: Error in semantic analysis: Cannot support comparison of map<> type or complex type containing map<>.
Index: ql/src/test/results/clientnegative/udf_max.q.out
===================================================================
--- ql/src/test/results/clientnegative/udf_max.q.out (revision 0)
+++ ql/src/test/results/clientnegative/udf_max.q.out (revision 0)
@@ -0,0 +1 @@
+FAILED: Error in semantic analysis: Cannot support comparison of map<> type or complex type containing map<>.
Index: ql/src/test/results/clientpositive/udf_min.q.out
===================================================================
--- ql/src/test/results/clientpositive/udf_min.q.out (revision 906284)
+++ ql/src/test/results/clientpositive/udf_min.q.out (working copy)
@@ -8,3 +8,55 @@
POSTHOOK: query: DESCRIBE FUNCTION EXTENDED min
POSTHOOK: type: DESCFUNCTION
min(expr) - Returns the minimum value of expr
+PREHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-41-56_456_856412388022993829/10000
+POSTHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-41-56_456_856412388022993829/10000
+{"col1":0,"col2":"val_0"} {"col1":"0","col2":"val_0"}
+PREHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-00_236_1435029127724516459/10000
+POSTHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-00_236_1435029127724516459/10000
+{"col1":0,"col2":"val_0"} {"col1":"0","col2":"val_0"}
+PREHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-03_693_4768183409983873377/10000
+POSTHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-03_693_4768183409983873377/10000
+{"col1":0,"col2":"val_0"} {"col1":"0","col2":"val_0"}
+PREHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-10_355_1063948234120488529/10000
+POSTHOOK: query: SELECT min(struct(CAST(key as INT), value)),
+ min(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-42-10_355_1063948234120488529/10000
+{"col1":0,"col2":"val_0"} {"col1":"0","col2":"val_0"}
Index: ql/src/test/results/clientpositive/udf_max.q.out
===================================================================
--- ql/src/test/results/clientpositive/udf_max.q.out (revision 906284)
+++ ql/src/test/results/clientpositive/udf_max.q.out (working copy)
@@ -8,3 +8,55 @@
POSTHOOK: query: DESCRIBE FUNCTION EXTENDED max
POSTHOOK: type: DESCFUNCTION
max(expr) - Returns the maximum value of expr
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-47_651_8497222492783440005/10000
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-47_651_8497222492783440005/10000
+{"col1":498,"col2":"val_498"} {"col1":"98","col2":"val_98"}
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-51_371_6375977486441092466/10000
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-51_371_6375977486441092466/10000
+{"col1":498,"col2":"val_498"} {"col1":"98","col2":"val_98"}
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-54_873_9150909181262885229/10000
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-44-54_873_9150909181262885229/10000
+{"col1":498,"col2":"val_498"} {"col1":"98","col2":"val_98"}
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-45-01_378_1491726702598521931/10000
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+ max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: file:/data/users/zshao/hadoop_hive_trunk/build/ql/scratchdir/hive_2010-02-03_15-45-01_378_1491726702598521931/10000
+{"col1":498,"col2":"val_498"} {"col1":"98","col2":"val_98"}
Index: ql/src/test/results/compiler/plan/groupby3.q.xml
===================================================================
--- ql/src/test/results/compiler/plan/groupby3.q.xml (revision 906284)
+++ ql/src/test/results/compiler/plan/groupby3.q.xml (working copy)
@@ -66,7 +66,7 @@
transient_lastDdlTime
- 1264705772
+ 1265240095
@@ -682,11 +682,7 @@