You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by px...@apache.org on 2015/12/15 19:23:41 UTC

hive git commit: HIVE-12663: Support quoted table names/columns when ACID is on (Pengcheng Xiong, reviewed by Eugene Koifman)

Repository: hive
Updated Branches:
  refs/heads/master c5b2c0ebb -> be98f0133


HIVE-12663: Support quoted table names/columns when ACID is on (Pengcheng Xiong, reviewed by Eugene Koifman)


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

Branch: refs/heads/master
Commit: be98f01332fd3ce232631d75bbc35a8252828454
Parents: c5b2c0e
Author: Pengcheng Xiong <px...@apache.org>
Authored: Tue Dec 15 10:18:27 2015 -0800
Committer: Pengcheng Xiong <px...@apache.org>
Committed: Tue Dec 15 10:18:27 2015 -0800

----------------------------------------------------------------------
 .../ql/parse/UpdateDeleteSemanticAnalyzer.java  | 21 ++++--
 ..._after_multiple_inserts_special_characters.q | 25 +++++++
 ...er_multiple_inserts_special_characters.q.out | 78 ++++++++++++++++++++
 3 files changed, 117 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/be98f013/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java
index 4c69534..5b4365c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java
@@ -35,6 +35,7 @@ import org.apache.hadoop.hive.ql.hooks.WriteEntity;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.apache.hadoop.hive.ql.lib.Node;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.metadata.HiveUtils;
 import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
