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


Reply via email to