diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSubstr.java ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSubstr.java
index 70e0d5e..c825e13 100755
--- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSubstr.java
+++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSubstr.java
@@ -26,15 +26,31 @@ public class UDFSubstr implements UDF {
public UDFSubstr() {
}
- public String evaluate(String a, int start, int len) {
- if (start >= a.length()) return "";
- if (start + len > a.length()) len = a.length() - start;
- return a.substring(start, start + len);
+ public String evaluate(String s, Integer pos, Integer len) {
+ int start, end;
+
+ if ((s == null) || (pos == null) || (len == null))
+ return null;
+ if ((len <= 0) || (Math.abs(pos) > s.length()))
+ return "";
+
+ if (pos > 0)
+ start = pos - 1;
+ else if (pos < 0)
+ start = s.length() + pos;
+ else
+ start = 0;
+
+ if ((s.length() - start) < len)
+ end = s.length();
+ else
+ end = start + len;
+
+ return s.substring(start, end);
}
- public String evaluate(String a, int start) {
- if (start >= a.length()) return "";
- return a.substring(start);
+ public String evaluate(String s, Integer pos) {
+ return evaluate(s, pos, Integer.MAX_VALUE);
}
}
diff --git ql/src/test/queries/clientpositive/groupby1.q ql/src/test/queries/clientpositive/groupby1.q
index 2c65e4b..c735c6c 100755
--- ql/src/test/queries/clientpositive/groupby1.q
+++ ql/src/test/queries/clientpositive/groupby1.q
@@ -1,8 +1,8 @@
CREATE TABLE dest_g1(key INT, value DOUBLE) STORED AS TEXTFILE;
EXPLAIN
-FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;
+FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key;
-FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;
+FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key;
SELECT dest_g1.* FROM dest_g1;
diff --git ql/src/test/queries/clientpositive/groupby1_limit.q ql/src/test/queries/clientpositive/groupby1_limit.q
index fa42c95..0c8e12a 100644
--- ql/src/test/queries/clientpositive/groupby1_limit.q
+++ ql/src/test/queries/clientpositive/groupby1_limit.q
@@ -3,8 +3,8 @@ set mapred.reduce.tasks=31;
CREATE TABLE dest1(key INT, value DOUBLE) STORED AS TEXTFILE;
EXPLAIN
-FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key LIMIT 5;
+FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key LIMIT 5;
-FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key LIMIT 5;
+FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key LIMIT 5;
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby1_map.q ql/src/test/queries/clientpositive/groupby1_map.q
index 6ca1073..a7ce7af 100644
--- ql/src/test/queries/clientpositive/groupby1_map.q
+++ ql/src/test/queries/clientpositive/groupby1_map.q
@@ -3,8 +3,8 @@ set hive.map.aggr=true;
CREATE TABLE dest1(key INT, value DOUBLE) STORED AS TEXTFILE;
EXPLAIN
-FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;
+FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key;
-FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;
+FROM src INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key;
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby2.q ql/src/test/queries/clientpositive/groupby2.q
index 90c9564..3feddd1 100755
--- ql/src/test/queries/clientpositive/groupby2.q
+++ ql/src/test/queries/clientpositive/groupby2.q
@@ -2,9 +2,9 @@ CREATE TABLE dest_g2(key STRING, c1 INT, c2 STRING) STORED AS TEXTFILE;
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest_g2 SELECT substr(src.key,0,1), count(DISTINCT substr(src.value,4)), concat(substr(src.key,0,1),sum(substr(src.value,4))) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest_g2 SELECT substr(src.key,1,1), count(DISTINCT substr(src.value,5)), concat(substr(src.key,1,1),sum(substr(src.value,5))) GROUP BY substr(src.key,1,1);
FROM src
-INSERT OVERWRITE TABLE dest_g2 SELECT substr(src.key,0,1), count(DISTINCT substr(src.value,4)), concat(substr(src.key,0,1),sum(substr(src.value,4))) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest_g2 SELECT substr(src.key,1,1), count(DISTINCT substr(src.value,5)), concat(substr(src.key,1,1),sum(substr(src.value,5))) GROUP BY substr(src.key,1,1);
SELECT dest_g2.* FROM dest_g2;
diff --git ql/src/test/queries/clientpositive/groupby2_limit.q ql/src/test/queries/clientpositive/groupby2_limit.q
index 7064438..4bc263c 100644
--- ql/src/test/queries/clientpositive/groupby2_limit.q
+++ ql/src/test/queries/clientpositive/groupby2_limit.q
@@ -1,7 +1,7 @@
set mapred.reduce.tasks=31;
EXPLAIN
-SELECT src.key, sum(substr(src.value,4)) FROM src GROUP BY src.key LIMIT 5;
+SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key LIMIT 5;
-SELECT src.key, sum(substr(src.value,4)) FROM src GROUP BY src.key LIMIT 5;
+SELECT src.key, sum(substr(src.value,5)) FROM src GROUP BY src.key LIMIT 5;
diff --git ql/src/test/queries/clientpositive/groupby2_map.q ql/src/test/queries/clientpositive/groupby2_map.q
index f818c81..e05f84b 100644
--- ql/src/test/queries/clientpositive/groupby2_map.q
+++ ql/src/test/queries/clientpositive/groupby2_map.q
@@ -4,9 +4,9 @@ CREATE TABLE dest1(key STRING, c1 INT, c2 STRING) STORED AS TEXTFILE;
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,0,1), count(DISTINCT substr(src.value,4)), concat(substr(src.key,0,1),sum(substr(src.value,4))) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,1,1), count(DISTINCT substr(src.value,5)), concat(substr(src.key,1,1),sum(substr(src.value,5))) GROUP BY substr(src.key,1,1);
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,0,1), count(DISTINCT substr(src.value,4)), concat(substr(src.key,0,1),sum(substr(src.value,4))) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,1,1), count(DISTINCT substr(src.value,5)), concat(substr(src.key,1,1),sum(substr(src.value,5))) GROUP BY substr(src.key,1,1);
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby3.q ql/src/test/queries/clientpositive/groupby3.q
index 1cb4af6..af7cd06 100755
--- ql/src/test/queries/clientpositive/groupby3.q
+++ ql/src/test/queries/clientpositive/groupby3.q
@@ -2,9 +2,9 @@ CREATE TABLE dest1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE) STORED
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,4)), avg(substr(src.value,4)), avg(DISTINCT substr(src.value,4)), max(substr(src.value,4)), min(substr(src.value,4));
+INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,5)), avg(substr(src.value,5)), avg(DISTINCT substr(src.value,5)), max(substr(src.value,5)), min(substr(src.value,5));
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,4)), avg(substr(src.value,4)), avg(DISTINCT substr(src.value,4)), max(substr(src.value,4)), min(substr(src.value,4));
+INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,5)), avg(substr(src.value,5)), avg(DISTINCT substr(src.value,5)), max(substr(src.value,5)), min(substr(src.value,5));
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby3_map.q ql/src/test/queries/clientpositive/groupby3_map.q
index 746f6ab..943e103 100644
--- ql/src/test/queries/clientpositive/groupby3_map.q
+++ ql/src/test/queries/clientpositive/groupby3_map.q
@@ -4,9 +4,9 @@ CREATE TABLE dest1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE) STORED
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,4)), avg(substr(src.value,4)), avg(DISTINCT substr(src.value,4)), max(substr(src.value,4)), min(substr(src.value,4));
+INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,5)), avg(substr(src.value,5)), avg(DISTINCT substr(src.value,5)), max(substr(src.value,5)), min(substr(src.value,5));
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,4)), avg(substr(src.value,4)), avg(DISTINCT substr(src.value,4)), max(substr(src.value,4)), min(substr(src.value,4));
+INSERT OVERWRITE TABLE dest1 SELECT sum(substr(src.value,5)), avg(substr(src.value,5)), avg(DISTINCT substr(src.value,5)), max(substr(src.value,5)), min(substr(src.value,5));
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby4.q ql/src/test/queries/clientpositive/groupby4.q
index a6b224c..429d179 100755
--- ql/src/test/queries/clientpositive/groupby4.q
+++ ql/src/test/queries/clientpositive/groupby4.q
@@ -2,10 +2,10 @@ CREATE TABLE dest1(c1 STRING) STORED AS TEXTFILE;
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,0,1) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,1,1) GROUP BY substr(src.key,1,1);
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,0,1) GROUP BY substr(src.key,0,1);
+INSERT OVERWRITE TABLE dest1 SELECT substr(src.key,1,1) GROUP BY substr(src.key,1,1);
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby5.q ql/src/test/queries/clientpositive/groupby5.q
index bf80d6a..e06974d 100755
--- ql/src/test/queries/clientpositive/groupby5.q
+++ ql/src/test/queries/clientpositive/groupby5.q
@@ -2,12 +2,12 @@ CREATE TABLE dest1(key INT, value STRING) STORED AS TEXTFILE;
EXPLAIN
INSERT OVERWRITE TABLE dest1
-SELECT src.key, sum(substr(src.value,4))
+SELECT src.key, sum(substr(src.value,5))
FROM src
GROUP BY src.key;
INSERT OVERWRITE TABLE dest1
-SELECT src.key, sum(substr(src.value,4))
+SELECT src.key, sum(substr(src.value,5))
FROM src
GROUP BY src.key;
diff --git ql/src/test/queries/clientpositive/groupby6.q ql/src/test/queries/clientpositive/groupby6.q
index d0b310f..60f14b6 100755
--- ql/src/test/queries/clientpositive/groupby6.q
+++ ql/src/test/queries/clientpositive/groupby6.q
@@ -2,10 +2,10 @@ CREATE TABLE dest1(c1 STRING) STORED AS TEXTFILE;
EXPLAIN
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT DISTINCT substr(src.value,4,1);
+INSERT OVERWRITE TABLE dest1 SELECT DISTINCT substr(src.value,5,1);
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT DISTINCT substr(src.value,4,1);
+INSERT OVERWRITE TABLE dest1 SELECT DISTINCT substr(src.value,5,1);
SELECT dest1.* FROM dest1;
diff --git ql/src/test/queries/clientpositive/groupby7.q ql/src/test/queries/clientpositive/groupby7.q
index cad4dbd..c45e301 100644
--- ql/src/test/queries/clientpositive/groupby7.q
+++ ql/src/test/queries/clientpositive/groupby7.q
@@ -5,8 +5,8 @@ SET hive.exec.compress.intermediate=true;
SET hive.exec.compress.output=true;
FROM SRC
-INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, sum(SUBSTR(SRC.value,4)) GROUP BY SRC.key
-INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, sum(SUBSTR(SRC.value,4)) GROUP BY SRC.key;
+INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, sum(SUBSTR(SRC.value,5)) GROUP BY SRC.key
+INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, sum(SUBSTR(SRC.value,5)) GROUP BY SRC.key;
SELECT DEST1.* FROM DEST1;
SELECT DEST2.* FROM DEST2;
diff --git ql/src/test/queries/clientpositive/groupby8.q ql/src/test/queries/clientpositive/groupby8.q
index 79249ed..f273bfd 100644
--- ql/src/test/queries/clientpositive/groupby8.q
+++ ql/src/test/queries/clientpositive/groupby8.q
@@ -2,8 +2,8 @@ CREATE TABLE DEST1(key INT, value STRING) STORED AS TEXTFILE;
CREATE TABLE DEST2(key INT, value STRING) STORED AS TEXTFILE;
FROM SRC
-INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,4)) GROUP BY SRC.key
-INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,4)) GROUP BY SRC.key;
+INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,5)) GROUP BY SRC.key
+INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,5)) GROUP BY SRC.key;
SELECT DEST1.* FROM DEST1;
SELECT DEST2.* FROM DEST2;
diff --git ql/src/test/queries/clientpositive/udf_substr.q ql/src/test/queries/clientpositive/udf_substr.q
new file mode 100644
index 0000000..4d93b31
--- /dev/null
+++ ql/src/test/queries/clientpositive/udf_substr.q
@@ -0,0 +1,37 @@
+SELECT
+ substr(null, 1), substr(null, 1, 1),
+ substr('ABC', null), substr('ABC', null, 1),
+ substr('ABC', 1, null)
+FROM src LIMIT 1;
+
+SELECT
+ substr('ABC', 1, 0), substr('ABC', 1, -1), substr('ABC', 2, -100),
+ substr('ABC', 4), substr('ABC', 4, 100),
+ substr('ABC', -4), substr('ABC', -4, 100),
+ substr('ABC', 100), substr('ABC', 100, 100),
+ substr('ABC', -100), substr('ABC', -100, 100),
+ substr('ABC', 2147483647), substr('ABC', 2147483647, 2147483647)
+FROM src LIMIT 1;
+
+SELECT
+ substr('ABCDEFG', 3, 4), substr('ABCDEFG', -5, 4),
+ substr('ABCDEFG', 3), substr('ABCDEFG', -5),
+ substr('ABC', 0), substr('ABC', 1), substr('ABC', 2), substr('ABC', 3),
+ substr('ABC', 1, 2147483647), substr('ABC', 2, 2147483647),
+ substr('A', 0), substr('A', 1), substr('A', -1)
+FROM src LIMIT 1;
+
+SELECT
+ substr('ABC', 0, 1), substr('ABC', 0, 2), substr('ABC', 0, 3), substr('ABC', 0, 4),
+ substr('ABC', 1, 1), substr('ABC', 1, 2), substr('ABC', 1, 3), substr('ABC', 1, 4),
+ substr('ABC', 2, 1), substr('ABC', 2, 2), substr('ABC', 2, 3), substr('ABC', 2, 4),
+ substr('ABC', 3, 1), substr('ABC', 3, 2), substr('ABC', 3, 3), substr('ABC', 3, 4),
+ substr('ABC', 4, 1)
+FROM src LIMIT 1;
+
+SELECT
+ substr('ABC', -1, 1), substr('ABC', -1, 2), substr('ABC', -1, 3), substr('ABC', -1, 4),
+ substr('ABC', -2, 1), substr('ABC', -2, 2), substr('ABC', -2, 3), substr('ABC', -2, 4),
+ substr('ABC', -3, 1), substr('ABC', -3, 2), substr('ABC', -3, 3), substr('ABC', -3, 4),
+ substr('ABC', -4, 1)
+FROM src LIMIT 1;
diff --git ql/src/test/queries/positive/groupby1.q ql/src/test/queries/positive/groupby1.q
index de4ed5c..96b29b0 100755
--- ql/src/test/queries/positive/groupby1.q
+++ ql/src/test/queries/positive/groupby1.q
@@ -1,2 +1,2 @@
FROM src
-INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key
+INSERT OVERWRITE TABLE dest1 SELECT src.key, sum(substr(src.value,5)) GROUP BY src.key
diff --git ql/src/test/queries/positive/groupby2.q ql/src/test/queries/positive/groupby2.q
index d406438..d741eb6 100755
--- ql/src/test/queries/positive/groupby2.q
+++ ql/src/test/queries/positive/groupby2.q
@@ -1,2 +1,2 @@
FROM src
-SELECT substr(src.key,0,1), count(DISTINCT substr(src.value,4)), concat(substr(src.key,0,1),sum(substr(src.value,4))) GROUP BY substr(src.key,0,1)
+SELECT substr(src.key,1,1), count(DISTINCT substr(src.value,5)), concat(substr(src.key,1,1),sum(substr(src.value,5))) GROUP BY substr(src.key,1,1)
diff --git ql/src/test/queries/positive/groupby3.q ql/src/test/queries/positive/groupby3.q
index 29fe4a1..03b1248 100755
--- ql/src/test/queries/positive/groupby3.q
+++ ql/src/test/queries/positive/groupby3.q
@@ -1,2 +1,2 @@
FROM src
-SELECT sum(substr(src.value,4)), avg(substr(src.value,4)), avg(DISTINCT substr(src.value,4)), max(substr(src.value,4)), min(substr(src.value,4))
+SELECT sum(substr(src.value,5)), avg(substr(src.value,5)), avg(DISTINCT substr(src.value,5)), max(substr(src.value,5)), min(substr(src.value,5))
diff --git ql/src/test/queries/positive/groupby4.q ql/src/test/queries/positive/groupby4.q
index d421cb6..85271a9 100755
--- ql/src/test/queries/positive/groupby4.q
+++ ql/src/test/queries/positive/groupby4.q
@@ -1,2 +1,2 @@
FROM src
-SELECT substr(src.key,0,1) GROUP BY substr(src.key,0,1)
+SELECT substr(src.key,1,1) GROUP BY substr(src.key,1,1)
diff --git ql/src/test/queries/positive/groupby5.q ql/src/test/queries/positive/groupby5.q
index c20e4fa..ebd65b3 100755
--- ql/src/test/queries/positive/groupby5.q
+++ ql/src/test/queries/positive/groupby5.q
@@ -1,4 +1,4 @@
-SELECT src.key, sum(substr(src.value,4))
+SELECT src.key, sum(substr(src.value,5))
FROM src
GROUP BY src.key
diff --git ql/src/test/queries/positive/groupby6.q ql/src/test/queries/positive/groupby6.q
index c12f6a9..80654f2 100755
--- ql/src/test/queries/positive/groupby6.q
+++ ql/src/test/queries/positive/groupby6.q
@@ -1,2 +1,2 @@
FROM src
-SELECT DISTINCT substr(src.value,4,1)
+SELECT DISTINCT substr(src.value,5,1)
diff --git ql/src/test/results/clientpositive/groupby1.q.out ql/src/test/results/clientpositive/groupby1.q.out
index 33aaeca..e69e232 100644
--- ql/src/test/results/clientpositive/groupby1.q.out
+++ ql/src/test/results/clientpositive/groupby1.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -21,7 +21,7 @@ STAGE PLANS:
type: double
tag: -1
value expressions:
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
Reduce Operator Tree:
Group By Operator
diff --git ql/src/test/results/clientpositive/groupby1_limit.q.out ql/src/test/results/clientpositive/groupby1_limit.q.out
index 86dd788..27774ea 100644
--- ql/src/test/results/clientpositive/groupby1_limit.q.out
+++ ql/src/test/results/clientpositive/groupby1_limit.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key)) (TOK_LIMIT 5)))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key)) (TOK_LIMIT 5)))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -22,7 +22,7 @@ STAGE PLANS:
type: double
tag: -1
value expressions:
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
Reduce Operator Tree:
Group By Operator
diff --git ql/src/test/results/clientpositive/groupby1_map.q.out ql/src/test/results/clientpositive/groupby1_map.q.out
index a5babcd..049fe17 100644
--- ql/src/test/results/clientpositive/groupby1_map.q.out
+++ ql/src/test/results/clientpositive/groupby1_map.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -13,7 +13,7 @@ STAGE PLANS:
src
Group By Operator
aggregations:
- expr: sum(UDFToDouble(substr(value, 4)))
+ expr: sum(UDFToDouble(substr(value, 5)))
keys:
expr: key
type: string
diff --git ql/src/test/results/clientpositive/groupby2.q.out ql/src/test/results/clientpositive/groupby2.q.out
index f5d62dc..4adf0b7 100644
--- ql/src/test/results/clientpositive/groupby2.q.out
+++ ql/src/test/results/clientpositive/groupby2.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g2)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 0 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 0 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 0 1))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g2)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 1 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 1 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 1 1))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -13,22 +13,22 @@ STAGE PLANS:
src
Reduce Output Operator
key expressions:
- expr: substr(key, 0, 1)
+ expr: substr(key, 1, 1)
type: string
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
sort order: ++
Map-reduce partition columns:
- expr: substr(key, 0, 1)
+ expr: substr(key, 1, 1)
type: string
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
tag: -1
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: count(DISTINCT KEY.1)
expr: sum(UDFToDouble(KEY.1))
+ expr: count(DISTINCT KEY.1)
keys:
expr: KEY.0
type: string
@@ -55,14 +55,14 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 1
- type: bigint
- expr: 2
type: double
+ expr: 2
+ type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: count(VALUE.0)
- expr: sum(VALUE.1)
+ expr: sum(VALUE.0)
+ expr: count(VALUE.1)
keys:
expr: KEY.0
type: string
@@ -71,9 +71,9 @@ STAGE PLANS:
expressions:
expr: 0
type: string
- expr: 1
+ expr: 2
type: bigint
- expr: concat(0, UDFToString(2))
+ expr: concat(0, UDFToString(1))
type: string
Select Operator
expressions:
diff --git ql/src/test/results/clientpositive/groupby2_limit.q.out ql/src/test/results/clientpositive/groupby2_limit.q.out
index d02ce31..fb855cf 100644
--- ql/src/test/results/clientpositive/groupby2_limit.q.out
+++ ql/src/test/results/clientpositive/groupby2_limit.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key)) (TOK_LIMIT 5)))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key)) (TOK_LIMIT 5)))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -21,7 +21,7 @@ STAGE PLANS:
type: double
tag: -1
value expressions:
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
Reduce Operator Tree:
Group By Operator
diff --git ql/src/test/results/clientpositive/groupby2_map.q.out ql/src/test/results/clientpositive/groupby2_map.q.out
index df42def..4807056 100644
--- ql/src/test/results/clientpositive/groupby2_map.q.out
+++ ql/src/test/results/clientpositive/groupby2_map.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 0 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 0 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 0 1))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 1 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 1 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 1 1))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -13,12 +13,12 @@ STAGE PLANS:
src
Group By Operator
aggregations:
- expr: count(DISTINCT substr(value, 4))
- expr: sum(UDFToDouble(substr(value, 4)))
+ expr: sum(UDFToDouble(substr(value, 5)))
+ expr: count(DISTINCT substr(value, 5))
keys:
- expr: substr(key, 0, 1)
+ expr: substr(key, 1, 1)
type: string
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
mode: hash
Reduce Output Operator
@@ -36,14 +36,14 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 2
- type: bigint
- expr: 3
type: double
+ expr: 3
+ type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
expr: count(DISTINCT KEY.1)
- expr: sum(VALUE.1)
+ expr: sum(VALUE.0)
keys:
expr: KEY.0
type: string
@@ -70,14 +70,14 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 1
- type: bigint
- expr: 2
type: double
+ expr: 2
+ type: bigint
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: count(VALUE.0)
- expr: sum(VALUE.1)
+ expr: sum(VALUE.0)
+ expr: count(VALUE.1)
keys:
expr: KEY.0
type: string
@@ -86,9 +86,9 @@ STAGE PLANS:
expressions:
expr: 0
type: string
- expr: 1
+ expr: 2
type: bigint
- expr: concat(0, UDFToString(2))
+ expr: concat(0, UDFToString(1))
type: string
Select Operator
expressions:
diff --git ql/src/test/results/clientpositive/groupby3.q.out ql/src/test/results/clientpositive/groupby3.q.out
index 182f773..a9e4519 100644
--- ql/src/test/results/clientpositive/groupby3.q.out
+++ ql/src/test/results/clientpositive/groupby3.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 4))))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 5))))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -17,21 +17,21 @@ STAGE PLANS:
type: string
Reduce Output Operator
key expressions:
- expr: substr(0, 4)
+ expr: substr(0, 5)
type: string
sort order: +
Map-reduce partition columns:
- expr: substr(0, 4)
+ expr: substr(0, 5)
type: string
tag: -1
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: avg(DISTINCT UDFToDouble(KEY.0))
expr: sum(UDFToDouble(KEY.0))
- expr: avg(UDFToDouble(KEY.0))
- expr: min(UDFToDouble(KEY.0))
expr: max(UDFToDouble(KEY.0))
+ expr: avg(DISTINCT UDFToDouble(KEY.0))
+ expr: min(UDFToDouble(KEY.0))
+ expr: avg(UDFToDouble(KEY.0))
mode: partial1
File Output Operator
compressed: false
@@ -49,7 +49,7 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 0
- type: string
+ type: double
expr: 1
type: double
expr: 2
@@ -57,26 +57,26 @@ STAGE PLANS:
expr: 3
type: double
expr: 4
- type: double
+ type: string
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: avg(VALUE.0)
- expr: sum(VALUE.1)
+ expr: sum(VALUE.0)
+ expr: max(VALUE.1)
expr: avg(VALUE.2)
expr: min(VALUE.3)
- expr: max(VALUE.4)
+ expr: avg(VALUE.4)
mode: final
Select Operator
expressions:
- expr: 1
- type: double
- expr: 2
- type: double
expr: 0
type: double
expr: 4
type: double
+ expr: 2
+ type: double
+ expr: 1
+ type: double
expr: 3
type: double
File Output Operator
diff --git ql/src/test/results/clientpositive/groupby3_map.q.out ql/src/test/results/clientpositive/groupby3_map.q.out
index e2b007a..f67488c 100644
--- ql/src/test/results/clientpositive/groupby3_map.q.out
+++ ql/src/test/results/clientpositive/groupby3_map.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 4))))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 5))))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -17,13 +17,13 @@ STAGE PLANS:
type: string
Group By Operator
aggregations:
- expr: avg(DISTINCT UDFToDouble(substr(0, 4)))
- expr: sum(UDFToDouble(substr(0, 4)))
- expr: avg(UDFToDouble(substr(0, 4)))
- expr: min(UDFToDouble(substr(0, 4)))
- expr: max(UDFToDouble(substr(0, 4)))
+ expr: sum(UDFToDouble(substr(0, 5)))
+ expr: max(UDFToDouble(substr(0, 5)))
+ expr: avg(DISTINCT UDFToDouble(substr(0, 5)))
+ expr: min(UDFToDouble(substr(0, 5)))
+ expr: avg(UDFToDouble(substr(0, 5)))
keys:
- expr: substr(0, 4)
+ expr: substr(0, 5)
type: string
mode: hash
Reduce Output Operator
@@ -37,7 +37,7 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 1
- type: string
+ type: double
expr: 2
type: double
expr: 3
@@ -45,15 +45,15 @@ STAGE PLANS:
expr: 4
type: double
expr: 5
- type: double
+ type: string
Reduce Operator Tree:
Group By Operator
aggregations:
expr: avg(DISTINCT UDFToDouble(KEY.0))
- expr: sum(VALUE.1)
- expr: avg(VALUE.2)
+ expr: sum(VALUE.0)
+ expr: max(VALUE.1)
expr: min(VALUE.3)
- expr: max(VALUE.4)
+ expr: avg(VALUE.4)
mode: partial2
File Output Operator
compressed: false
@@ -71,7 +71,7 @@ STAGE PLANS:
tag: -1
value expressions:
expr: 0
- type: string
+ type: double
expr: 1
type: double
expr: 2
@@ -79,26 +79,26 @@ STAGE PLANS:
expr: 3
type: double
expr: 4
- type: double
+ type: string
Reduce Operator Tree:
Group By Operator
aggregations:
- expr: avg(VALUE.0)
- expr: sum(VALUE.1)
+ expr: sum(VALUE.0)
+ expr: max(VALUE.1)
expr: avg(VALUE.2)
expr: min(VALUE.3)
- expr: max(VALUE.4)
+ expr: avg(VALUE.4)
mode: final
Select Operator
expressions:
- expr: 1
- type: double
- expr: 2
- type: double
expr: 0
type: double
expr: 4
type: double
+ expr: 2
+ type: double
+ expr: 1
+ type: double
expr: 3
type: double
File Output Operator
diff --git ql/src/test/results/clientpositive/groupby4.q.out ql/src/test/results/clientpositive/groupby4.q.out
index 163786d..1e31fa1 100644
--- ql/src/test/results/clientpositive/groupby4.q.out
+++ ql/src/test/results/clientpositive/groupby4.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 0 1))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 0 1))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 1 1))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 1 1))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -17,7 +17,7 @@ STAGE PLANS:
type: string
Reduce Output Operator
key expressions:
- expr: substr(0, 0, 1)
+ expr: substr(0, 1, 1)
type: string
sort order: +
Map-reduce partition columns:
diff --git ql/src/test/results/clientpositive/groupby5.q.out ql/src/test/results/clientpositive/groupby5.q.out
index 0ef8c99..34ff031 100644
--- ql/src/test/results/clientpositive/groupby5.q.out
+++ ql/src/test/results/clientpositive/groupby5.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -21,7 +21,7 @@ STAGE PLANS:
type: double
tag: -1
value expressions:
- expr: substr(value, 4)
+ expr: substr(value, 5)
type: string
Reduce Operator Tree:
Group By Operator
diff --git ql/src/test/results/clientpositive/groupby6.q.out ql/src/test/results/clientpositive/groupby6.q.out
index 7521396..6e58a33 100644
--- ql/src/test/results/clientpositive/groupby6.q.out
+++ ql/src/test/results/clientpositive/groupby6.q.out
@@ -1,5 +1,5 @@
ABSTRACT SYNTAX TREE:
- (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECTDI (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src value) 4 1)))))
+ (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECTDI (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src value) 5 1)))))
STAGE DEPENDENCIES:
Stage-1 is a root stage
@@ -17,7 +17,7 @@ STAGE PLANS:
type: string
Reduce Output Operator
key expressions:
- expr: substr(0, 4, 1)
+ expr: substr(0, 5, 1)
type: string
sort order: +
Map-reduce partition columns:
diff --git ql/src/test/results/clientpositive/udf_substr.q.out ql/src/test/results/clientpositive/udf_substr.q.out
new file mode 100644
index 0000000..6a9ce0d
--- /dev/null
+++ ql/src/test/results/clientpositive/udf_substr.q.out
@@ -0,0 +1,5 @@
+NULL NULL NULL NULL NULL
+
+CDEF CDEF CDEFG CDEFG ABC ABC BC C ABC BC A A A
+A AB ABC ABC A AB ABC ABC B BC BC BC C C C C
+C C C C B BC BC BC A AB ABC ABC
diff --git ql/src/test/results/compiler/parse/groupby1.q.out ql/src/test/results/compiler/parse/groupby1.q.out
index cf6d263..90497c3 100755
--- ql/src/test/results/compiler/parse/groupby1.q.out
+++ ql/src/test/results/compiler/parse/groupby1.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key)))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key)))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/parse/groupby2.q.out ql/src/test/results/compiler/parse/groupby2.q.out
index 286b362..79b69fa 100755
--- ql/src/test/results/compiler/parse/groupby2.q.out
+++ ql/src/test/results/compiler/parse/groupby2.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 0 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 0 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 0 1)))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 1 1)) (TOK_SELEXPR (TOK_FUNCTIONDI count (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION concat (TOK_FUNCTION substr (TOK_COLREF src key) 1 1) (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 1 1)))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/parse/groupby3.q.out ql/src/test/results/compiler/parse/groupby3.q.out
index a7d0fda..80be30e 100644
--- ql/src/test/results/compiler/parse/groupby3.q.out
+++ ql/src/test/results/compiler/parse/groupby3.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 4))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 4)))))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTIONDI avg (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION max (TOK_FUNCTION substr (TOK_COLREF src value) 5))) (TOK_SELEXPR (TOK_FUNCTION min (TOK_FUNCTION substr (TOK_COLREF src value) 5)))))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/parse/groupby4.q.out ql/src/test/results/compiler/parse/groupby4.q.out
index 94bd83e..7db163d 100644
--- ql/src/test/results/compiler/parse/groupby4.q.out
+++ ql/src/test/results/compiler/parse/groupby4.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 0 1))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 0 1)))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src key) 1 1))) (TOK_GROUPBY (TOK_FUNCTION substr (TOK_COLREF src key) 1 1)))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/parse/groupby5.q.out ql/src/test/results/compiler/parse/groupby5.q.out
index 261cf76..a18f5d5 100644
--- ql/src/test/results/compiler/parse/groupby5.q.out
+++ ql/src/test/results/compiler/parse/groupby5.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key)))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 5)))) (TOK_GROUPBY (TOK_COLREF src key)))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/parse/groupby6.q.out ql/src/test/results/compiler/parse/groupby6.q.out
index 31e94d1..28b761d 100644
--- ql/src/test/results/compiler/parse/groupby6.q.out
+++ ql/src/test/results/compiler/parse/groupby6.q.out
@@ -1 +1 @@
-(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECTDI (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src value) 4 1))))) null
\ No newline at end of file
+(TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECTDI (TOK_SELEXPR (TOK_FUNCTION substr (TOK_COLREF src value) 5 1))))) null
\ No newline at end of file
diff --git ql/src/test/results/compiler/plan/groupby1.q.xml ql/src/test/results/compiler/plan/groupby1.q.xml
index e9031aa..861dcab 100755
--- ql/src/test/results/compiler/plan/groupby1.q.xml
+++ ql/src/test/results/compiler/plan/groupby1.q.xml
@@ -486,7 +486,7 @@
java.lang.String
- int
+ java.lang.Integer
@@ -513,7 +513,7 @@
- 4
+ 5
diff --git ql/src/test/results/compiler/plan/groupby2.q.xml ql/src/test/results/compiler/plan/groupby2.q.xml
index d26597a..9a570b0 100755
--- ql/src/test/results/compiler/plan/groupby2.q.xml
+++ ql/src/test/results/compiler/plan/groupby2.q.xml
@@ -97,7 +97,7 @@
@@ -111,7 +111,7 @@
@@ -138,7 +138,7 @@
serialization.ddl
- struct binary_table { i64 reducesinkvalue0, double reducesinkvalue1}
+ struct binary_table { double reducesinkvalue0, i64 reducesinkvalue1}
serialization.format
@@ -182,7 +182,7 @@
serialization.ddl
- struct binary_table { string temporarycol0, i64 temporarycol1, double temporarycol2}
+ struct binary_table { string temporarycol0, double temporarycol1, i64 temporarycol2}
serialization.format
@@ -250,30 +250,6 @@
-
-
-
-
org.apache.hadoop.hive.ql.udf.UDAFSum
@@ -308,7 +284,31 @@
-
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.hadoop.hive.ql.udf.UDAFCount
+
+
+ true
+
+
+
+
+
+
+ KEY.1
+
+
+
@@ -360,10 +360,10 @@
java.lang.String
- int
+ java.lang.Integer
- int
+ java.lang.Integer
@@ -390,7 +390,7 @@
- 0
+ 1
@@ -424,7 +424,7 @@
java.lang.String
- int
+ java.lang.Integer
@@ -447,7 +447,7 @@
- 4
+ 5
@@ -759,7 +759,7 @@
1
-
+
@@ -798,10 +798,10 @@
- 1
+ 2
-
+
@@ -855,10 +855,10 @@
- 2
+ 1
-
+
@@ -905,7 +905,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFCount
+ org.apache.hadoop.hive.ql.udf.UDAFSum
@@ -926,7 +926,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFSum
+ org.apache.hadoop.hive.ql.udf.UDAFCount
diff --git ql/src/test/results/compiler/plan/groupby3.q.xml ql/src/test/results/compiler/plan/groupby3.q.xml
index 4ec6eea..8c5599c 100644
--- ql/src/test/results/compiler/plan/groupby3.q.xml
+++ ql/src/test/results/compiler/plan/groupby3.q.xml
@@ -82,7 +82,7 @@
- java.lang.String
+ java.lang.Double
@@ -94,11 +94,7 @@
1
-
-
- java.lang.Double
-
-
+
@@ -108,7 +104,11 @@
2
-
+
+
+ java.lang.String
+
+
@@ -118,7 +118,7 @@
3
-
+
@@ -153,7 +153,7 @@
serialization.ddl
- struct binary_table { string reducesinkvalue0, double reducesinkvalue1, string reducesinkvalue2, double reducesinkvalue3, double reducesinkvalue4}
+ struct binary_table { double reducesinkvalue0, double reducesinkvalue1, string reducesinkvalue2, double reducesinkvalue3, string reducesinkvalue4}
serialization.format
@@ -197,7 +197,7 @@
serialization.ddl
- struct binary_table { string temporarycol0, double temporarycol1, string temporarycol2, double temporarycol3, double temporarycol4}
+ struct binary_table { double temporarycol0, double temporarycol1, string temporarycol2, double temporarycol3, string temporarycol4}
serialization.format
@@ -236,7 +236,7 @@
1
-
+
@@ -246,7 +246,7 @@
2
-
+
@@ -256,7 +256,7 @@
3
-
+
@@ -285,10 +285,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFAvg
-
-
- true
+ org.apache.hadoop.hive.ql.udf.UDAFSum
@@ -315,14 +312,14 @@
KEY.0
-
+
-
+
@@ -333,7 +330,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFSum
+ org.apache.hadoop.hive.ql.udf.UDAFMax
@@ -360,14 +357,14 @@
KEY.0
-
+
-
+
@@ -380,6 +377,9 @@
org.apache.hadoop.hive.ql.udf.UDAFAvg
+
+ true
+
@@ -405,14 +405,14 @@
KEY.0
-
+
-
+
@@ -450,14 +450,14 @@
KEY.0
-
+
-
+
@@ -468,7 +468,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFMax
+ org.apache.hadoop.hive.ql.udf.UDAFAvg
@@ -495,14 +495,14 @@
KEY.0
-
+
-
+
@@ -543,7 +543,7 @@
java.lang.String
- int
+ java.lang.Integer
@@ -556,7 +556,7 @@
0
-
+
@@ -570,14 +570,14 @@
- 4
+ 5
-
+
@@ -680,7 +680,7 @@
value
-
+
@@ -709,7 +709,7 @@
key
-
+
@@ -719,7 +719,7 @@
value
-
+
@@ -741,7 +741,7 @@
0
-
+
@@ -763,7 +763,7 @@
KEY.0
-
+
@@ -802,7 +802,7 @@
VALUE.1
-
+
@@ -812,7 +812,7 @@
VALUE.2
-
+
@@ -822,7 +822,7 @@
VALUE.3
-
+
@@ -933,7 +933,7 @@
0
-
+
@@ -943,7 +943,7 @@
1
-
+
@@ -953,7 +953,7 @@
2
-
+
@@ -963,7 +963,7 @@
3
-
+
@@ -973,7 +973,7 @@
4
-
+
@@ -992,40 +992,40 @@
- 1
+ 0
-
+
- 2
+ 4
-
+
- 0
+ 2
-
+
- 4
+ 1
-
+
@@ -1035,7 +1035,7 @@
3
-
+
@@ -1068,7 +1068,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFAvg
+ org.apache.hadoop.hive.ql.udf.UDAFSum
@@ -1089,7 +1089,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFSum
+ org.apache.hadoop.hive.ql.udf.UDAFMax
@@ -1099,7 +1099,7 @@
VALUE.1
-
+
@@ -1120,7 +1120,7 @@
VALUE.2
-
+
@@ -1141,7 +1141,7 @@
VALUE.3
-
+
@@ -1152,7 +1152,7 @@
- org.apache.hadoop.hive.ql.udf.UDAFMax
+ org.apache.hadoop.hive.ql.udf.UDAFAvg
@@ -1199,7 +1199,7 @@
0
-
+
@@ -1209,7 +1209,7 @@
1
-
+
@@ -1219,7 +1219,7 @@
2
-
+
@@ -1229,7 +1229,7 @@
3
-
+
@@ -1239,7 +1239,7 @@
4
-
+
diff --git ql/src/test/results/compiler/plan/groupby4.q.xml ql/src/test/results/compiler/plan/groupby4.q.xml
index 0658907..fb88b77 100644
--- ql/src/test/results/compiler/plan/groupby4.q.xml
+++ ql/src/test/results/compiler/plan/groupby4.q.xml
@@ -241,10 +241,10 @@
java.lang.String
- int
+ java.lang.Integer
- int
+ java.lang.Integer
@@ -271,7 +271,7 @@
- 0
+ 1
diff --git ql/src/test/results/compiler/plan/groupby5.q.xml ql/src/test/results/compiler/plan/groupby5.q.xml
index aee72ca..d14d182 100644
--- ql/src/test/results/compiler/plan/groupby5.q.xml
+++ ql/src/test/results/compiler/plan/groupby5.q.xml
@@ -388,7 +388,7 @@
java.lang.String
- int
+ java.lang.Integer
@@ -415,7 +415,7 @@
- 4
+ 5
diff --git ql/src/test/results/compiler/plan/groupby6.q.xml ql/src/test/results/compiler/plan/groupby6.q.xml
index 11b0f76..971643c 100644
--- ql/src/test/results/compiler/plan/groupby6.q.xml
+++ ql/src/test/results/compiler/plan/groupby6.q.xml
@@ -241,10 +241,10 @@
java.lang.String
- int
+ java.lang.Integer
- int
+ java.lang.Integer
@@ -271,7 +271,7 @@
- 4
+ 5