diff --git metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java index c36b32e..b93f196 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java @@ -225,7 +225,9 @@ public void alterTable(RawStore msdb, Warehouse wh, String dbname, try { if (srcFs.exists(srcPath)) { // rename the src to destination - srcFs.rename(srcPath, destPath); + if (!srcFs.rename(srcPath, destPath)) { + throw new IOException("Rename src path failed"); + } } } catch (IOException e) { boolean revertMetaDataTransaction = false; diff --git metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java index dbb7d37..a9f4be2 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -2564,13 +2564,13 @@ public void alterTable(String dbname, String name, Table newTable) } // For now only alter name, owner, paramters, cols, bucketcols are allowed + oldt.setDatabase(newt.getDatabase()); oldt.setTableName(newt.getTableName().toLowerCase()); oldt.setParameters(newt.getParameters()); oldt.setOwner(newt.getOwner()); // Fully copy over the contents of the new SD into the old SD, // so we don't create an extra SD in the metastore db that has no references. copyMSD(newt.getSd(), oldt.getSd()); - oldt.setDatabase(newt.getDatabase()); oldt.setRetention(newt.getRetention()); oldt.setPartitionKeys(newt.getPartitionKeys()); oldt.setTableType(newt.getTableType()); diff --git ql/src/test/queries/clientpositive/alter_rename_table.q ql/src/test/queries/clientpositive/alter_rename_table.q index 4125c5f..0eebd0f 100644 --- ql/src/test/queries/clientpositive/alter_rename_table.q +++ ql/src/test/queries/clientpositive/alter_rename_table.q @@ -26,3 +26,10 @@ ALTER TABLE source.srcpart RENAME TO target.srcpart; ALTER TABLE source.srcpart RENAME TO target.srcpart; select * from target.srcpart tablesample (10 rows); + +create table source.src like default.src; +create table source.src1 like default.src; +load data local inpath '../../data/files/kv1.txt' overwrite into table source.src; + +ALTER TABLE source.src RENAME TO target.src1; +select * from target.src1 tablesample (10 rows); \ No newline at end of file diff --git ql/src/test/results/clientpositive/alter_rename_table.q.out ql/src/test/results/clientpositive/alter_rename_table.q.out index 723d687..b0dd1ed 100644 --- ql/src/test/results/clientpositive/alter_rename_table.q.out +++ ql/src/test/results/clientpositive/alter_rename_table.q.out @@ -204,3 +204,52 @@ POSTHOOK: Input: target@srcpart@ds=2008-04-09/hr=12 278 val_278 2008-04-08 11 98 val_98 2008-04-08 11 484 val_484 2008-04-08 11 +PREHOOK: query: create table source.src like default.src +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:source +POSTHOOK: query: create table source.src like default.src +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:source +POSTHOOK: Output: source@src +PREHOOK: query: create table source.src1 like default.src +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:source +POSTHOOK: query: create table source.src1 like default.src +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:source +POSTHOOK: Output: source@src1 +PREHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite into table source.src +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: source@src +POSTHOOK: query: load data local inpath '../../data/files/kv1.txt' overwrite into table source.src +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: source@src +PREHOOK: query: ALTER TABLE source.src RENAME TO target.src1 +PREHOOK: type: ALTERTABLE_RENAME +PREHOOK: Input: source@src +PREHOOK: Output: source@src +POSTHOOK: query: ALTER TABLE source.src RENAME TO target.src1 +POSTHOOK: type: ALTERTABLE_RENAME +POSTHOOK: Input: source@src +POSTHOOK: Output: source@src +POSTHOOK: Output: target@src1 +PREHOOK: query: select * from target.src1 tablesample (10 rows) +PREHOOK: type: QUERY +PREHOOK: Input: target@src1 +#### A masked pattern was here #### +POSTHOOK: query: select * from target.src1 tablesample (10 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: target@src1 +#### A masked pattern was here #### +238 val_238 +86 val_86 +311 val_311 +27 val_27 +165 val_165 +409 val_409 +255 val_255 +278 val_278 +98 val_98 +484 val_484