mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 02:15:45 +02:00
chore: get rid of kv_args and replace it with slices to full_args (#2942)
The main change is in tx_base.* where we introduce ShardArgs slice that is only forward iterable. It allows us to go over sub-ranges of the full arguments slice or read an index of any of its elements. Since ShardArgs provide now indices into the original argument list we do not need to build the reverse index in transactions. Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
parent
135af96f2f
commit
de0e5cb0bd
13 changed files with 216 additions and 185 deletions
|
@ -1543,12 +1543,14 @@ void JsonFamily::MGet(CmdArgList args, ConnectionContext* cntx) {
|
|||
continue;
|
||||
|
||||
vector<OptString>& res = mget_resp[sid];
|
||||
for (size_t j = 0; j < res.size(); ++j) {
|
||||
if (!res[j])
|
||||
ShardArgs shard_args = transaction->GetShardArgs(sid);
|
||||
unsigned src_index = 0;
|
||||
for (auto it = shard_args.begin(); it != shard_args.end(); ++it, ++src_index) {
|
||||
if (!res[src_index])
|
||||
continue;
|
||||
|
||||
uint32_t indx = transaction->ReverseArgIndex(sid, j);
|
||||
results[indx] = std::move(res[j]);
|
||||
uint32_t dst_indx = it.index();
|
||||
results[dst_indx] = std::move(res[src_index]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2091,8 +2093,7 @@ void JsonFamily::Register(CommandRegistry* registry) {
|
|||
constexpr size_t kMsetFlags = CO::WRITE | CO::DENYOOM | CO::FAST | CO::INTERLEAVED_KEYS;
|
||||
registry->StartFamily();
|
||||
*registry << CI{"JSON.GET", CO::READONLY | CO::FAST, -2, 1, 1, acl::JSON}.HFUNC(Get);
|
||||
*registry << CI{"JSON.MGET", CO::READONLY | CO::FAST | CO::REVERSE_MAPPING, -3, 1, -2, acl::JSON}
|
||||
.HFUNC(MGet);
|
||||
*registry << CI{"JSON.MGET", CO::READONLY | CO::FAST, -3, 1, -2, acl::JSON}.HFUNC(MGet);
|
||||
*registry << CI{"JSON.TYPE", CO::READONLY | CO::FAST, 3, 1, 1, acl::JSON}.HFUNC(Type);
|
||||
*registry << CI{"JSON.STRLEN", CO::READONLY | CO::FAST, 3, 1, 1, acl::JSON}.HFUNC(StrLen);
|
||||
*registry << CI{"JSON.OBJLEN", CO::READONLY | CO::FAST, 3, 1, 1, acl::JSON}.HFUNC(ObjLen);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue