HIVE-17415 - Hit error "SemanticException View xxx is corresponding to LIMIT, 
rather than a SelectOperator." in Hive queries (Deepak Jaiswal, 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/b82d38aa
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b82d38aa
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b82d38aa

Branch: refs/heads/hive-14535
Commit: b82d38aa38f71a66bee47977c041e7d8a28c8419
Parents: 45f3fac
Author: Deepak Jaiswal <deepakjais...@gmail.com>
Authored: Thu Aug 31 21:40:22 2017 -0700
Committer: Vineet Garg <vg...@apache.com>
Committed: Thu Aug 31 21:41:55 2017 -0700

----------------------------------------------------------------------
 .../test/resources/testconfiguration.properties |  2 +
 .../hadoop/hive/ql/parse/SemanticAnalyzer.java  |  8 ++-
 .../clientpositive/authorization_view_8.q       | 23 +++++++
 .../llap/authorization_view_8.q.out             | 69 ++++++++++++++++++++
 4 files changed, 101 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/b82d38aa/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties 
b/itests/src/test/resources/testconfiguration.properties
index f452341..6504250 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -87,6 +87,7 @@ minillap.shared.query.files=insert_into1.q,\
 minillaplocal.shared.query.files=alter_merge_2_orc.q,\
   alter_merge_orc.q,\
   alter_merge_stats_orc.q,\
+  authorization_view_8.q,\
   auto_join0.q,\
   auto_join1.q,\
   auto_join21.q,\
@@ -462,6 +463,7 @@ minillaplocal.query.files=\
   acid_globallimit.q,\
   acid_vectorization_missing_cols.q,\
   alter_merge_stats_orc.q,\
+  authorization_view_8.q,\
   auto_join30.q,\
   auto_join_filters.q,\
   auto_join_nulls.q,\

http://git-wip-us.apache.org/repos/asf/hive/blob/b82d38aa/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
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 e8acabe..6f379da 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
@@ -92,6 +92,7 @@ import org.apache.hadoop.hive.ql.exec.FunctionInfo;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
 import org.apache.hadoop.hive.ql.exec.GroupByOperator;
 import org.apache.hadoop.hive.ql.exec.JoinOperator;
+import org.apache.hadoop.hive.ql.exec.LimitOperator;
 import org.apache.hadoop.hive.ql.exec.Operator;
 import org.apache.hadoop.hive.ql.exec.OperatorFactory;
 import org.apache.hadoop.hive.ql.exec.RecordReader;
@@ -10547,10 +10548,15 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
     // Recurse over the subqueries to fill the subquery part of the plan
     for (String alias : qb.getSubqAliases()) {
       QBExpr qbexpr = qb.getSubqForAlias(alias);
-      Operator operator = genPlan(qb, qbexpr);
+      Operator<?> operator = genPlan(qb, qbexpr);
       aliasToOpInfo.put(alias, operator);
       if (qb.getViewToTabSchema().containsKey(alias)) {
         // we set viewProjectToTableSchema so that we can leverage 
ColumnPruner.
+        if (operator instanceof LimitOperator) {
+          // If create view has LIMIT operator, this can happen
+          // Fetch parent operator
+          operator = operator.getParentOperators().get(0);
+        }
         if (operator instanceof SelectOperator) {
           if (this.viewProjectToTableSchema == null) {
             this.viewProjectToTableSchema = new LinkedHashMap<>();

http://git-wip-us.apache.org/repos/asf/hive/blob/b82d38aa/ql/src/test/queries/clientpositive/authorization_view_8.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/authorization_view_8.q 
b/ql/src/test/queries/clientpositive/authorization_view_8.q
new file mode 100644
index 0000000..82fc97b
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/authorization_view_8.q
@@ -0,0 +1,23 @@
+set 
hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider;
+
+create table my_passwd (
+username string,
+uid int);
+
+insert into my_passwd values
+                      ("Deepak", 1),
+                      ("Gunther", 2),
+                      ("Jason", 3),
+                      ("Prasanth", 4),
+                      ("Gopal", 5),
+                      ("Sergey", 6);
+
+
+set hive.cbo.enable=false;
+create view my_passwd_vw as select * from my_passwd limit 3;
+
+set hive.security.authorization.enabled=true;
+grant select on table my_passwd to user hive_test_user;
+grant select on table my_passwd_vw to user hive_test_user;
+
+select * from my_passwd_vw;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/b82d38aa/ql/src/test/results/clientpositive/llap/authorization_view_8.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/authorization_view_8.q.out 
b/ql/src/test/results/clientpositive/llap/authorization_view_8.q.out
new file mode 100644
index 0000000..67ddb32
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/authorization_view_8.q.out
@@ -0,0 +1,69 @@
+PREHOOK: query: create table my_passwd (
+username string,
+uid int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@my_passwd
+POSTHOOK: query: create table my_passwd (
+username string,
+uid int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@my_passwd
+PREHOOK: query: insert into my_passwd values
+                      ("Deepak", 1),
+                      ("Gunther", 2),
+                      ("Jason", 3),
+                      ("Prasanth", 4),
+                      ("Gopal", 5),
+                      ("Sergey", 6)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@my_passwd
+POSTHOOK: query: insert into my_passwd values
+                      ("Deepak", 1),
+                      ("Gunther", 2),
+                      ("Jason", 3),
+                      ("Prasanth", 4),
+                      ("Gopal", 5),
+                      ("Sergey", 6)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@my_passwd
+POSTHOOK: Lineage: my_passwd.uid EXPRESSION 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, 
type:string, comment:), ]
+POSTHOOK: Lineage: my_passwd.username SIMPLE 
[(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, 
type:string, comment:), ]
+PREHOOK: query: create view my_passwd_vw as select * from my_passwd limit 3
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: default@my_passwd
+PREHOOK: Output: database:default
+PREHOOK: Output: default@my_passwd_vw
+POSTHOOK: query: create view my_passwd_vw as select * from my_passwd limit 3
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: default@my_passwd
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@my_passwd_vw
+POSTHOOK: Lineage: my_passwd_vw.uid SIMPLE 
[(my_passwd)my_passwd.FieldSchema(name:uid, type:int, comment:null), ]
+POSTHOOK: Lineage: my_passwd_vw.username SIMPLE 
[(my_passwd)my_passwd.FieldSchema(name:username, type:string, comment:null), ]
+PREHOOK: query: grant select on table my_passwd to user hive_test_user
+PREHOOK: type: GRANT_PRIVILEGE
+PREHOOK: Output: default@my_passwd
+POSTHOOK: query: grant select on table my_passwd to user hive_test_user
+POSTHOOK: type: GRANT_PRIVILEGE
+POSTHOOK: Output: default@my_passwd
+PREHOOK: query: grant select on table my_passwd_vw to user hive_test_user
+PREHOOK: type: GRANT_PRIVILEGE
+PREHOOK: Output: default@my_passwd_vw
+POSTHOOK: query: grant select on table my_passwd_vw to user hive_test_user
+POSTHOOK: type: GRANT_PRIVILEGE
+POSTHOOK: Output: default@my_passwd_vw
+PREHOOK: query: select * from my_passwd_vw
+PREHOOK: type: QUERY
+PREHOOK: Input: default@my_passwd
+PREHOOK: Input: default@my_passwd_vw
+#### A masked pattern was here ####
+POSTHOOK: query: select * from my_passwd_vw
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@my_passwd
+POSTHOOK: Input: default@my_passwd_vw
+#### A masked pattern was here ####
+Deepak 1
+Gunther        2
+Jason  3

Reply via email to