mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-27 01:51:59 +00:00
Merge
This commit is contained in:
parent
e26223d5c8
commit
1005bbaa55
@ -271,6 +271,9 @@ public:
|
||||
/// Получить запрос на CREATE таблицы.
|
||||
ASTPtr getCreateQuery(const String & database_name, const String & table_name) const;
|
||||
|
||||
/// Получить запрос на CREATE таблицы. Только если он есть на диске. Нужно вызывать при заблокированной структуре таблицы.
|
||||
ASTPtr readCreateQueryFromDisk(const String & database_name, const String & table_name) const;
|
||||
|
||||
/// Для методов ниже может быть необходимо захватывать mutex самостоятельно.
|
||||
Poco::Mutex & getMutex() const { return shared->mutex; }
|
||||
|
||||
|
@ -305,35 +305,13 @@ void Context::detachDatabase(const String & database_name)
|
||||
}
|
||||
|
||||
|
||||
ASTPtr Context::getCreateQuery(const String & database_name, const String & table_name) const
|
||||
ASTPtr Context::readCreateQueryFromDisk(const String & database_name, const String & table_name) const
|
||||
{
|
||||
StoragePtr table;
|
||||
String db;
|
||||
|
||||
{
|
||||
Poco::ScopedLock<Poco::Mutex> lock(shared->mutex);
|
||||
db = database_name.empty() ? current_database : database_name;
|
||||
table = getTable(db, table_name);
|
||||
}
|
||||
|
||||
auto table_lock = table->lockStructure(false);
|
||||
|
||||
/// Здесь хранится определение таблицы
|
||||
String metadata_path = shared->path + "metadata/" + escapeForFileName(db) + "/" + escapeForFileName(table_name) + ".sql";
|
||||
String metadata_path = shared->path + "metadata/" + escapeForFileName(database_name) + "/" + escapeForFileName(table_name) + ".sql";
|
||||
|
||||
if (!Poco::File(metadata_path).exists())
|
||||
{
|
||||
try
|
||||
{
|
||||
/// Если файл .sql не предусмотрен (например, для таблиц типа ChunkRef), то движок может сам предоставить запрос CREATE.
|
||||
return table->getCustomCreateQuery(*this);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw Exception("Metadata file " + metadata_path + " for table " + db + "." + table_name + " doesn't exist.",
|
||||
ErrorCodes::TABLE_METADATA_DOESNT_EXIST);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
StringPtr query = new String();
|
||||
{
|
||||
@ -358,13 +336,44 @@ ASTPtr Context::getCreateQuery(const String & database_name, const String & tabl
|
||||
|
||||
ASTCreateQuery & ast_create_query = typeid_cast<ASTCreateQuery &>(*ast);
|
||||
ast_create_query.attach = false;
|
||||
ast_create_query.database = db;
|
||||
ast_create_query.database = database_name;
|
||||
ast_create_query.query_string = query;
|
||||
|
||||
return ast;
|
||||
}
|
||||
|
||||
|
||||
ASTPtr Context::getCreateQuery(const String & database_name, const String & table_name) const
|
||||
{
|
||||
StoragePtr table;
|
||||
String db;
|
||||
|
||||
{
|
||||
Poco::ScopedLock<Poco::Mutex> lock(shared->mutex);
|
||||
db = database_name.empty() ? current_database : database_name;
|
||||
table = getTable(db, table_name);
|
||||
}
|
||||
|
||||
auto table_lock = table->lockStructure(false);
|
||||
|
||||
ASTPtr res = readCreateQueryFromDisk(db, table_name);
|
||||
|
||||
if (res)
|
||||
return res;
|
||||
|
||||
try
|
||||
{
|
||||
/// Если файл .sql не предусмотрен (например, для таблиц типа ChunkRef), то движок может сам предоставить запрос CREATE.
|
||||
return table->getCustomCreateQuery(*this);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw Exception("Metadata file for table " + db + "." + table_name + " doesn't exist.",
|
||||
ErrorCodes::TABLE_METADATA_DOESNT_EXIST);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Settings Context::getSettings() const
|
||||
{
|
||||
Poco::ScopedLock<Poco::Mutex> lock(shared->mutex);
|
||||
|
@ -97,7 +97,7 @@ void InterpreterAlterQuery::updateMetadata(
|
||||
String metadata_path = path + "metadata/" + database_name_escaped + "/" + table_name_escaped + ".sql";
|
||||
String metadata_temp_path = metadata_path + ".tmp";
|
||||
|
||||
ASTPtr attach_ptr = context.getCreateQuery(database_name, table_name);
|
||||
ASTPtr attach_ptr = context.readCreateQueryFromDisk(database_name, table_name);
|
||||
ASTCreateQuery & attach = typeid_cast<ASTCreateQuery &>(*attach_ptr);
|
||||
attach.attach = true;
|
||||
|
||||
|
@ -463,6 +463,9 @@ MergeTreeData::AlterDataPartTransactionPtr MergeTreeData::alterDataPart(DataPart
|
||||
transaction->rename_map["checksums.txt.tmp"] = "checksums.txt";
|
||||
}
|
||||
|
||||
if (transaction->rename_map.empty())
|
||||
transaction->data_part = nullptr;
|
||||
|
||||
return transaction;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user