2017-04-01 09:19:00 +00:00
|
|
|
#include <Storages/IStorage.h>
|
2018-12-25 23:11:36 +00:00
|
|
|
#include <Storages/AlterCommands.h>
|
2017-01-21 04:24:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
2018-11-28 15:50:52 +00:00
|
|
|
TableStructureReadLock::TableStructureReadLock(StoragePtr storage_, bool lock_structure, bool lock_data)
|
2017-09-01 15:05:23 +00:00
|
|
|
: storage(storage_)
|
2017-01-21 04:24:28 +00:00
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
if (lock_data)
|
2018-11-28 15:50:52 +00:00
|
|
|
data_lock = storage->data_lock->getLock(RWLockImpl::Read);
|
2017-04-01 07:20:54 +00:00
|
|
|
if (lock_structure)
|
2018-11-28 15:50:52 +00:00
|
|
|
structure_lock = storage->structure_lock->getLock(RWLockImpl::Read);
|
2017-01-21 04:24:28 +00:00
|
|
|
}
|
|
|
|
|
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));
|
|
|
|
}
|
|
|
|
|
2017-01-21 04:24:28 +00:00
|
|
|
}
|