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

111 lines
2.7 KiB
C++
Raw Normal View History

2013-08-07 13:07:42 +00:00
#pragma once
#include <DB/Parsers/IAST.h>
2013-08-07 13:07:42 +00:00
namespace DB
{
namespace ErrorCodes
{
extern const int UNEXPECTED_AST_STRUCTURE;
}
2013-08-07 13:07:42 +00:00
/** 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
2016-03-25 11:48:45 +00:00
* RESHARD [COPY] PARTITION partition
2016-03-01 17:47:53 +00:00
* TO '/path/to/zookeeper/table' [WEIGHT w], ...
* USING expression
* [COORDINATE WITH 'coordinator_id']
2013-08-07 13:07:42 +00:00
*/
class ASTAlterQuery : public IAST
{
public:
enum ParameterType
{
ADD_COLUMN,
DROP_COLUMN,
MODIFY_COLUMN,
MODIFY_PRIMARY_KEY,
DROP_PARTITION,
2014-08-07 11:46:01 +00:00
ATTACH_PARTITION,
FETCH_PARTITION,
FREEZE_PARTITION,
2016-01-28 01:00:27 +00:00
RESHARD_PARTITION,
NO_TYPE,
2013-08-07 13:07:42 +00:00
};
struct Parameters
{
2016-01-28 01:00:27 +00:00
Parameters();
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 здесь хранится имя столбца и новый тип
*/
ASTPtr col_decl;
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;
/** Для MODIFY PRIMARY KEY
*/
ASTPtr primary_key;
2016-01-28 01:00:27 +00:00
/** В запросах DROP PARTITION и RESHARD 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
2015-04-21 13:10:08 +00:00
bool unreplicated = false; /// true для ATTACH UNREPLICATED, DROP UNREPLICATED ...
2014-08-07 11:46:01 +00:00
2016-03-25 11:48:45 +00:00
bool do_copy = false; /// для RESHARD PARTITION.
/** Для FETCH PARTITION - путь в ZK к шарду, с которого скачивать партицию.
*/
String from;
2016-01-28 01:00:27 +00:00
/** Для RESHARD PARTITION.
*/
ASTPtr last_partition;
ASTPtr weighted_zookeeper_paths;
2016-01-28 01:00:42 +00:00
ASTPtr sharding_key_expr;
2016-03-01 17:47:53 +00:00
ASTPtr coordinator;
2016-01-28 01:00:27 +00:00
2013-08-07 13:07:42 +00:00
/// deep copy
2016-01-28 01:00:27 +00:00
void clone(Parameters & p) const;
2013-08-07 13:07:42 +00:00
};
2016-01-28 01:00:27 +00:00
using ParameterContainer = std::vector<Parameters>;
2013-08-07 13:07:42 +00:00
ParameterContainer parameters;
String database;
String table;
2016-01-28 01:00:27 +00:00
void addParameters(const Parameters & params);
2016-01-28 01:00:27 +00:00
ASTAlterQuery(StringRange range_ = StringRange());
2013-08-07 13:07:42 +00:00
/** Получить текст, который идентифицирует этот элемент. */
2016-01-28 01:00:27 +00:00
String getID() const override;
2013-08-07 13:07:42 +00:00
2016-01-28 01:00:27 +00:00
ASTPtr clone() const override;
protected:
2016-01-28 01:00:27 +00:00
void formatImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override;
2013-08-07 13:07:42 +00:00
};
2013-08-07 13:07:42 +00:00
}