ClickHouse/dbms/include/DB/Storages/AlterCommands.h

56 lines
1.7 KiB
C
Raw Normal View History

2014-07-11 08:10:45 +00:00
#pragma once
2014-07-11 08:10:45 +00:00
#include <DB/Core/NamesAndTypes.h>
#include <DB/Storages/ColumnDefault.h>
2014-07-11 08:10:45 +00:00
namespace DB
{
2014-09-12 00:32:27 +00:00
/// Операция из запроса ALTER (кроме манипуляции с PART/PARTITION). Добавление столбцов типа Nested не развернуто в добавление отдельных столбцов.
2014-07-11 08:10:45 +00:00
struct AlterCommand
{
enum Type
{
ADD,
DROP,
MODIFY
};
Type type;
String column_name;
/// Для ADD и MODIFY - новый тип столбца.
DataTypePtr data_type;
ColumnDefaultType default_type{};
ASTPtr default_expression{};
2014-07-11 08:10:45 +00:00
/// Для ADD - после какого столбца добавить новый. Если пустая строка, добавить в конец. Добавить в начало сейчас нельзя.
String after_column;
/// одинаковыми считаются имена, если они совпадают целиком или name_without_dot совпадает с частью имени до точки
static bool namesEqual(const String & name_without_dot, const DB::NameAndTypePair & name_type)
{
String name_with_dot = name_without_dot + ".";
return (name_with_dot == name_type.name.substr(0, name_without_dot.length() + 1) || name_without_dot == name_type.name);
}
void apply(NamesAndTypesList & columns,
NamesAndTypesList & materialized_columns,
NamesAndTypesList & alias_columns,
ColumnDefaults & column_defaults) const;
2014-07-11 08:10:45 +00:00
};
class AlterCommands : public std::vector<AlterCommand>
{
public:
void apply(NamesAndTypesList & columns,
NamesAndTypesList & materialized_columns,
NamesAndTypesList & alias_columns,
ColumnDefaults & column_defaults) const;
2014-07-11 08:10:45 +00:00
};
}