diff --git a/dbms/src/Databases/DatabaseOnDisk.cpp b/dbms/src/Databases/DatabaseOnDisk.cpp index d1ebf869c3a4854b10e16764949360cbe265d22f..72449e76fbc50d74c4508c52dfbdff28e7e3a096 100644 --- a/dbms/src/Databases/DatabaseOnDisk.cpp +++ b/dbms/src/Databases/DatabaseOnDisk.cpp @@ -245,21 +245,20 @@ void DatabaseOnDisk::renameTable( ASTPtr DatabaseOnDisk::getCreateTableQueryImpl(const Context & context, const String & table_name, bool throw_on_error) const { ASTPtr ast; - + bool has_table = tryGetTable(context, table_name) != nullptr; auto table_metadata_path = getObjectMetadataPath(table_name); - ast = getCreateQueryFromMetadata(context, table_metadata_path, throw_on_error); - if (!ast && throw_on_error) + try { - /// Handle system.* tables for which there are no table.sql files. - bool has_table = tryGetTable(context, table_name) != nullptr; - - auto msg = has_table - ? "There is no CREATE TABLE query for table " - : "There is no metadata file for table "; - - throw Exception(msg + backQuote(table_name), ErrorCodes::CANNOT_GET_CREATE_TABLE_QUERY); + ast = getCreateQueryFromMetadata(context, table_metadata_path, throw_on_error); + } + catch (const Exception & e) + { + if (!has_table && e.code() == ErrorCodes::FILE_DOESNT_EXIST && throw_on_error) + throw Exception{"Table " + backQuote(table_name) + " doesn't exist", + ErrorCodes::CANNOT_GET_CREATE_TABLE_QUERY}; + else if (throw_on_error) + throw; } - return ast; } diff --git a/dbms/src/Databases/IDatabase.h b/dbms/src/Databases/IDatabase.h index 1841d6e1e7f9b62b8ec49b6a346d8316617d92dd..ed449ba959173aa71c304d102efc1cd551615add 100644 --- a/dbms/src/Databases/IDatabase.h +++ b/dbms/src/Databases/IDatabase.h @@ -28,7 +28,6 @@ namespace ErrorCodes { extern const int NOT_IMPLEMENTED; extern const int CANNOT_GET_CREATE_TABLE_QUERY; - extern const int CANNOT_GET_CREATE_TABLE_QUERY; extern const int CANNOT_GET_CREATE_DICTIONARY_QUERY; }