mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
97f2a2213e
* Move some code outside dbms/src folder * Fix paths
94 lines
2.6 KiB
C++
94 lines
2.6 KiB
C++
#include <Parsers/ParserSystemQuery.h>
|
|
#include <Parsers/ASTSystemQuery.h>
|
|
#include <Parsers/CommonParsers.h>
|
|
#include <Parsers/ExpressionElementParsers.h>
|
|
#include <Parsers/ASTLiteral.h>
|
|
#include <Parsers/parseDatabaseAndTableName.h>
|
|
|
|
|
|
namespace ErrorCodes
|
|
{
|
|
}
|
|
|
|
|
|
namespace DB
|
|
{
|
|
|
|
|
|
bool ParserSystemQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected & expected)
|
|
{
|
|
if (!ParserKeyword{"SYSTEM"}.ignore(pos, expected))
|
|
return false;
|
|
|
|
using Type = ASTSystemQuery::Type;
|
|
|
|
auto res = std::make_shared<ASTSystemQuery>();
|
|
|
|
bool found = false;
|
|
for (int i = static_cast<int>(Type::UNKNOWN) + 1; i < static_cast<int>(Type::END); ++i)
|
|
{
|
|
Type t = static_cast<Type>(i);
|
|
if (ParserKeyword{ASTSystemQuery::typeToString(t)}.ignore(pos, expected))
|
|
{
|
|
res->type = t;
|
|
found = true;
|
|
}
|
|
}
|
|
|
|
if (!found)
|
|
return false;
|
|
|
|
switch (res->type)
|
|
{
|
|
case Type::RELOAD_DICTIONARY:
|
|
{
|
|
String cluster_str;
|
|
if (ParserKeyword{"ON"}.ignore(pos, expected))
|
|
{
|
|
if (!ASTQueryWithOnCluster::parse(pos, cluster_str, expected))
|
|
return false;
|
|
}
|
|
res->cluster = cluster_str;
|
|
ASTPtr ast;
|
|
if (ParserStringLiteral{}.parse(pos, ast, expected))
|
|
res->target_dictionary = ast->as<ASTLiteral &>().value.safeGet<String>();
|
|
else if (!parseDatabaseAndTableName(pos, expected, res->database, res->target_dictionary))
|
|
return false;
|
|
break;
|
|
}
|
|
|
|
case Type::RESTART_REPLICA:
|
|
case Type::SYNC_REPLICA:
|
|
case Type::FLUSH_DISTRIBUTED:
|
|
if (!parseDatabaseAndTableName(pos, expected, res->database, res->table))
|
|
return false;
|
|
break;
|
|
|
|
case Type::STOP_MERGES:
|
|
case Type::START_MERGES:
|
|
case Type::STOP_TTL_MERGES:
|
|
case Type::START_TTL_MERGES:
|
|
case Type::STOP_MOVES:
|
|
case Type::START_MOVES:
|
|
case Type::STOP_FETCHES:
|
|
case Type::START_FETCHES:
|
|
case Type::STOP_REPLICATED_SENDS:
|
|
case Type::START_REPLICATED_SENDS:
|
|
case Type::STOP_REPLICATION_QUEUES:
|
|
case Type::START_REPLICATION_QUEUES:
|
|
case Type::STOP_DISTRIBUTED_SENDS:
|
|
case Type::START_DISTRIBUTED_SENDS:
|
|
parseDatabaseAndTableName(pos, expected, res->database, res->table);
|
|
break;
|
|
|
|
default:
|
|
/// There are no [db.table] after COMMAND NAME
|
|
break;
|
|
}
|
|
|
|
node = std::move(res);
|
|
return true;
|
|
}
|
|
|
|
}
|