From 8aed7491e058800d1707ce8221bb8504bb1b7c38 Mon Sep 17 00:00:00 2001 From: Syed Albiz Date: Fri, 15 Jul 2011 11:12:47 -0700 Subject: [PATCH 1/1] add testcase and shit diff --git ql/src/java/org/apache/hadoop/hive/ql/index/bitmap/BitmapIndexHandler.java ql/src/java/org/apache/hadoop/hive/ql/index/bitmap/BitmapIndexHandler.java index 61bbbf5..9f4874d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/index/bitmap/BitmapIndexHandler.java +++ ql/src/java/org/apache/hadoop/hive/ql/index/bitmap/BitmapIndexHandler.java @@ -50,7 +50,9 @@ import org.apache.hadoop.hive.ql.metadata.Partition; import org.apache.hadoop.hive.ql.metadata.VirtualColumn; import org.apache.hadoop.hive.ql.parse.ParseContext; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; +import org.apache.hadoop.hive.ql.plan.HiveOperation; import org.apache.hadoop.hive.ql.plan.PartitionDesc; +import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqual; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrGreaterThan; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrLessThan; @@ -222,10 +224,10 @@ public class BitmapIndexHandler extends TableBasedIndexHandler { PartitionDesc indexTblPartDesc, String indexTableName, PartitionDesc baseTablePartDesc, String baseTableName, String dbName) { - HiveConf conf = new HiveConf(getConf(), BitmapIndexHandler.class); - HiveConf.setBoolVar(conf, HiveConf.ConfVars.HIVEROWOFFSET, true); + HiveConf builderConf = new HiveConf(getConf(), BitmapIndexHandler.class); + HiveConf.setBoolVar(builderConf, HiveConf.ConfVars.HIVEROWOFFSET, true); // Don't try to index optimize the query to build the index - HiveConf.setBoolVar(conf, HiveConf.ConfVars.HIVEOPTINDEXFILTER, false); + HiveConf.setBoolVar(builderConf, HiveConf.ConfVars.HIVEOPTINDEXFILTER, false); String indexCols = HiveUtils.getUnparsedColumnNamesFromFieldSchema(indexField); @@ -280,13 +282,17 @@ public class BitmapIndexHandler extends TableBasedIndexHandler { } // Require clusterby ROWOFFSET if map-size aggregation is off. - if (!conf.get("hive.map.aggr", null).equals("true")) { + if (!builderConf.get("hive.map.aggr", null).equals("true")) { command.append(" CLUSTER BY "); command.append(VirtualColumn.ROWOFFSET.getName()); } - Driver driver = new Driver(conf); + SessionState oldss = SessionState.get(); + HiveOperation parentOp = oldss.getHiveOperation(); + Driver driver = new Driver(builderConf); driver.compile(command.toString()); + oldss.setCommandType(parentOp); + Task rootTask = driver.getPlan().getRootTasks().get(0); inputs.addAll(driver.getPlan().getInputs()); diff --git ql/src/java/org/apache/hadoop/hive/ql/index/compact/CompactIndexHandler.java ql/src/java/org/apache/hadoop/hive/ql/index/compact/CompactIndexHandler.java index 7c91946..0b10efc 100644 --- ql/src/java/org/apache/hadoop/hive/ql/index/compact/CompactIndexHandler.java +++ ql/src/java/org/apache/hadoop/hive/ql/index/compact/CompactIndexHandler.java @@ -50,6 +50,8 @@ import org.apache.hadoop.hive.ql.parse.ParseContext; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; import org.apache.hadoop.hive.ql.plan.MapredWork; import org.apache.hadoop.hive.ql.plan.PartitionDesc; +import org.apache.hadoop.hive.ql.plan.HiveOperation; +import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqual; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrGreaterThan; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPEqualOrLessThan; @@ -131,8 +133,11 @@ public class CompactIndexHandler extends TableBasedIndexHandler { HiveConf builderConf = new HiveConf(getConf(), CompactIndexHandler.class); // Don't try to index optimize the query to build the index HiveConf.setBoolVar(builderConf, HiveConf.ConfVars.HIVEOPTINDEXFILTER, false); + SessionState oldss = SessionState.get(); + HiveOperation parentOp = oldss.getHiveOperation(); Driver driver = new Driver(builderConf); driver.compile(command.toString()); + oldss.setCommandType(parentOp); Task rootTask = driver.getPlan().getRootTasks().get(0); inputs.addAll(driver.getPlan().getInputs()); diff --git ql/src/test/queries/clientpositive/index_auth.q ql/src/test/queries/clientpositive/index_auth.q new file mode 100644 index 0000000..877af02 --- /dev/null +++ ql/src/test/queries/clientpositive/index_auth.q @@ -0,0 +1,14 @@ +SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; +create table foobar(key int, value string) PARTITIONED BY (ds string, hr string); +alter table foobar add partition (ds='2008-04-08',hr='12'); + +CREATE INDEX srcpart_auth_index ON TABLE foobar(key) as 'BITMAP' WITH DEFERRED REBUILD; +grant select on table default__foobar_srcpart_auth_index__ to user hive_test_user; +grant update on table default__foobar_srcpart_auth_index__ to user hive_test_user; +grant create on table default__foobar_srcpart_auth_index__ to user hive_test_user; +set hive.security.authorization.enabled=true; + +ALTER INDEX srcpart_auth_index ON foobar PARTITION (ds='2008-04-08',hr='12') REBUILD; +set hive.security.authorization.enabled=false; +DROP INDEX srcpart_auth_index on foobar; +DROP TABLE foobar; diff --git ql/src/test/results/clientpositive/index_auth.q.out ql/src/test/results/clientpositive/index_auth.q.out new file mode 100644 index 0000000..3f5d70b --- /dev/null +++ ql/src/test/results/clientpositive/index_auth.q.out @@ -0,0 +1,67 @@ +PREHOOK: query: create table foobar(key int, value string) PARTITIONED BY (ds string, hr string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table foobar(key int, value string) PARTITIONED BY (ds string, hr string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@foobar +PREHOOK: query: alter table foobar add partition (ds='2008-04-08',hr='12') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Input: default@foobar +POSTHOOK: query: alter table foobar add partition (ds='2008-04-08',hr='12') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Input: default@foobar +POSTHOOK: Output: default@foobar@ds=2008-04-08/hr=12 +PREHOOK: query: CREATE INDEX srcpart_auth_index ON TABLE foobar(key) as 'BITMAP' WITH DEFERRED REBUILD +PREHOOK: type: CREATEINDEX +POSTHOOK: query: CREATE INDEX srcpart_auth_index ON TABLE foobar(key) as 'BITMAP' WITH DEFERRED REBUILD +POSTHOOK: type: CREATEINDEX +PREHOOK: query: grant select on table default__foobar_srcpart_auth_index__ to user hive_test_user +PREHOOK: type: GRANT_PRIVILEGE +PREHOOK: Output: default@default__foobar_srcpart_auth_index__ +POSTHOOK: query: grant select on table default__foobar_srcpart_auth_index__ to user hive_test_user +POSTHOOK: type: GRANT_PRIVILEGE +POSTHOOK: Output: default@default__foobar_srcpart_auth_index__ +PREHOOK: query: grant update on table default__foobar_srcpart_auth_index__ to user hive_test_user +PREHOOK: type: GRANT_PRIVILEGE +PREHOOK: Output: default@default__foobar_srcpart_auth_index__ +POSTHOOK: query: grant update on table default__foobar_srcpart_auth_index__ to user hive_test_user +POSTHOOK: type: GRANT_PRIVILEGE +POSTHOOK: Output: default@default__foobar_srcpart_auth_index__ +PREHOOK: query: grant create on table default__foobar_srcpart_auth_index__ to user hive_test_user +PREHOOK: type: GRANT_PRIVILEGE +PREHOOK: Output: default@default__foobar_srcpart_auth_index__ +POSTHOOK: query: grant create on table default__foobar_srcpart_auth_index__ to user hive_test_user +POSTHOOK: type: GRANT_PRIVILEGE +POSTHOOK: Output: default@default__foobar_srcpart_auth_index__ +Authorization failed:No privilege 'Select' found for inputs { database:default, table:foobar, columnName:key}. Use show grant to get more details. +PREHOOK: query: ALTER INDEX srcpart_auth_index ON foobar PARTITION (ds='2008-04-08',hr='12') REBUILD +PREHOOK: type: ALTERINDEX_REBUILD +PREHOOK: Input: default@foobar@ds=2008-04-08/hr=12 +PREHOOK: Output: default@default__foobar_srcpart_auth_index__@ds=2008-04-08/hr=12 +POSTHOOK: query: ALTER INDEX srcpart_auth_index ON foobar PARTITION (ds='2008-04-08',hr='12') REBUILD +POSTHOOK: type: ALTERINDEX_REBUILD +POSTHOOK: Input: default@foobar@ds=2008-04-08/hr=12 +POSTHOOK: Output: default@default__foobar_srcpart_auth_index__@ds=2008-04-08/hr=12 +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bitmaps EXPRESSION [(foobar)foobar.FieldSchema(name:ROW__OFFSET__INSIDE__BLOCK, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bucketname SIMPLE [(foobar)foobar.FieldSchema(name:INPUT__FILE__NAME, type:string, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._offset SIMPLE [(foobar)foobar.FieldSchema(name:BLOCK__OFFSET__INSIDE__FILE, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12).key SIMPLE [(foobar)foobar.FieldSchema(name:key, type:int, comment:null), ] +PREHOOK: query: DROP INDEX srcpart_auth_index on foobar +PREHOOK: type: DROPINDEX +POSTHOOK: query: DROP INDEX srcpart_auth_index on foobar +POSTHOOK: type: DROPINDEX +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bitmaps EXPRESSION [(foobar)foobar.FieldSchema(name:ROW__OFFSET__INSIDE__BLOCK, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bucketname SIMPLE [(foobar)foobar.FieldSchema(name:INPUT__FILE__NAME, type:string, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._offset SIMPLE [(foobar)foobar.FieldSchema(name:BLOCK__OFFSET__INSIDE__FILE, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12).key SIMPLE [(foobar)foobar.FieldSchema(name:key, type:int, comment:null), ] +PREHOOK: query: DROP TABLE foobar +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@foobar +PREHOOK: Output: default@foobar +POSTHOOK: query: DROP TABLE foobar +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@foobar +POSTHOOK: Output: default@foobar +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bitmaps EXPRESSION [(foobar)foobar.FieldSchema(name:ROW__OFFSET__INSIDE__BLOCK, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._bucketname SIMPLE [(foobar)foobar.FieldSchema(name:INPUT__FILE__NAME, type:string, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12)._offset SIMPLE [(foobar)foobar.FieldSchema(name:BLOCK__OFFSET__INSIDE__FILE, type:bigint, comment:), ] +POSTHOOK: Lineage: default__foobar_srcpart_auth_index__ PARTITION(ds=2008-04-08,hr=12).key SIMPLE [(foobar)foobar.FieldSchema(name:key, type:int, comment:null), ] -- 1.7.4.4