From 52210c80d2642fef6d4ca8275659c24ffa9fd88e Mon Sep 17 00:00:00 2001 From: nareshpr Date: Wed, 3 Jun 2020 22:55:41 -0700 Subject: [PATCH] HIVE-23607 - Permission Issue: Create view on another view succeeds but alter view fails --- .../hive/ql/parse/SemanticAnalyzer.java | 2 +- .../apache/hadoop/hive/ql/plan/PlanUtils.java | 2 +- .../hadoop/hive/ql/plan/TestViewEntity.java | 26 +++++++++++++++++++ 3 files changed, 28 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 8238a2a4a2..68a43d787c 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 @@ -2238,7 +2238,7 @@ private void getMetaData(QB qb, ReadEntity parentInput) // Temporary tables created during the execution are not the input sources if (!PlanUtils.isValuesTempTable(alias)) { PlanUtils.addInput(inputs, - new ReadEntity(tab, parentViewInfo, parentViewInfo == null),mergeIsDirect); + new ReadEntity(tab, parentViewInfo, parentViewInfo == null), mergeIsDirect); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java index 2fb452bea5..fd3918a7c6 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java @@ -1172,7 +1172,7 @@ public static void addInputsForView(ParseContext parseCtx) throws HiveException // Adds tables only for create view (PPD filter can be appended by outer query) Table table = topOp.getConf().getTableMetadata(); - PlanUtils.addInput(inputs, new ReadEntity(table, parentViewInfo)); + PlanUtils.addInput(inputs, new ReadEntity(table, parentViewInfo, parentViewInfo == null)); } } diff --git a/ql/src/test/org/apache/hadoop/hive/ql/plan/TestViewEntity.java b/ql/src/test/org/apache/hadoop/hive/ql/plan/TestViewEntity.java index cbf1c83c8a..d3a3cd5740 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/plan/TestViewEntity.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/plan/TestViewEntity.java @@ -271,4 +271,30 @@ public void testUnionAllInSubView() throws Exception { } + /** + * Verify create/alter view on another view's underlying table is always indirect + * direct and indirect inputs. + * @throws CommandProcessorException + */ + @Test + public void alterView() throws CommandProcessorException { + + driver.run("create table test_table (id int)"); + driver.run("create view test_view as select * from test_table"); + + + driver.compile("create view test_view_1 as select * from test_view", true); + assertEquals("default@test_view", CheckInputReadEntity.readEntities[0].getName()); + assertTrue("default@test_view", CheckInputReadEntity.readEntities[0].isDirect()); + assertEquals("default@test_table", CheckInputReadEntity.readEntities[1].getName()); + assertFalse("default@test_table", CheckInputReadEntity.readEntities[1].isDirect()); + + driver.run("create view test_view_1 as select * from test_view"); + + driver.compile("alter view test_view_1 as select * from test_view", true); + assertEquals("default@test_view", CheckInputReadEntity.readEntities[0].getName()); + assertTrue("default@test_view", CheckInputReadEntity.readEntities[0].isDirect()); + assertEquals("default@test_table", CheckInputReadEntity.readEntities[1].getName()); + assertFalse("default@test_table", CheckInputReadEntity.readEntities[1].isDirect()); + } } -- 2.20.1