ClickHouse/dbms/src/Storages/IStorage.cpp

33 lines
1006 B
C++
Raw Normal View History

#include <Storages/IStorage.h>
2018-12-25 23:11:36 +00:00
#include <Storages/AlterCommands.h>
namespace DB
{
TableStructureReadLock::TableStructureReadLock(StoragePtr storage_, bool lock_structure, bool lock_data)
: storage(storage_)
{
if (lock_data)
data_lock = storage->data_lock->getLock(RWLockImpl::Read);
if (lock_structure)
structure_lock = storage->structure_lock->getLock(RWLockImpl::Read);
}
2018-12-25 23:11:36 +00:00
void IStorage::alter(const AlterCommands & params, const String & database_name, const String & table_name, const Context & context)
{
for (const auto & param : params)
{
if (param.is_mutable())
throw Exception("Method alter supports only change comment of column for storage " + getName(), ErrorCodes::NOT_IMPLEMENTED);
}
auto lock = lockStructureForAlter();
auto new_columns = getColumns();
params.apply(new_columns);
context.getDatabase(database_name)->alterTable(context, table_name, new_columns, {});
setColumns(std::move(new_columns));
}
}