diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 08176a6..3bb9e45 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -330,7 +330,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(30005, "Partition protected from being dropped"), ; private int errorCode; diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 276bfdd..b5ed476 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -2688,6 +2688,10 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { } } 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)); } } diff --git a/ql/src/test/queries/clientnegative/sa_fail_hook3.q b/ql/src/test/queries/clientnegative/sa_fail_hook3.q new file mode 100644 index 0000000..44fd7e2 --- /dev/null +++ b/ql/src/test/queries/clientnegative/sa_fail_hook3.q @@ -0,0 +1,5 @@ +set hive.semantic.analyzer.hook=org.apache.hadoop.hive.ql.hooks.SemanticAnalyzerHookTestFail; +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'); diff --git a/ql/src/test/results/clientnegative/sa_fail_hook3.q.out b/ql/src/test/results/clientnegative/sa_fail_hook3.q.out new file mode 100644 index 0000000..beb3c27 --- /dev/null +++ b/ql/src/test/results/clientnegative/sa_fail_hook3.q.out @@ -0,0 +1,24 @@ +PREHOOK: query: create table mp (a string) partitioned by (b string, c string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: default@mp +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 +From hook, error was Partition protected from being dropped +FAILED: SemanticException [Error 30005]: Partition protected from being dropped default@mp@b=1/c=1