Repository: hive
Updated Branches:
  refs/heads/master f9d1436b2 -> acea62cfc


HIVE-12297: CBO: Calcite Operator To Hive Operator (Calcite Return Path) : 
dealing with '$' in typeInfo (Pengcheng Xiong, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/bb799c9e
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/bb799c9e
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/bb799c9e

Branch: refs/heads/master
Commit: bb799c9ee5a9b4afc6256bc5c4a7f70f60ffd3cd
Parents: f9d1436
Author: Pengcheng Xiong <pxi...@apache.org>
Authored: Tue Nov 3 11:24:01 2015 -0800
Committer: Pengcheng Xiong <pxi...@apache.org>
Committed: Tue Nov 3 11:24:01 2015 -0800

----------------------------------------------------------------------
 .../test/queries/clientpositive/cbo_udf_max.q   | 36 ++++++++++++
 .../results/clientpositive/cbo_udf_max.q.out    | 62 ++++++++++++++++++++
 .../hive/serde2/typeinfo/TypeInfoUtils.java     |  5 +-
 3 files changed, 102 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/bb799c9e/ql/src/test/queries/clientpositive/cbo_udf_max.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/cbo_udf_max.q 
b/ql/src/test/queries/clientpositive/cbo_udf_max.q
new file mode 100644
index 0000000..c22e89b
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cbo_udf_max.q
@@ -0,0 +1,36 @@
+set hive.cbo.returnpath.hiveop=true;
+
+DESCRIBE FUNCTION max;
+DESCRIBE FUNCTION EXTENDED max;
+
+
+set hive.map.aggr = false;
+set hive.groupby.skewindata = false;
+
+SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src;
+
+
+set hive.map.aggr = true;
+set hive.groupby.skewindata = false;
+
+SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src;
+
+
+set hive.map.aggr = false;
+set hive.groupby.skewindata = true;
+
+SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src;
+
+
+set hive.map.aggr = true;
+set hive.groupby.skewindata = true;
+
+SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src;

http://git-wip-us.apache.org/repos/asf/hive/blob/bb799c9e/ql/src/test/results/clientpositive/cbo_udf_max.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/cbo_udf_max.q.out 
b/ql/src/test/results/clientpositive/cbo_udf_max.q.out
new file mode 100644
index 0000000..410cf31
--- /dev/null
+++ b/ql/src/test/results/clientpositive/cbo_udf_max.q.out
@@ -0,0 +1,62 @@
+PREHOOK: query: DESCRIBE FUNCTION max
+PREHOOK: type: DESCFUNCTION
+POSTHOOK: query: DESCRIBE FUNCTION max
+POSTHOOK: type: DESCFUNCTION
+max(expr) - Returns the maximum value of expr
+PREHOOK: query: DESCRIBE FUNCTION EXTENDED max
+PREHOOK: type: DESCFUNCTION
+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
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+{"expr$0":498,"expr$1":"val_498"}      {"expr$0":498,"expr$1":"val_498"}
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+{"expr$0":498,"expr$1":"val_498"}      {"expr$0":"98","expr$1":"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
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+{"expr$0":498,"expr$1":"val_498"}      {"expr$0":498,"expr$1":"val_498"}
+PREHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT max(struct(CAST(key as INT), value)),
+       max(struct(key, value))
+FROM src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+{"expr$0":498,"expr$1":"val_498"}      {"expr$0":"98","expr$1":"val_98"}

http://git-wip-us.apache.org/repos/asf/hive/blob/bb799c9e/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java
----------------------------------------------------------------------
diff --git 
a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java 
b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java
index a4323d1..24361c7 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java
@@ -256,7 +256,7 @@ public final class TypeInfoUtils {
     };
 
     private static boolean isTypeChar(char c) {
-      return Character.isLetterOrDigit(c) || c == '_' || c == '.' || c == ' ';
+      return Character.isLetterOrDigit(c) || c == '_' || c == '.' || c == ' ' 
|| c == '$';
     }
 
     /**
@@ -266,6 +266,9 @@ public final class TypeInfoUtils {
      *
      * tokenize("map<int,string>") should return
      * ["map","<","int",",","string",">"]
+     * 
+     * Note that we add '$' in new Calcite return path. As '$' will not appear
+     * in any type in Hive, it is safe to do so.
      */
     private static ArrayList<Token> tokenize(String typeInfoString) {
       ArrayList<Token> tokens = new ArrayList<Token>(0);

Reply via email to