ClickHouse/dbms/include/DB/Parsers/ASTAlterQuery.h

97 lines
2.4 KiB
C
Raw Normal View History

2013-08-07 13:07:42 +00:00
#pragma once
#include <DB/Parsers/IAST.h>
namespace DB
{
/** ALTER запрос
* ALTER TABLE [db.]name_type
* ADD COLUMN col_name type [AFTER col_after],
* DROP COLUMN col_drop,
* MODIFY COLUMN col_name type,
* DROP PARTITION partition
2013-08-07 13:07:42 +00:00
* ...
*/
class ASTAlterQuery : public IAST
{
public:
enum ParameterType
{
ADD_COLUMN,
DROP_COLUMN,
MODIFY_COLUMN,
DROP_PARTITION,
2014-08-07 11:46:01 +00:00
ATTACH_PARTITION,
2013-08-07 13:07:42 +00:00
NO_TYPE
};
struct Parameters
{
Parameters() : type(NO_TYPE) {}
2014-08-07 09:23:55 +00:00
int type = NO_TYPE;
2013-08-07 13:07:42 +00:00
/** В запросе ADD COLUMN здесь хранится имя и тип добавляемого столбца
2014-07-10 10:16:50 +00:00
* В запросе DROP это поле не используется
* В запросе MODIFY здесь хранится имя столбца и новый тип
*/
2013-08-07 13:07:42 +00:00
ASTPtr name_type;
2014-07-10 10:16:50 +00:00
/** В запросе ADD COLUMN здесь опционально хранится имя столбца, следующее после AFTER
2014-07-10 10:16:50 +00:00
* В запросе DROP здесь хранится имя столбца для удаления
*/
2013-08-07 13:07:42 +00:00
ASTPtr column;
/** В запросе DROP PARTITION здесь хранится имя partition'а.
*/
ASTPtr partition;
2014-08-07 09:23:55 +00:00
bool detach = false; /// true для DETACH PARTITION.
2014-08-07 11:46:01 +00:00
bool part = false; /// true для ATTACH [UNREPLICATED] PART
bool unreplicated = false; /// true для ATTACH UNREPLICATED ...
2013-08-07 13:07:42 +00:00
/// deep copy
2013-08-09 00:12:59 +00:00
void clone(Parameters & p) const
2013-08-07 13:07:42 +00:00
{
2014-08-07 11:46:01 +00:00
p = *this;
2013-08-07 13:07:42 +00:00
p.name_type = name_type->clone();
p.column = column->clone();
p.partition = partition->clone();
2013-08-07 13:07:42 +00:00
}
};
typedef std::vector<Parameters> ParameterContainer;
ParameterContainer parameters;
String database;
String table;
void addParameters(const Parameters & params)
{
parameters.push_back(params);
if (params.name_type)
children.push_back(params.name_type);
if (params.column)
children.push_back(params.column);
if (params.partition)
children.push_back(params.partition);
}
2014-04-08 07:47:51 +00:00
ASTAlterQuery(StringRange range_ = StringRange()) : IAST(range_) {};
2013-08-07 13:07:42 +00:00
/** Получить текст, который идентифицирует этот элемент. */
String getID() const { return ("AlterQuery_" + database + "_" + table); };
ASTPtr clone() const
{
ASTAlterQuery * res = new ASTAlterQuery(*this);
2013-08-09 00:12:59 +00:00
for (ParameterContainer::size_type i = 0; i < parameters.size(); ++i)
2013-08-07 13:07:42 +00:00
{
parameters[i].clone(res->parameters[i]);
}
return res;
}
};
}