You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kg...@apache.org on 2021/11/15 09:00:59 UTC
[hive] branch master updated: HIVE-25365: Insufficient privileges to show partitions when partition columns are authorized (#2515) (Zhihua Deng reviewed by Zoltan Haindrich)
This is an automated email from the ASF dual-hosted git repository.
kgyrtkirk 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 209b5e3 HIVE-25365: Insufficient privileges to show partitions when partition columns are authorized (#2515) (Zhihua Deng reviewed by Zoltan Haindrich)
209b5e3 is described below
commit 209b5e37b43ddbe6ffcd37815d9600d24fa77882
Author: dengzh <de...@gmail.com>
AuthorDate: Mon Nov 15 17:00:48 2021 +0800
HIVE-25365: Insufficient privileges to show partitions when partition columns are authorized (#2515) (Zhihua Deng reviewed by Zoltan Haindrich)
---
.../partition/show/ShowPartitionAnalyzer.java | 3 +
.../hadoop/hive/ql/parse/TestColumnAccess.java | 65 ++++++++++++++--------
2 files changed, 44 insertions(+), 24 deletions(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/partition/show/ShowPartitionAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/partition/show/ShowPartitionAnalyzer.java
index a4158d6..40500f1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/partition/show/ShowPartitionAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/partition/show/ShowPartitionAnalyzer.java
@@ -38,6 +38,7 @@ import org.apache.hadoop.hive.ql.hooks.ReadEntity;
import org.apache.hadoop.hive.ql.metadata.Table;
import org.apache.hadoop.hive.ql.parse.ASTNode;
import org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer;
+import org.apache.hadoop.hive.ql.parse.ColumnAccessInfo;
import org.apache.hadoop.hive.ql.parse.HiveParser;
import org.apache.hadoop.hive.ql.parse.HiveTableName;
import org.apache.hadoop.hive.ql.parse.RowResolver;
@@ -76,6 +77,8 @@ public class ShowPartitionAnalyzer extends BaseSemanticAnalyzer {
Table table = getTable(HiveTableName.of(tableName));
inputs.add(new ReadEntity(table));
+ setColumnAccessInfo(new ColumnAccessInfo());
+ table.getPartColNames().forEach(col -> getColumnAccessInfo().add(table.getCompleteName(), col));
ExprNodeDesc filter = getShowPartitionsFilter(table, ast);
String orderBy = getShowPartitionsOrder(table, ast);
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestColumnAccess.java b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestColumnAccess.java
index c4e336a..305c170 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestColumnAccess.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestColumnAccess.java
@@ -41,6 +41,7 @@ public class TestColumnAccess {
Driver driver = createDriver();
driver.run("create table t1(id1 int, name1 string)");
driver.run("create table t2(id2 int, id1 int, name2 string)");
+ driver.run("create table t3(id1 int) partitioned by (`date` int, p0 string)");
driver.run("create view v1 as select * from t1");
}
@@ -49,6 +50,7 @@ public class TestColumnAccess {
Driver driver = createDriver();
driver.run("drop table t1");
driver.run("drop table t2");
+ driver.run("drop table t3");
driver.run("drop view v1");
}
@@ -64,16 +66,16 @@ public class TestColumnAccess {
List<String> cols = columnAccessInfo.getTableToColumnAccessMap().get("default@t1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
// check access columns from readEntity
Map<String, List<String>> tableColsMap = getColsFromReadEntity(plan.getInputs());
cols = tableColsMap.get("default@t1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
}
@Test
@@ -88,14 +90,14 @@ public class TestColumnAccess {
List<String> cols = columnAccessInfo.getTableToColumnAccessMap().get("default@t1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
cols = columnAccessInfo.getTableToColumnAccessMap().get("default@t2");
Assert.assertNotNull(cols);
Assert.assertEquals(3, cols.size());
- Assert.assertNotNull(cols.contains("id2"));
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id2"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name2"));
// check access columns from readEntity
@@ -103,14 +105,14 @@ public class TestColumnAccess {
cols = tableColsMap.get("default@t1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
cols = tableColsMap.get("default@t2");
Assert.assertNotNull(cols);
Assert.assertEquals(3, cols.size());
- Assert.assertNotNull(cols.contains("id2"));
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id2"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name2"));
}
@Test
@@ -129,14 +131,14 @@ public class TestColumnAccess {
cols = columnAccessInfo.getTableToColumnAccessMap().get("default@v1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
cols = columnAccessInfo.getTableToColumnAccessMap().get("default@t2");
Assert.assertNotNull(cols);
Assert.assertEquals(3, cols.size());
- Assert.assertNotNull(cols.contains("id2"));
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id2"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name2"));
// check access columns from readEntity
@@ -146,14 +148,29 @@ public class TestColumnAccess {
cols = tableColsMap.get("default@v1");
Assert.assertNotNull(cols);
Assert.assertEquals(2, cols.size());
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name1"));
cols = tableColsMap.get("default@t2");
Assert.assertNotNull(cols);
Assert.assertEquals(3, cols.size());
- Assert.assertNotNull(cols.contains("id2"));
- Assert.assertNotNull(cols.contains("id1"));
- Assert.assertNotNull(cols.contains("name1"));
+ Assert.assertTrue(cols.contains("id2"));
+ Assert.assertTrue(cols.contains("id1"));
+ Assert.assertTrue(cols.contains("name2"));
+ }
+
+ @Test
+ public void testShowPartitions() throws Exception {
+ String query = "show partitions t3 where `date` > 20011113";
+ Driver driver = createDriver();
+ int rc = driver.compile(query, true);
+ Assert.assertEquals("Checking command success", 0, rc);
+ QueryPlan plan = driver.getPlan();
+ ColumnAccessInfo columnAccessInfo = plan.getColumnAccessInfo();
+ List<String> cols = columnAccessInfo.getTableToColumnAccessMap().get("default@t3");
+
+ Assert.assertEquals(2, cols.size());
+ Assert.assertTrue(cols.contains("date"));
+ Assert.assertTrue(cols.contains("p0"));
}
private Map<String, List<String>> getColsFromReadEntity(Set<ReadEntity> inputs) {