You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2020/05/03 15:17:58 UTC

[hive] branch master updated: HIVE-23355: Fix quoting behavior when masking is enabled (John Sherman, reviewed by Jesus Camacho Rodriguez)

This is an automated email from the ASF dual-hosted git repository.

jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 69d036f  HIVE-23355: Fix quoting behavior when masking is enabled (John Sherman, reviewed by Jesus Camacho Rodriguez)
69d036f is described below

commit 69d036fced323ae4d6cd3158c282d758e1a8ee2c
Author: John Sherman <jf...@cloudera.com>
AuthorDate: Sun May 3 08:09:56 2020 -0700

    HIVE-23355: Fix quoting behavior when masking is enabled (John Sherman, reviewed by Jesus Camacho Rodriguez)
---
 .../java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java |  6 ++++--
 ql/src/test/queries/clientnegative/stored_as_quoting.q         |  4 ++++
 ql/src/test/queries/clientnegative/stored_as_quoting2.q        |  4 ++++
 ql/src/test/queries/clientpositive/masking_reserved.q          |  1 +
 ql/src/test/results/clientnegative/stored_as_quoting.q.out     |  1 +
 ql/src/test/results/clientnegative/stored_as_quoting2.q.out    |  1 +
 ql/src/test/results/clientpositive/masking_reserved.q.out      | 10 ++++++++++
 7 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 2da3786..8cd763a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -12231,8 +12231,10 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
           ast.getTokenStartIndex(), ast.getTokenStopIndex());
       ASTNode rewrittenTree;
       try {
-        rewrittenTree = ParseUtils.parse(rewrittenQuery);
-      } catch (ParseException e) {
+        // We pass a new empty context with our HiveConf so the lexer can
+        // detect if allowQuotedId is enabled.
+        rewrittenTree = ParseUtils.parse(rewrittenQuery, new Context(conf));
+      } catch (ParseException | IOException e) {
         throw new SemanticException(e);
       }
       return rewrittenTree;
diff --git a/ql/src/test/queries/clientnegative/stored_as_quoting.q b/ql/src/test/queries/clientnegative/stored_as_quoting.q
new file mode 100644
index 0000000..3994b77
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/stored_as_quoting.q
@@ -0,0 +1,4 @@
+--- Verifying that the proper identifier makes it to processStorageFormat and
+--- displayed in the SemanticException.
+--- This should be DATE in the SemanticException
+create temporary table quoted_date(i int) stored as `DATE`;
diff --git a/ql/src/test/queries/clientnegative/stored_as_quoting2.q b/ql/src/test/queries/clientnegative/stored_as_quoting2.q
new file mode 100644
index 0000000..05c05cb
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/stored_as_quoting2.q
@@ -0,0 +1,4 @@
+--- Verifying that the proper identifier makes it to processStorageFormat and
+--- displayed in the SemanticException.
+--- This should be `ORC` in the SemanticException
+create temporary table quoted_orc(i int) stored as ```ORC```;
diff --git a/ql/src/test/queries/clientpositive/masking_reserved.q b/ql/src/test/queries/clientpositive/masking_reserved.q
index bf8fc1e..fe3e3f0 100644
--- a/ql/src/test/queries/clientpositive/masking_reserved.q
+++ b/ql/src/test/queries/clientpositive/masking_reserved.q
@@ -5,6 +5,7 @@ set hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.autho
 create table keyword_test_off (id int, `etad` string, key int);
 create table keyword_test_on (id int, `date` string, key int);
 create table masking_test_n_masking_reserved (id int, value string, key int);
+create temporary table masking_test_n_masking_temp stored as orc as select * from masking_test_n_masking_reserved;
 
 explain select a.`etad`, b.value from keyword_test_off a join masking_test_n_masking_reserved b on b.id = a.id;
 select a.`etad`, b.value from keyword_test_off a join masking_test_n_masking_reserved b on b.id = a.id;
diff --git a/ql/src/test/results/clientnegative/stored_as_quoting.q.out b/ql/src/test/results/clientnegative/stored_as_quoting.q.out
new file mode 100644
index 0000000..9501e64
--- /dev/null
+++ b/ql/src/test/results/clientnegative/stored_as_quoting.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException Unrecognized file format in STORED AS clause: 'DATE'
diff --git a/ql/src/test/results/clientnegative/stored_as_quoting2.q.out b/ql/src/test/results/clientnegative/stored_as_quoting2.q.out
new file mode 100644
index 0000000..504577a
--- /dev/null
+++ b/ql/src/test/results/clientnegative/stored_as_quoting2.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException Unrecognized file format in STORED AS clause: '`ORC`'
diff --git a/ql/src/test/results/clientpositive/masking_reserved.q.out b/ql/src/test/results/clientpositive/masking_reserved.q.out
index e174f6c..11d81cd 100644
--- a/ql/src/test/results/clientpositive/masking_reserved.q.out
+++ b/ql/src/test/results/clientpositive/masking_reserved.q.out
@@ -22,6 +22,16 @@ POSTHOOK: query: create table masking_test_n_masking_reserved (id int, value str
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@masking_test_n_masking_reserved
+PREHOOK: query: create temporary table masking_test_n_masking_temp stored as orc as select * from masking_test_n_masking_reserved
+PREHOOK: type: CREATETABLE_AS_SELECT
+PREHOOK: Input: default@masking_test_n_masking_reserved
+PREHOOK: Output: database:default
+PREHOOK: Output: default@masking_test_n_masking_temp
+POSTHOOK: query: create temporary table masking_test_n_masking_temp stored as orc as select * from masking_test_n_masking_reserved
+POSTHOOK: type: CREATETABLE_AS_SELECT
+POSTHOOK: Input: default@masking_test_n_masking_reserved
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@masking_test_n_masking_temp
 PREHOOK: query: explain select a.`etad`, b.value from keyword_test_off a join masking_test_n_masking_reserved b on b.id = a.id
 PREHOOK: type: QUERY
 PREHOOK: Input: default@keyword_test_off