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 cd3c86064df3e7febcc16e03aab6ce407e0dc8a0..535289cad530777a8af6feac86fef1e22b27cb93 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 @@ -1948,7 +1948,12 @@ private void getMetaData(QB qb, ReadEntity parentInput) ReadEntity viewInput = new ReadEntity(tab, parentInput, !qb.isInsideView()); viewInput = PlanUtils.addInput(inputs, viewInput); aliasToViewInfo.put(alias, new ObjectPair(fullViewName, viewInput)); - viewAliasToInput.put(getAliasId(alias, qb), viewInput); + String aliasId = getAliasId(alias, qb); + if (aliasId != null) { + aliasId = aliasId.replace(SemanticAnalyzer.SUBQUERY_TAG_1, "") + .replace(SemanticAnalyzer.SUBQUERY_TAG_2, ""); + } + viewAliasToInput.put(aliasId, viewInput); continue; } diff --git a/ql/src/test/queries/clientpositive/authorization_view_sqlstd.q b/ql/src/test/queries/clientpositive/authorization_view_sqlstd.q index 8467c16b6632b7fd7e82fc9a1998b8588c6d5dbe..14044bff151fa80d8f5115ea02951aa11a8557e9 100644 --- a/ql/src/test/queries/clientpositive/authorization_view_sqlstd.q +++ b/ql/src/test/queries/clientpositive/authorization_view_sqlstd.q @@ -38,6 +38,8 @@ select * from vt1; -- even if view is within a sub query select * from (select * from vt1) a; +select * from vt1 union all select * from vt1; + set user.name=user1; grant all on table vt2 to user user2; diff --git a/ql/src/test/results/clientpositive/authorization_view_sqlstd.q.out b/ql/src/test/results/clientpositive/authorization_view_sqlstd.q.out index 461490bbfc8fb3b0ae7e01c05d9a4fdc4cbc8470..d2fab2f8f0c3c7bddf77acf0fa376efecc87b4a8 100644 --- a/ql/src/test/results/clientpositive/authorization_view_sqlstd.q.out +++ b/ql/src/test/results/clientpositive/authorization_view_sqlstd.q.out @@ -123,6 +123,16 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@t1 POSTHOOK: Input: default@vt1 #### A masked pattern was here #### +PREHOOK: query: select * from vt1 union all select * from vt1 +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +PREHOOK: Input: default@vt1 +#### A masked pattern was here #### +POSTHOOK: query: select * from vt1 union all select * from vt1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +POSTHOOK: Input: default@vt1 +#### A masked pattern was here #### PREHOOK: query: grant all on table vt2 to user user2 PREHOOK: type: GRANT_PRIVILEGE PREHOOK: Output: default@vt2