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.