From c477f5f1526bb23963a99c65f7ac5f84abe3a637 Mon Sep 17 00:00:00 2001 From: Andrey Mironov Date: Mon, 13 Apr 2015 16:54:49 +0300 Subject: [PATCH] Merge --- dbms/src/Interpreters/InterpreterRenameQuery.cpp | 10 +++++++++- dbms/src/Storages/MergeTree/MergeTreeData.cpp | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dbms/src/Interpreters/InterpreterRenameQuery.cpp b/dbms/src/Interpreters/InterpreterRenameQuery.cpp index b709c54c7d4..31cc72f995f 100644 --- a/dbms/src/Interpreters/InterpreterRenameQuery.cpp +++ b/dbms/src/Interpreters/InterpreterRenameQuery.cpp @@ -115,7 +115,15 @@ void InterpreterRenameQuery::execute() /// Уведомляем таблицу о том, что она переименовывается. Если таблица не поддерживает переименование - кинется исключение. StoragePtr table = context.getTable(elem.from_database_name, elem.from_table_name); - table->rename(path + "data/" + elem.to_database_name_escaped + "/", elem.to_database_name, elem.to_table_name); + try + { + table->rename(path + "data/" + elem.to_database_name_escaped + "/", elem.to_database_name, + elem.to_table_name); + } + catch (const Poco::Exception & e) + { + throw Exception{e}; + } /// Пишем новый файл с метаданными. { diff --git a/dbms/src/Storages/MergeTree/MergeTreeData.cpp b/dbms/src/Storages/MergeTree/MergeTreeData.cpp index 54b4e4ac972..d5658fa6add 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeData.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeData.cpp @@ -362,6 +362,12 @@ void MergeTreeData::setPath(const String & new_full_path, bool move_data) { if (move_data) { + if (Poco::File{new_full_path}.exists()) + throw Exception{ + "Target path already exists: " + new_full_path, + /// @todo existing target can also be a file, not directory + ErrorCodes::DIRECTORY_ALREADY_EXISTS + }; Poco::File(full_path).renameTo(new_full_path); /// Если данные перемещать не нужно, значит их переместил кто-то другой. Расчитываем, что он еще и сбросил кеши. context.resetCaches();