mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-30 05:30:51 +00:00
Add parser
This commit is contained in:
parent
630ef97854
commit
d5b4b40b4e
@ -102,7 +102,7 @@ void startStopAction(Context & context, ASTSystemQuery & query, StorageActionBlo
|
|||||||
|
|
||||||
if (!query.target_table.empty())
|
if (!query.target_table.empty())
|
||||||
{
|
{
|
||||||
String database = !query.target_database.empty() ? query.target_database : context.getCurrentDatabase();
|
String database = !query.database.empty() ? query.database : context.getCurrentDatabase();
|
||||||
|
|
||||||
if (start)
|
if (start)
|
||||||
manager->remove(database, query.target_table, action_type);
|
manager->remove(database, query.target_table, action_type);
|
||||||
@ -137,8 +137,8 @@ BlockIO InterpreterSystemQuery::execute()
|
|||||||
system_context.setSetting("profile", context.getSystemProfileName());
|
system_context.setSetting("profile", context.getSystemProfileName());
|
||||||
|
|
||||||
/// Make canonical query for simpler processing
|
/// Make canonical query for simpler processing
|
||||||
if (!query.target_table.empty() && query.target_database.empty())
|
if (!query.target_table.empty() && query.database.empty())
|
||||||
query.target_database = context.getCurrentDatabase();
|
query.database = context.getCurrentDatabase();
|
||||||
|
|
||||||
switch (query.type)
|
switch (query.type)
|
||||||
{
|
{
|
||||||
@ -233,8 +233,8 @@ BlockIO InterpreterSystemQuery::execute()
|
|||||||
restartReplicas(system_context);
|
restartReplicas(system_context);
|
||||||
break;
|
break;
|
||||||
case Type::RESTART_REPLICA:
|
case Type::RESTART_REPLICA:
|
||||||
if (!tryRestartReplica(query.target_database, query.target_table, system_context))
|
if (!tryRestartReplica(query.database, query.target_table, system_context))
|
||||||
throw Exception("There is no " + query.target_database + "." + query.target_table + " replicated table",
|
throw Exception("There is no " + query.database + "." + query.target_table + " replicated table",
|
||||||
ErrorCodes::BAD_ARGUMENTS);
|
ErrorCodes::BAD_ARGUMENTS);
|
||||||
break;
|
break;
|
||||||
case Type::FLUSH_LOGS:
|
case Type::FLUSH_LOGS:
|
||||||
@ -335,7 +335,7 @@ void InterpreterSystemQuery::restartReplicas(Context & system_context)
|
|||||||
|
|
||||||
void InterpreterSystemQuery::syncReplica(ASTSystemQuery & query)
|
void InterpreterSystemQuery::syncReplica(ASTSystemQuery & query)
|
||||||
{
|
{
|
||||||
String database_name = !query.target_database.empty() ? query.target_database : context.getCurrentDatabase();
|
String database_name = !query.database.empty() ? query.database : context.getCurrentDatabase();
|
||||||
const String & table_name = query.target_table;
|
const String & table_name = query.target_table;
|
||||||
|
|
||||||
StoragePtr table = context.getTable(database_name, table_name);
|
StoragePtr table = context.getTable(database_name, table_name);
|
||||||
@ -358,7 +358,7 @@ void InterpreterSystemQuery::syncReplica(ASTSystemQuery & query)
|
|||||||
|
|
||||||
void InterpreterSystemQuery::flushDistributed(ASTSystemQuery & query)
|
void InterpreterSystemQuery::flushDistributed(ASTSystemQuery & query)
|
||||||
{
|
{
|
||||||
String database_name = !query.target_database.empty() ? query.target_database : context.getCurrentDatabase();
|
String database_name = !query.database.empty() ? query.database : context.getCurrentDatabase();
|
||||||
String & table_name = query.target_table;
|
String & table_name = query.target_table;
|
||||||
|
|
||||||
if (auto storage_distributed = dynamic_cast<StorageDistributed *>(context.getTable(database_name, table_name).get()))
|
if (auto storage_distributed = dynamic_cast<StorageDistributed *>(context.getTable(database_name, table_name).get()))
|
||||||
|
@ -97,9 +97,9 @@ void ASTSystemQuery::formatImpl(const FormatSettings & settings, FormatState &,
|
|||||||
{
|
{
|
||||||
settings.ostr << " ";
|
settings.ostr << " ";
|
||||||
|
|
||||||
if (!target_database.empty())
|
if (!database.empty())
|
||||||
{
|
{
|
||||||
settings.ostr << (settings.hilite ? hilite_identifier : "") << backQuoteIfNeed(target_database)
|
settings.ostr << (settings.hilite ? hilite_identifier : "") << backQuoteIfNeed(database)
|
||||||
<< (settings.hilite ? hilite_none : "") << ".";
|
<< (settings.hilite ? hilite_none : "") << ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,6 +107,9 @@ void ASTSystemQuery::formatImpl(const FormatSettings & settings, FormatState &,
|
|||||||
<< (settings.hilite ? hilite_none : "");
|
<< (settings.hilite ? hilite_none : "");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!cluster.empty())
|
||||||
|
{
|
||||||
|
}
|
||||||
if ( type == Type::STOP_MERGES
|
if ( type == Type::STOP_MERGES
|
||||||
|| type == Type::START_MERGES
|
|| type == Type::START_MERGES
|
||||||
|| type == Type::STOP_TTL_MERGES
|
|| type == Type::STOP_TTL_MERGES
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "config_core.h"
|
#include "config_core.h"
|
||||||
|
#include <Parsers/ASTQueryWithOnCluster.h>
|
||||||
#include <Parsers/IAST.h>
|
#include <Parsers/IAST.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
class ASTSystemQuery : public IAST
|
class ASTSystemQuery : public IAST, public ASTQueryWithOnCluster
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -55,13 +56,18 @@ public:
|
|||||||
Type type = Type::UNKNOWN;
|
Type type = Type::UNKNOWN;
|
||||||
|
|
||||||
String target_dictionary;
|
String target_dictionary;
|
||||||
String target_database;
|
String database;
|
||||||
String target_table;
|
String target_table;
|
||||||
|
|
||||||
String getID(char) const override { return "SYSTEM query"; }
|
String getID(char) const override { return "SYSTEM query"; }
|
||||||
|
|
||||||
ASTPtr clone() const override { return std::make_shared<ASTSystemQuery>(*this); }
|
ASTPtr clone() const override { return std::make_shared<ASTSystemQuery>(*this); }
|
||||||
|
|
||||||
|
ASTPtr getRewrittenASTWithoutOnCluster(const std::string & new_database) const override
|
||||||
|
{
|
||||||
|
return removeOnCluster<ASTSystemQuery>(clone(), new_database);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void formatImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override;
|
void formatImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override;
|
||||||
|
@ -41,6 +41,11 @@ bool ParserSystemQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected &
|
|||||||
switch (res->type)
|
switch (res->type)
|
||||||
{
|
{
|
||||||
case Type::RELOAD_DICTIONARY:
|
case Type::RELOAD_DICTIONARY:
|
||||||
|
if (ParserKeyword{"ON"}.ignore(pos, expected))
|
||||||
|
{
|
||||||
|
if (!ASTQueryWithOnCluster::parse(pos, res->cluster, expected))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!parseIdentifierOrStringLiteral(pos, expected, res->target_dictionary))
|
if (!parseIdentifierOrStringLiteral(pos, expected, res->target_dictionary))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@ -48,7 +53,7 @@ bool ParserSystemQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected &
|
|||||||
case Type::RESTART_REPLICA:
|
case Type::RESTART_REPLICA:
|
||||||
case Type::SYNC_REPLICA:
|
case Type::SYNC_REPLICA:
|
||||||
case Type::FLUSH_DISTRIBUTED:
|
case Type::FLUSH_DISTRIBUTED:
|
||||||
if (!parseDatabaseAndTableName(pos, expected, res->target_database, res->target_table))
|
if (!parseDatabaseAndTableName(pos, expected, res->database, res->target_table))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -66,7 +71,7 @@ bool ParserSystemQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected &
|
|||||||
case Type::START_REPLICATION_QUEUES:
|
case Type::START_REPLICATION_QUEUES:
|
||||||
case Type::STOP_DISTRIBUTED_SENDS:
|
case Type::STOP_DISTRIBUTED_SENDS:
|
||||||
case Type::START_DISTRIBUTED_SENDS:
|
case Type::START_DISTRIBUTED_SENDS:
|
||||||
parseDatabaseAndTableName(pos, expected, res->target_database, res->target_table);
|
parseDatabaseAndTableName(pos, expected, res->database, res->target_table);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user