Index: ql/src/test/results/clientnegative/sa_fail_hook3.q.out =================================================================== --- ql/src/test/results/clientnegative/sa_fail_hook3.q.out (revision 0) +++ ql/src/test/results/clientnegative/sa_fail_hook3.q.out (working copy) @@ -0,0 +1,22 @@ +PREHOOK: query: create table mp (a string) partitioned by (b string, c string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table mp (a string) partitioned by (b string, c string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@mp +PREHOOK: query: alter table mp add partition (b='1', c='1') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Input: default@mp +POSTHOOK: query: alter table mp add partition (b='1', c='1') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Input: default@mp +POSTHOOK: Output: default@mp@b=1/c=1 +PREHOOK: query: alter table mp partition (b='1') enable NO_DROP +PREHOOK: type: ALTERPARTITION_PROTECTMODE +PREHOOK: Input: default@mp +PREHOOK: Output: default@mp@b=1/c=1 +POSTHOOK: query: alter table mp partition (b='1') enable NO_DROP +POSTHOOK: type: ALTERPARTITION_PROTECTMODE +POSTHOOK: Input: default@mp +POSTHOOK: Input: default@mp@b=1/c=1 +POSTHOOK: Output: default@mp@b=1/c=1 +FAILED: SemanticException [Error 30011]: Partition protected from being dropped default@mp@b=1/c=1 Index: ql/src/test/queries/clientnegative/sa_fail_hook3.q =================================================================== --- ql/src/test/queries/clientnegative/sa_fail_hook3.q (revision 0) +++ ql/src/test/queries/clientnegative/sa_fail_hook3.q (working copy) @@ -0,0 +1,4 @@ +create table mp (a string) partitioned by (b string, c string); +alter table mp add partition (b='1', c='1'); +alter table mp partition (b='1') enable NO_DROP; +alter table mp drop partition (b='1'); Index: ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (revision 1425481) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (working copy) @@ -2640,6 +2640,10 @@ } } for (Partition p : parts) { + if (!p.canDrop()) { + throw new SemanticException( + ErrorMsg.DROP_COMMAND_NOT_ALLOWED_FOR_PARTITION.getMsg(p.getCompleteName())); + } outputs.add(new WriteEntity(p)); } } Index: ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java (revision 1425481) +++ ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java (working copy) @@ -330,7 +330,8 @@ 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;