Add COMMAND COUNT option

This commit is contained in:
Roman Gershman 2022-04-21 23:26:29 +03:00
parent 69911a95ac
commit dce0ce3d69
2 changed files with 15 additions and 4 deletions

View File

@ -179,7 +179,8 @@ API 2.0
- [X] DISCARD - [X] DISCARD
- [ ] CLIENT KILL/LIST/UNPAUSE/PAUSE/GETNAME/SETNAME/REPLY/TRACKINGINFO - [ ] CLIENT KILL/LIST/UNPAUSE/PAUSE/GETNAME/SETNAME/REPLY/TRACKINGINFO
- [X] COMMAND - [X] COMMAND
- [ ] COMMAND COUNT/GETKEYS/INFO - [X] COMMAND COUNT
- [ ] COMMAND GETKEYS/INFO
- [ ] CONFIG GET/REWRITE/SET/RESETSTAT - [ ] CONFIG GET/REWRITE/SET/RESETSTAT
- [ ] MIGRATE - [ ] MIGRATE
- [ ] ROLE - [ ] ROLE

View File

@ -7,11 +7,12 @@
#include "absl/strings/str_cat.h" #include "absl/strings/str_cat.h"
#include "base/bits.h" #include "base/bits.h"
#include "base/logging.h" #include "base/logging.h"
#include "facade/error.h"
#include "server/conn_context.h" #include "server/conn_context.h"
using namespace std;
namespace dfly { namespace dfly {
using namespace facade;
using namespace std;
using absl::StrAppend; using absl::StrAppend;
using absl::StrCat; using absl::StrCat;
@ -30,7 +31,7 @@ uint32_t CommandId::OptCount(uint32_t mask) {
} }
CommandRegistry::CommandRegistry() { CommandRegistry::CommandRegistry() {
CommandId cd("COMMAND", CO::RANDOM | CO::LOADING | CO::NOSCRIPT, 0, 0, 0, 0); CommandId cd("COMMAND", CO::RANDOM | CO::LOADING | CO::NOSCRIPT, -1, 0, 0, 0);
cd.SetHandler([this](const auto& args, auto* cntx) { return Command(args, cntx); }); cd.SetHandler([this](const auto& args, auto* cntx) { return Command(args, cntx); });
@ -39,6 +40,15 @@ CommandRegistry::CommandRegistry() {
} }
void CommandRegistry::Command(CmdArgList args, ConnectionContext* cntx) { void CommandRegistry::Command(CmdArgList args, ConnectionContext* cntx) {
if (args.size() > 1) {
ToUpper(&args[1]);
string_view subcmd = ArgS(args, 1);
if (subcmd == "COUNT") {
return (*cntx)->SendLong(cmd_map_.size());
} else {
return (*cntx)->SendError(kSyntaxErr, kSyntaxErrType);
}
}
size_t len = cmd_map_.size(); size_t len = cmd_map_.size();
(*cntx)->StartArray(len); (*cntx)->StartArray(len);