From 3037996363b9dbd70757949df483bd063a9b94db Mon Sep 17 00:00:00 2001 From: ydf <4960943+ydf@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:54:37 +0800 Subject: [PATCH] command: select, flushall (#32) The Redis WordPress plugin (wp-redis) uses SELECT to connect to a database. Older versions of this plugin (<0.8.0) also use FLUSHALL instead of FLUSHDB to flush the cache. See https://github.com/pantheon-systems/wp-redis --- internal/command/command.go | 4 ++++ internal/command/conn/select.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 internal/command/conn/select.go diff --git a/internal/command/command.go b/internal/command/command.go index 15b0a1e..a164d12 100644 --- a/internal/command/command.go +++ b/internal/command/command.go @@ -28,6 +28,8 @@ func Parse(args [][]byte) (redis.Cmd, error) { return server.ParseDBSize(b) case "flushdb": return key.ParseFlushDB(b) + case "flushall": + return key.ParseFlushDB(b) case "info": return server.ParseOK(b) case "lolwut": @@ -38,6 +40,8 @@ func Parse(args [][]byte) (redis.Cmd, error) { return conn.ParseEcho(b) case "ping": return conn.ParsePing(b) + case "select": + return conn.ParseSelect(b) // key case "del": diff --git a/internal/command/conn/select.go b/internal/command/conn/select.go new file mode 100644 index 0000000..e222df2 --- /dev/null +++ b/internal/command/conn/select.go @@ -0,0 +1,33 @@ +package conn + +import ( + "github.com/nalgeon/redka/internal/parser" + "github.com/nalgeon/redka/internal/redis" +) + +const ( + RESPONSE = "OK" +) + +// Returns the server's liveliness response. +// https://redis.io/commands/select +type Select struct { + redis.BaseCmd + index int +} + +func ParseSelect(b redis.BaseCmd) (Select, error) { + cmd := Select{BaseCmd: b} + err := parser.New( + parser.Int(&cmd.index), + ).Required(1).Run(cmd.Args()) + if err != nil { + return Select{}, err + } + return cmd, nil +} + +func (c Select) Run(w redis.Writer, _ redis.Redka) (any, error) { + w.WriteBulkString(RESPONSE) + return RESPONSE, nil +}