@@ -143,16 +144,20 @@ public class UpdateDeleteSemanticAnalyzer extends SemanticAnalyzer {
     List<String> bucketingCols = mTable.getBucketCols();
 
     rewrittenQueryStr.append("insert into table ");
-    rewrittenQueryStr.append(getDotName(tableName));
+    rewrittenQueryStr.append(getDotName(new String[] {
+        HiveUtils.unparseIdentifier(tableName[0], this.conf),
+        HiveUtils.unparseIdentifier(tableName[1], this.conf) }));
 
     // If the table is partitioned we have to put the partition() clause in
     if (partCols != null && partCols.size() > 0) {
       rewrittenQueryStr.append(" partition (");
       boolean first = true;
       for (FieldSchema fschema : partCols) {
-        if (first) first = false;
-        else rewrittenQueryStr.append(", ");
-        rewrittenQueryStr.append(fschema.getName());
+        if (first)
+          first = false;
+        else
+          rewrittenQueryStr.append(", ");
+        rewrittenQueryStr.append(HiveUtils.unparseIdentifier(fschema.getName(), this.conf));
       }
       rewrittenQueryStr.append(")");
     }
@@ -214,7 +219,7 @@ public class UpdateDeleteSemanticAnalyzer extends SemanticAnalyzer {
         rewrittenQueryStr.append(',');
         String name = nonPartCols.get(i).getName();
         ASTNode setCol = setCols.get(name);
-        rewrittenQueryStr.append(name);
+        rewrittenQueryStr.append(HiveUtils.unparseIdentifier(name, this.conf));
         if (setCol != null) {
           // This is one of the columns we're setting, record it's position so we can come back
           // later and patch it up.
@@ -228,11 +233,13 @@ public class UpdateDeleteSemanticAnalyzer extends SemanticAnalyzer {
     if (partCols != null) {
       for (FieldSchema fschema : partCols) {
         rewrittenQueryStr.append(", ");
-        rewrittenQueryStr.append(fschema.getName());
+        rewrittenQueryStr.append(HiveUtils.unparseIdentifier(fschema.getName(), this.conf));
       }
     }
     rewrittenQueryStr.append(" from ");
-    rewrittenQueryStr.append(getDotName(tableName));
+    rewrittenQueryStr.append(getDotName(new String[] {
+        HiveUtils.unparseIdentifier(tableName[0], this.conf),
+        HiveUtils.unparseIdentifier(tableName[1], this.conf) }));
 
     ASTNode where = null;
     int whereIndex = deleting() ? 1 : 2;

http://git-wip-us.apache.org/repos/asf/hive/blob/be98f013/ql/src/test/queries/clientpositive/update_after_multiple_inserts_special_characters.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/update_after_multiple_inserts_special_characters.q b/ql/src/test/queries/clientpositive/update_after_multiple_inserts_special_characters.q
new file mode 100644
index 0000000..65d3fb3
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/update_after_multiple_inserts_special_characters.q
@@ -0,0 +1,25 @@
+set hive.mapred.mode=nonstrict;
+set hive.exec.dynamic.partition.mode=nonstrict;
+set hive.support.concurrency=true;
+set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
+
+
+-- SORT_QUERY_RESULTS
+
+create table `aci/d_u/ami`(i int,
+                 `d?*de e` decimal(5,2),
+                 vc varchar(128)) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true');
+
+insert into table `aci/d_u/ami` values 
+    (1, 109.23, 'mary had a little lamb'),
+    (6553, 923.19, 'its fleece was white as snow');
+
+insert into table `aci/d_u/ami` values 
+    (10, 119.23, 'and everywhere that mary went'),
+    (65530, 823.19, 'the lamb was sure to go');
+
+select * from `aci/d_u/ami` order by `d?*de e`;
+
+update `aci/d_u/ami` set `d?*de e` = 3.14 where `d?*de e` = 109.23 or `d?*de e` = 119.23;
+
+select * from `aci/d_u/ami` order by `d?*de e`;

http://git-wip-us.apache.org/repos/asf/hive/blob/be98f013/ql/src/test/results/clientpositive/update_after_multiple_inserts_special_characters.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/update_after_multiple_inserts_special_characters.q.out b/ql/src/test/results/clientpositive/update_after_multiple_inserts_special_characters.q.out
new file mode 100644
index 0000000..b85db4f
--- /dev/null
+++ b/ql/src/test/results/clientpositive/update_after_multiple_inserts_special_characters.q.out
@@ -0,0 +1,78 @@
+PREHOOK: query: -- SORT_QUERY_RESULTS
+
+create table `aci/d_u/ami`(i int,
+                 `d?*de e` decimal(5,2),
+                 vc varchar(128)) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@aci/d_u/ami
+POSTHOOK: query: -- SORT_QUERY_RESULTS
+
+create table `aci/d_u/ami`(i int,
+                 `d?*de e` decimal(5,2),
+                 vc varchar(128)) clustered by (i) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@aci/d_u/ami
+PREHOOK: query: insert into table `aci/d_u/ami` values 
+    (1, 109.23, 'mary had a little lamb'),
+    (6553, 923.19, 'its fleece was white as snow')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@values__tmp__table__1
+PREHOOK: Output: default@aci/d_u/ami
+POSTHOOK: query: insert into table `aci/d_u/ami` values 
+    (1, 109.23, 'mary had a little lamb'),
+    (6553, 923.19, 'its fleece was white as snow')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@values__tmp__table__1
+POSTHOOK: Output: default@aci/d_u/ami
+POSTHOOK: Lineage: aci/d_u/ami.d?*de e EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+POSTHOOK: Lineage: aci/d_u/ami.i EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: aci/d_u/ami.vc EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ]
+PREHOOK: query: insert into table `aci/d_u/ami` values 
+    (10, 119.23, 'and everywhere that mary went'),
+    (65530, 823.19, 'the lamb was sure to go')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@values__tmp__table__2
+PREHOOK: Output: default@aci/d_u/ami
+POSTHOOK: query: insert into table `aci/d_u/ami` values 
+    (10, 119.23, 'and everywhere that mary went'),
+    (65530, 823.19, 'the lamb was sure to go')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@values__tmp__table__2
+POSTHOOK: Output: default@aci/d_u/ami
+POSTHOOK: Lineage: aci/d_u/ami.d?*de e EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+POSTHOOK: Lineage: aci/d_u/ami.i EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: aci/d_u/ami.vc EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col3, type:string, comment:), ]
+PREHOOK: query: select * from `aci/d_u/ami` order by `d?*de e`
+PREHOOK: type: QUERY
+PREHOOK: Input: default@aci/d_u/ami
+#### A masked pattern was here ####
+POSTHOOK: query: select * from `aci/d_u/ami` order by `d?*de e`
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@aci/d_u/ami
+#### A masked pattern was here ####
+1	109.23	mary had a little lamb
+10	119.23	and everywhere that mary went
+6553	923.19	its fleece was white as snow
+65530	823.19	the lamb was sure to go
+PREHOOK: query: update `aci/d_u/ami` set `d?*de e` = 3.14 where `d?*de e` = 109.23 or `d?*de e` = 119.23
+PREHOOK: type: QUERY
+PREHOOK: Input: default@aci/d_u/ami
+PREHOOK: Output: default@aci/d_u/ami
+POSTHOOK: query: update `aci/d_u/ami` set `d?*de e` = 3.14 where `d?*de e` = 109.23 or `d?*de e` = 119.23
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@aci/d_u/ami
+POSTHOOK: Output: default@aci/d_u/ami
+PREHOOK: query: select * from `aci/d_u/ami` order by `d?*de e`
+PREHOOK: type: QUERY
+PREHOOK: Input: default@aci/d_u/ami
+#### A masked pattern was here ####
+POSTHOOK: query: select * from `aci/d_u/ami` order by `d?*de e`
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@aci/d_u/ami
+#### A masked pattern was here ####
+1	3.14	mary had a little lamb
+10	3.14	and everywhere that mary went
+6553	923.19	its fleece was white as snow
+65530	823.19	the lamb was sure to go