You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by sz...@apache.org on 2015/03/19 23:38:30 UTC

svn commit: r1667894 - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/exec/DDLTask.java test/queries/clientnegative/alter_rename_partition_failure.q test/results/clientnegative/alter_rename_partition_failure.q.out

Author: szehon
Date: Thu Mar 19 22:38:29 2015
New Revision: 1667894

URL: http://svn.apache.org/r1667894
Log:
HIVE-9975 : Renaming a nonexisting partition should not throw out NullPointerException (Chaoyu Tang via Szehon)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
    hive/trunk/ql/src/test/queries/clientnegative/alter_rename_partition_failure.q
    hive/trunk/ql/src/test/results/clientnegative/alter_rename_partition_failure.q.out

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java?rev=1667894&r1=1667893&r2=1667894&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java Thu Mar 19 22:38:29 2015
@@ -56,6 +56,7 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FsShell;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -937,10 +938,17 @@ public class DDLTask extends Task<DDLWor
 
     Table tbl = db.getTable(renamePartitionDesc.getTableName());
 
-    Partition oldPart = db.getPartition(tbl, renamePartitionDesc.getOldPartSpec(), false);
-    Partition part = db.getPartition(tbl, renamePartitionDesc.getOldPartSpec(), false);
+    LinkedHashMap<String, String> oldPartSpec = renamePartitionDesc.getOldPartSpec();
+    Partition oldPart = db.getPartition(tbl, oldPartSpec, false);
+    if (oldPart == null) {
+      String partName = FileUtils.makePartName(new ArrayList<String>(oldPartSpec.keySet()),
+          new ArrayList<String>(oldPartSpec.values()));
+      throw new HiveException("Rename partition: source partition [" + partName
+          + "] does not exist.");
+    }
+    Partition part = db.getPartition(tbl, oldPartSpec, false);
     part.setValues(renamePartitionDesc.getNewPartSpec());
-    db.renamePartition(tbl, renamePartitionDesc.getOldPartSpec(), part);
+    db.renamePartition(tbl, oldPartSpec, part);
     Partition newPart = db
         .getPartition(tbl, renamePartitionDesc.getNewPartSpec(), false);
     work.getInputs().add(new ReadEntity(oldPart));

Modified: hive/trunk/ql/src/test/queries/clientnegative/alter_rename_partition_failure.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/alter_rename_partition_failure.q?rev=1667894&r1=1667893&r2=1667894&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/alter_rename_partition_failure.q (original)
+++ hive/trunk/ql/src/test/queries/clientnegative/alter_rename_partition_failure.q Thu Mar 19 22:38:29 2015
@@ -1,6 +1,6 @@
 create table alter_rename_partition_src ( col1 string ) stored as textfile ;
 load data local inpath '../../data/files/test.dat' overwrite into table alter_rename_partition_src ;
 create table alter_rename_partition ( col1 string ) partitioned by (pcol1 string , pcol2 string) stored as sequencefile;
-insert overwrite table alter_rename_partition partition (pCol1='old_part1:', pcol2='old_part2:') select col1 from alter_rename_partition_src ;
+insert overwrite table alter_rename_partition partition (pCol1='old_part1', pcol2='old_part2') select col1 from alter_rename_partition_src ;
 
-alter table alter_rename_partition partition (pCol1='nonexist_part1:', pcol2='nonexist_part2:') rename to partition (pCol1='new_part1:', pcol2='new_part2:');
+alter table alter_rename_partition partition (pCol1='nonexist_part1', pcol2='nonexist_part2') rename to partition (pCol1='new_part1', pcol2='new_part2');

Modified: hive/trunk/ql/src/test/results/clientnegative/alter_rename_partition_failure.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/alter_rename_partition_failure.q.out?rev=1667894&r1=1667893&r2=1667894&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/alter_rename_partition_failure.q.out (original)
+++ hive/trunk/ql/src/test/results/clientnegative/alter_rename_partition_failure.q.out Thu Mar 19 22:38:29 2015
@@ -22,16 +22,16 @@ POSTHOOK: query: create table alter_rena
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@alter_rename_partition
-PREHOOK: query: insert overwrite table alter_rename_partition partition (pCol1='old_part1:', pcol2='old_part2:') select col1 from alter_rename_partition_src
+PREHOOK: query: insert overwrite table alter_rename_partition partition (pCol1='old_part1', pcol2='old_part2') select col1 from alter_rename_partition_src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@alter_rename_partition_src
-PREHOOK: Output: default@alter_rename_partition@pcol1=old_part1%3A/pcol2=old_part2%3A
-POSTHOOK: query: insert overwrite table alter_rename_partition partition (pCol1='old_part1:', pcol2='old_part2:') select col1 from alter_rename_partition_src
+PREHOOK: Output: default@alter_rename_partition@pcol1=old_part1/pcol2=old_part2
+POSTHOOK: query: insert overwrite table alter_rename_partition partition (pCol1='old_part1', pcol2='old_part2') select col1 from alter_rename_partition_src
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@alter_rename_partition_src
-POSTHOOK: Output: default@alter_rename_partition@pcol1=old_part1%3A/pcol2=old_part2%3A
-POSTHOOK: Lineage: alter_rename_partition PARTITION(pcol1=old_part1:,pcol2=old_part2:).col1 SIMPLE [(alter_rename_partition_src)alter_rename_partition_src.FieldSchema(name:col1, type:string, comment:null), ]
-PREHOOK: query: alter table alter_rename_partition partition (pCol1='nonexist_part1:', pcol2='nonexist_part2:') rename to partition (pCol1='new_part1:', pcol2='new_part2:')
+POSTHOOK: Output: default@alter_rename_partition@pcol1=old_part1/pcol2=old_part2
+POSTHOOK: Lineage: alter_rename_partition PARTITION(pcol1=old_part1,pcol2=old_part2).col1 SIMPLE [(alter_rename_partition_src)alter_rename_partition_src.FieldSchema(name:col1, type:string, comment:null), ]
+PREHOOK: query: alter table alter_rename_partition partition (pCol1='nonexist_part1', pcol2='nonexist_part2') rename to partition (pCol1='new_part1', pcol2='new_part2')
 PREHOOK: type: ALTERTABLE_RENAMEPART
 PREHOOK: Input: default@alter_rename_partition
-FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. null
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Rename partition: source partition [pcol1=nonexist_part1/pcol2=nonexist_part2] does not exist.