mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
dbms: allowed more easily to specify cluster name with hyphens [#METR-16610].
This commit is contained in:
parent
b4f60297d2
commit
cac3ce7e27
@ -112,6 +112,7 @@ bool ParserLeftAssociativeBinaryOperatorList::parseImpl(Pos & pos, Pos end, ASTP
|
||||
{
|
||||
bool first = true;
|
||||
ParserWhiteSpaceOrComments ws;
|
||||
Pos begin = pos;
|
||||
|
||||
while (1)
|
||||
{
|
||||
@ -129,7 +130,6 @@ bool ParserLeftAssociativeBinaryOperatorList::parseImpl(Pos & pos, Pos end, ASTP
|
||||
ws.ignore(pos, end);
|
||||
|
||||
/// пробуем найти какой-нибудь из допустимых операторов
|
||||
Pos begin = pos;
|
||||
|
||||
const char ** it;
|
||||
for (it = operators; *it; it += 2)
|
||||
|
@ -299,7 +299,33 @@ StoragePtr StorageFactory::get(
|
||||
if (args.size() != 3 && args.size() != 4)
|
||||
throw Exception(params_error_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
||||
|
||||
String cluster_name = typeid_cast<ASTIdentifier &>(*args[0]).name;
|
||||
/** Имя кластера - это имя тега в xml-конфигурации.
|
||||
* Обычно оно парсится как идентификатор. То есть, оно может содержать подчёркивания, но не может содержать дефисы,
|
||||
* при условии, что идентификатор не находится в обратных кавычках.
|
||||
* Но в xml в качестве имени тега более привычно использовать дефисы.
|
||||
* Такое имя будет парситься как выражение с оператором минус - совсем не то, что нужно.
|
||||
* Поэтому, рассмотрим такой случай отдельно.
|
||||
*/
|
||||
String cluster_name;
|
||||
|
||||
if (const ASTIdentifier * ast_id = typeid_cast<const ASTIdentifier *>(args[0].get()))
|
||||
{
|
||||
cluster_name = ast_id->name;
|
||||
}
|
||||
else if (const ASTLiteral * ast_lit = typeid_cast<const ASTLiteral *>(args[0].get()))
|
||||
{
|
||||
cluster_name = ast_lit->value.safeGet<String>();
|
||||
}
|
||||
else if (const ASTFunction * ast_func = typeid_cast<const ASTFunction *>(args[0].get()))
|
||||
{
|
||||
if (!ast_func->range.first || !ast_func->range.second)
|
||||
throw Exception("Illegal expression instead of cluster name.", ErrorCodes::BAD_ARGUMENTS);
|
||||
|
||||
cluster_name = String(ast_func->range.first, ast_func->range.second);
|
||||
}
|
||||
else
|
||||
throw Exception("Illegal expression instead of cluster name.", ErrorCodes::BAD_ARGUMENTS);
|
||||
|
||||
String remote_database = reinterpretAsIdentifier(args[1], local_context).name;
|
||||
String remote_table = typeid_cast<ASTIdentifier &>(*args[2]).name;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user