fix

fix

fix
This commit is contained in:
feng lv 2020-12-21 03:19:05 +00:00
parent d875735fde
commit b7d434a0ea
3 changed files with 14 additions and 20 deletions

View File

@ -50,16 +50,17 @@ void TableFunctionRemote::parseArguments(const ASTPtr & ast_function, const Cont
size_t arg_num = 0; size_t arg_num = 0;
auto get_string_literal = [](const IAST & node, const char * description) auto get_string_literal = [](const IAST & node, String & res)
{ {
const auto * lit = node.as<ASTLiteral>(); const auto * lit = node.as<ASTLiteral>();
if (!lit) if (!lit)
throw Exception(description + String(" must be string literal (in single quotes)."), ErrorCodes::BAD_ARGUMENTS); return false;
if (lit->value.getType() != Field::Types::String) if (lit->value.getType() != Field::Types::String)
throw Exception(description + String(" must be string literal (in single quotes)."), ErrorCodes::BAD_ARGUMENTS); return false;
return safeGet<const String &>(lit->value); res = safeGet<const String &>(lit->value);
return true;
}; };
if (is_cluster_function) if (is_cluster_function)
@ -70,7 +71,8 @@ void TableFunctionRemote::parseArguments(const ASTPtr & ast_function, const Cont
else else
{ {
if (!tryGetIdentifierNameInto(args[arg_num], cluster_name)) if (!tryGetIdentifierNameInto(args[arg_num], cluster_name))
cluster_description = get_string_literal(*args[arg_num], "Hosts pattern"); if (!get_string_literal(*args[arg_num], cluster_description))
throw Exception("Hosts pattern must be string literal (in single quotes).", ErrorCodes::BAD_ARGUMENTS);
} }
++arg_num; ++arg_num;
@ -122,29 +124,21 @@ void TableFunctionRemote::parseArguments(const ASTPtr & ast_function, const Cont
{ {
if (arg_num < args.size()) if (arg_num < args.size())
{ {
try if (!get_string_literal(*args[arg_num], username))
{
username = get_string_literal(*args[arg_num], "Username");
}
catch (const Exception & _ [[maybe_unused]])
{ {
username = "default"; username = "default";
sharding_key = args[arg_num]; sharding_key = args[arg_num];
++arg_num;
} }
++arg_num;
} }
if (arg_num < args.size() && !sharding_key) if (arg_num < args.size() && !sharding_key)
{ {
try if (!get_string_literal(*args[arg_num], password))
{
password = get_string_literal(*args[arg_num], "Password");
}
catch (const Exception & _ [[maybe_unused]])
{ {
sharding_key = args[arg_num]; sharding_key = args[arg_num];
++arg_num;
} }
++arg_num;
} }
if (arg_num < args.size() && !sharding_key) if (arg_num < args.size() && !sharding_key)

View File

@ -40,7 +40,7 @@ private:
ClusterPtr cluster; ClusterPtr cluster;
StorageID remote_table_id = StorageID::createEmpty(); StorageID remote_table_id = StorageID::createEmpty();
ASTPtr remote_table_function_ptr; ASTPtr remote_table_function_ptr;
ASTPtr sharding_key{}; ASTPtr sharding_key = nullptr;
}; };
} }

View File

@ -6,9 +6,9 @@ INSERT INTO FUNCTION cluster('test_shard_localhost', default, x) SELECT * FROM n
-- In fact, in this case(just one shard), sharding key is not required -- In fact, in this case(just one shard), sharding key is not required
INSERT INTO FUNCTION cluster('test_shard_localhost', default, x, rand()) SELECT * FROM numbers(10); INSERT INTO FUNCTION cluster('test_shard_localhost', default, x, rand()) SELECT * FROM numbers(10);
INSERT INTO FUNCTION remote('localhost:59000', default, x, rand()) SELECT * FROM numbers(10); INSERT INTO FUNCTION remote('127.0.0.1', default, x, rand()) SELECT * FROM numbers(10);
INSERT INTO FUNCTION remote('localhost:59000', default, x, 'default', rand()) SELECT * FROM numbers(10); INSERT INTO FUNCTION remote('127.0.0.1', default, x, 'default', rand()) SELECT * FROM numbers(10);
SELECT * FROM default.x ORDER BY number; SELECT * FROM default.x ORDER BY number;