MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / parseQueryWithOnClusterAndTarget

Function parseQueryWithOnClusterAndTarget

src/Parsers/ParserSystemQuery.cpp:97–160  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

95};
96
97[[nodiscard]] static bool parseQueryWithOnClusterAndTarget(boost::intrusive_ptr<ASTSystemQuery> & res, IParser::Pos & pos, Expected & expected, SystemQueryTargetType target_type)
98{
99 /// Better form for user: SYSTEM <ACTION> target_name ON CLUSTER cluster
100 /// Query rewritten form + form while executing on cluster: SYSTEM <ACTION> ON CLUSTER cluster target_name
101 /// Need to support both
102
103 String cluster;
104 bool parsed_on_cluster = false;
105
106 if (ParserKeyword{Keyword::ON}.ignore(pos, expected))
107 {
108 if (!ASTQueryWithOnCluster::parse(pos, cluster, expected))
109 return false;
110 parsed_on_cluster = true;
111 }
112
113 String target;
114 ASTPtr temporary_string_literal;
115
116 if (ParserStringLiteral{}.parse(pos, temporary_string_literal, expected))
117 {
118 target = temporary_string_literal->as<ASTLiteral &>().value.safeGet<String>();
119 }
120 else
121 {
122 ParserIdentifier identifier_parser;
123 ASTPtr identifier;
124
125 if (!identifier_parser.parse(pos, identifier, expected))
126 return false;
127
128 if (!tryGetIdentifierNameInto(identifier, target))
129 return false;
130 }
131
132 if (!parsed_on_cluster && ParserKeyword{Keyword::ON}.ignore(pos, expected))
133 {
134 if (!ASTQueryWithOnCluster::parse(pos, cluster, expected))
135 return false;
136 }
137
138 res->cluster = cluster;
139
140 switch (target_type)
141 {
142 case SystemQueryTargetType::Model:
143 {
144 res->target_model = std::move(target);
145 break;
146 }
147 case SystemQueryTargetType::Function:
148 {
149 res->target_function = std::move(target);
150 break;
151 }
152 case SystemQueryTargetType::Disk:
153 {
154 res->disk = std::move(target);

Callers 1

parseImplMethod · 0.85

Calls 4

tryGetIdentifierNameIntoFunction · 0.70
parseFunction · 0.50
ignoreMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected