Fix complex dict with two keys

This commit is contained in:
comunodi 2019-06-02 04:22:06 +03:00
parent a964af386c
commit 08c2f183dd
2 changed files with 8 additions and 10 deletions

View File

@ -192,22 +192,19 @@ namespace DB
}
Poco::Redis::Command commandForValues("HMGET");
const auto & primary_key = *keys_array.begin();
commandForValues.addRedisType(primary_key);
for (size_t i = 1; i < keys_array.size(); ++i)
for (size_t i = 0; i < keys_array.size(); ++i)
{
const auto & secondary_key = *(keys_array.begin() + i);
insertValueByIdx(0, primary_key);
insertValueByIdx(1, secondary_key);
commandForValues.addRedisType(secondary_key);
}
++cursor;
Poco::Redis::Array values = client->execute<Poco::Redis::Array>(commandForValues);
if (commandForValues.size() != values.size() + 2) // 'HMGET' primary_key secondary_keys
if (keys_array.size() != values.size() + 1) // 'HMGET' primary_key secondary_keys
throw Exception{"Inconsistent sizes of keys and values in Redis request",
ErrorCodes::NUMBER_OF_COLUMNS_DOESNT_MATCH};
const auto & primary_key = *keys_array.begin();
for (size_t i = 0; i < values.size(); ++i)
{
const auto & secondary_key = *(keys_array.begin() + i + 1);

View File

@ -147,14 +147,15 @@ namespace DB
{
Poco::Redis::Command command_for_secondary_keys("HKEYS");
command_for_secondary_keys.addRedisType(key);
Poco::Redis::Array reply_for_primary_key = client->execute<Poco::Redis::Array>(command_for_secondary_keys);
Poco::SharedPtr<Poco::Redis::Array> primary_with_secondary;
primary_with_secondary->addRedisType(key);
Poco::Redis::Array primary_with_secondary;
primary_with_secondary.addRedisType(key);
for (const auto & secondary_key : reply_for_primary_key)
primary_with_secondary->addRedisType(secondary_key);
primary_with_secondary.addRedisType(secondary_key);
hkeys.add(*primary_with_secondary);
hkeys.add(primary_with_secondary);
}
keys = hkeys;
}