From dce0ce3d69434b53545a4d07d25c9a0fa0eb8f77 Mon Sep 17 00:00:00 2001 From: Roman Gershman Date: Thu, 21 Apr 2022 23:26:29 +0300 Subject: [PATCH] Add COMMAND COUNT option --- README.md | 3 ++- src/server/command_registry.cc | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f668a98..1747cee 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,8 @@ API 2.0 - [X] DISCARD - [ ] CLIENT KILL/LIST/UNPAUSE/PAUSE/GETNAME/SETNAME/REPLY/TRACKINGINFO - [X] COMMAND - - [ ] COMMAND COUNT/GETKEYS/INFO + - [X] COMMAND COUNT + - [ ] COMMAND GETKEYS/INFO - [ ] CONFIG GET/REWRITE/SET/RESETSTAT - [ ] MIGRATE - [ ] ROLE diff --git a/src/server/command_registry.cc b/src/server/command_registry.cc index c2f1d98..4b785b7 100644 --- a/src/server/command_registry.cc +++ b/src/server/command_registry.cc @@ -7,11 +7,12 @@ #include "absl/strings/str_cat.h" #include "base/bits.h" #include "base/logging.h" +#include "facade/error.h" #include "server/conn_context.h" -using namespace std; - namespace dfly { +using namespace facade; +using namespace std; using absl::StrAppend; using absl::StrCat; @@ -30,7 +31,7 @@ uint32_t CommandId::OptCount(uint32_t mask) { } 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); }); @@ -39,6 +40,15 @@ CommandRegistry::CommandRegistry() { } 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(); (*cntx)->StartArray(len);