minor improvements

This commit is contained in:
Alexander Tokmakov 2021-11-11 19:29:56 +03:00
parent 209d1a21e1
commit 73ab518e97
2 changed files with 44 additions and 55 deletions

View File

@ -78,65 +78,54 @@ BlockIO InterpreterRenameQuery::executeToTables(const ASTRenameQuery & rename, c
for (const auto & elem : descriptions)
{
bool ignore = elem.if_exists;
if (ignore)
if (elem.if_exists)
{
if (rename.exchange)
{
ignore = !database_catalog.isTableExist(StorageID(elem.to_database_name, elem.to_table_name), getContext()) ||
!database_catalog.isTableExist(StorageID(elem.from_database_name, elem.from_table_name), getContext());
}
else
{
ignore = !database_catalog.isTableExist(StorageID(elem.from_database_name, elem.from_table_name), getContext());
}
assert(!rename.exchange);
if (!database_catalog.isTableExist(StorageID(elem.from_database_name, elem.from_table_name), getContext()))
continue;
}
if (!ignore)
bool exchange_tables;
if (rename.exchange)
{
bool exchange_tables;
if (rename.exchange)
{
exchange_tables = true;
}
else if (rename.rename_if_cannot_exchange)
{
exchange_tables = database_catalog.isTableExist(StorageID(elem.to_database_name, elem.to_table_name), getContext());
renamed_instead_of_exchange = !exchange_tables;
}
else
{
exchange_tables = false;
database_catalog.assertTableDoesntExist(StorageID(elem.to_database_name, elem.to_table_name), getContext());
}
exchange_tables = true;
}
else if (rename.rename_if_cannot_exchange)
{
exchange_tables = database_catalog.isTableExist(StorageID(elem.to_database_name, elem.to_table_name), getContext());
renamed_instead_of_exchange = !exchange_tables;
}
else
{
exchange_tables = false;
database_catalog.assertTableDoesntExist(StorageID(elem.to_database_name, elem.to_table_name), getContext());
}
DatabasePtr database = database_catalog.getDatabase(elem.from_database_name);
if (typeid_cast<DatabaseReplicated *>(database.get()) && !getContext()->getClientInfo().is_replicated_database_internal)
{
if (1 < descriptions.size())
throw Exception(
ErrorCodes::NOT_IMPLEMENTED,
"Database {} is Replicated, "
"it does not support renaming of multiple tables in single query.",
elem.from_database_name);
DatabasePtr database = database_catalog.getDatabase(elem.from_database_name);
if (typeid_cast<DatabaseReplicated *>(database.get()) && !getContext()->getClientInfo().is_replicated_database_internal)
{
if (1 < descriptions.size())
throw Exception(
ErrorCodes::NOT_IMPLEMENTED,
"Database {} is Replicated, "
"it does not support renaming of multiple tables in single query.",
elem.from_database_name);
UniqueTableName from(elem.from_database_name, elem.from_table_name);
UniqueTableName to(elem.to_database_name, elem.to_table_name);
ddl_guards[from]->releaseTableLock();
ddl_guards[to]->releaseTableLock();
return typeid_cast<DatabaseReplicated *>(database.get())->tryEnqueueReplicatedDDL(query_ptr, getContext());
}
else
{
database->renameTable(
getContext(),
elem.from_table_name,
*database_catalog.getDatabase(elem.to_database_name),
elem.to_table_name,
exchange_tables,
rename.dictionary);
}
UniqueTableName from(elem.from_database_name, elem.from_table_name);
UniqueTableName to(elem.to_database_name, elem.to_table_name);
ddl_guards[from]->releaseTableLock();
ddl_guards[to]->releaseTableLock();
return typeid_cast<DatabaseReplicated *>(database.get())->tryEnqueueReplicatedDDL(query_ptr, getContext());
}
else
{
database->renameTable(
getContext(),
elem.from_table_name,
*database_catalog.getDatabase(elem.to_database_name),
elem.to_table_name,
exchange_tables,
rename.dictionary);
}
}

View File

@ -75,7 +75,7 @@ protected:
settings.ostr << (settings.hilite ? hilite_keyword : "") << "RENAME DATABASE " << (settings.hilite ? hilite_none : "");
if (elements.at(0).if_exists)
settings.ostr << "IF EXISTS ";
settings.ostr << (settings.hilite ? hilite_keyword : "") << "IF EXISTS " << (settings.hilite ? hilite_none : "");
settings.ostr << backQuoteIfNeed(elements.at(0).from.database);
settings.ostr << (settings.hilite ? hilite_keyword : "") << " TO " << (settings.hilite ? hilite_none : "");
@ -102,7 +102,7 @@ protected:
settings.ostr << ", ";
if (it->if_exists)
settings.ostr << "IF EXISTS ";
settings.ostr << (settings.hilite ? hilite_keyword : "") << "IF EXISTS " << (settings.hilite ? hilite_none : "");
settings.ostr << (!it->from.database.empty() ? backQuoteIfNeed(it->from.database) + "." : "") << backQuoteIfNeed(it->from.table)
<< (settings.hilite ? hilite_keyword : "") << (exchange ? " AND " : " TO ") << (settings.hilite ? hilite_none : "")
<< (!it->to.database.empty() ? backQuoteIfNeed(it->to.database) + "." : "") << backQuoteIfNeed(it->to.table);