Author: namit Date: Fri Jan 4 02:52:54 2013 New Revision: 1428704 URL: http://svn.apache.org/viewvc?rev=1428704&view=rev Log: HIVE-3718 Add check to determine whether partition can be dropped at Semantic Analysis time (Pamela Vagata via namit)
Added: hive/trunk/ql/src/test/queries/clientnegative/sa_fail_hook3.q hive/trunk/ql/src/test/results/clientnegative/sa_fail_hook3.q.out Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java hive/trunk/ql/src/test/results/clientnegative/alter_partition_nodrop.q.out hive/trunk/ql/src/test/results/clientnegative/protectmode_part_no_drop.q.out hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl7.q.out hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl8.q.out Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java (original) +++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java Fri Jan 4 02:52:54 2013 @@ -351,7 +351,8 @@ public enum ErrorMsg { COLUMNSTATSCOLLECTOR_INVALID_SYNTAX(30008, "Dynamic partitioning is not supported yet while " + "gathering column statistics through ANALYZE statement"), COLUMNSTATSCOLLECTOR_PARSE_ERROR(30009, "Encountered parse error while parsing rewritten query"), - COLUMNSTATSCOLLECTOR_IO_ERROR(30010, "Encountered I/O exception while parsing rewritten query") + COLUMNSTATSCOLLECTOR_IO_ERROR(30010, "Encountered I/O exception while parsing rewritten query"), + DROP_COMMAND_NOT_ALLOWED_FOR_PARTITION(30011, "Partition protected from being dropped"), ; private int errorCode; Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original) +++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Fri Jan 4 02:52:54 2013 @@ -2259,15 +2259,16 @@ public class DDLSemanticAnalyzer extends } } + boolean ignoreProtection = (ast.getFirstChildWithType(HiveParser.TOK_IGNOREPROTECTION) != null); if (partSpecs != null) { boolean ifExists = (ast.getFirstChildWithType(HiveParser.TOK_IFEXISTS) != null); // we want to signal an error if the partition doesn't exist and we're // configured not to fail silently boolean throwException = !ifExists && !HiveConf.getBoolVar(conf, ConfVars.DROPIGNORESNONEXISTENT); - addTableDropPartsOutputs(tblName, partSpecs, throwException, stringPartitionColumns); + addTableDropPartsOutputs(tblName, partSpecs, throwException, + stringPartitionColumns, ignoreProtection); } - boolean ignoreProtection = (ast.getFirstChildWithType(HiveParser.TOK_IGNOREPROTECTION) != null); DropTableDesc dropTblDesc = new DropTableDesc(tblName, partSpecs, expectView, stringPartitionColumns, ignoreProtection); @@ -2653,7 +2654,7 @@ public class DDLSemanticAnalyzer extends * throwIfNonExistent is true, otherwise ignore it. */ private void addTableDropPartsOutputs(String tblName, List<PartitionSpec> partSpecs, - boolean throwIfNonExistent, boolean stringPartitionColumns) + boolean throwIfNonExistent, boolean stringPartitionColumns, boolean ignoreProtection) throws SemanticException { Table tab = getTable(tblName); @@ -2683,6 +2684,10 @@ public class DDLSemanticAnalyzer extends } } for (Partition p : parts) { + if (!ignoreProtection && !p.canDrop()) { + throw new SemanticException( + ErrorMsg.DROP_COMMAND_NOT_ALLOWED_FOR_PARTITION.getMsg(p.getCompleteName())); + } outputs.add(new WriteEntity(p)); } } Added: hive/trunk/ql/src/test/queries/clientnegative/sa_fail_hook3.q URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/sa_fail_hook3.q?rev=1428704&view=auto ============================================================================== --- hive/trunk/ql/src/test/queries/clientnegative/sa_fail_hook3.q (added) +++ hive/trunk/ql/src/test/queries/clientnegative/sa_fail_hook3.q Fri Jan 4 02:52:54 2013 @@ -0,0 +1,4 @@ +create table mp2 (a string) partitioned by (b string); +alter table mp2 add partition (b='1'); +alter table mp2 partition (b='1') enable NO_DROP; +alter table mp2 drop partition (b='1'); Modified: hive/trunk/ql/src/test/results/clientnegative/alter_partition_nodrop.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/alter_partition_nodrop.q.out?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/test/results/clientnegative/alter_partition_nodrop.q.out (original) +++ hive/trunk/ql/src/test/results/clientnegative/alter_partition_nodrop.q.out Fri Jan 4 02:52:54 2013 @@ -33,10 +33,4 @@ POSTHOOK: Input: default@alter_part_nodr POSTHOOK: Input: default@alter_part_nodrop_part@year=1996/month=12 POSTHOOK: Output: default@alter_part_nodrop_part@year=1996/month=10 POSTHOOK: Output: default@alter_part_nodrop_part@year=1996/month=12 -PREHOOK: query: alter table alter_part_nodrop_part drop partition (year='1996') -PREHOOK: type: ALTERTABLE_DROPPARTS -PREHOOK: Input: default@alter_part_nodrop_part -PREHOOK: Output: default@alter_part_nodrop_part@year=1996/month=10 -PREHOOK: Output: default@alter_part_nodrop_part@year=1996/month=12 -FAILED: Error in metadata: Table alter_part_nodrop_part Partition year=1996/month=10 is protected from being dropped -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@alter_part_nodrop_part@year=1996/month=10 Modified: hive/trunk/ql/src/test/results/clientnegative/protectmode_part_no_drop.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/protectmode_part_no_drop.q.out?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/test/results/clientnegative/protectmode_part_no_drop.q.out (original) +++ hive/trunk/ql/src/test/results/clientnegative/protectmode_part_no_drop.q.out Fri Jan 4 02:52:54 2013 @@ -43,9 +43,4 @@ p string p string None #### A masked pattern was here #### -PREHOOK: query: alter table tbl_protectmode_no_drop drop partition (p='p1') -PREHOOK: type: ALTERTABLE_DROPPARTS -PREHOOK: Input: default@tbl_protectmode_no_drop -PREHOOK: Output: default@tbl_protectmode_no_drop@p=p1 -FAILED: Error in metadata: Table tbl_protectmode_no_drop Partition p=p1 is protected from being dropped -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@tbl_protectmode_no_drop@p=p1 Modified: hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl7.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl7.q.out?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl7.q.out (original) +++ hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl7.q.out Fri Jan 4 02:52:54 2013 @@ -49,9 +49,4 @@ POSTHOOK: query: alter table tbl_protect POSTHOOK: type: ALTERTABLE_PROTECTMODE POSTHOOK: Input: default@tbl_protectmode_tbl7 POSTHOOK: Output: default@tbl_protectmode_tbl7 -PREHOOK: query: alter table tbl_protectmode_tbl7 drop partition (p='p1') -PREHOOK: type: ALTERTABLE_DROPPARTS -PREHOOK: Input: default@tbl_protectmode_tbl7 -PREHOOK: Output: default@tbl_protectmode_tbl7@p=p1 -FAILED: Error in metadata: Table tbl_protectmode_tbl7 Partition p=p1 is protected from being dropped -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@tbl_protectmode_tbl7@p=p1 Modified: hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl8.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl8.q.out?rev=1428704&r1=1428703&r2=1428704&view=diff ============================================================================== --- hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl8.q.out (original) +++ hive/trunk/ql/src/test/results/clientnegative/protectmode_tbl8.q.out Fri Jan 4 02:52:54 2013 @@ -49,9 +49,4 @@ POSTHOOK: query: alter table tbl_protect POSTHOOK: type: ALTERTABLE_ADDPARTS POSTHOOK: Input: default@tbl_protectmode_tbl8 POSTHOOK: Output: default@tbl_protectmode_tbl8@p=p1 -PREHOOK: query: alter table tbl_protectmode_tbl8 drop partition (p='p1') -PREHOOK: type: ALTERTABLE_DROPPARTS -PREHOOK: Input: default@tbl_protectmode_tbl8 -PREHOOK: Output: default@tbl_protectmode_tbl8@p=p1 -FAILED: Error in metadata: Table tbl_protectmode_tbl8 Partition p=p1 is protected from being dropped -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@tbl_protectmode_tbl8@p=p1 Added: hive/trunk/ql/src/test/results/clientnegative/sa_fail_hook3.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/sa_fail_hook3.q.out?rev=1428704&view=auto ============================================================================== --- hive/trunk/ql/src/test/results/clientnegative/sa_fail_hook3.q.out (added) +++ hive/trunk/ql/src/test/results/clientnegative/sa_fail_hook3.q.out Fri Jan 4 02:52:54 2013 @@ -0,0 +1,22 @@ +PREHOOK: query: create table mp2 (a string) partitioned by (b string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table mp2 (a string) partitioned by (b string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@mp2 +PREHOOK: query: alter table mp2 add partition (b='1') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Input: default@mp2 +POSTHOOK: query: alter table mp2 add partition (b='1') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Input: default@mp2 +POSTHOOK: Output: default@mp2@b=1 +PREHOOK: query: alter table mp2 partition (b='1') enable NO_DROP +PREHOOK: type: ALTERPARTITION_PROTECTMODE +PREHOOK: Input: default@mp2 +PREHOOK: Output: default@mp2@b=1 +POSTHOOK: query: alter table mp2 partition (b='1') enable NO_DROP +POSTHOOK: type: ALTERPARTITION_PROTECTMODE +POSTHOOK: Input: default@mp2 +POSTHOOK: Input: default@mp2@b=1 +POSTHOOK: Output: default@mp2@b=1 +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@mp2@b=1