From 6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 6 Jul 2026 22:53:50 +0200 Subject: added HKEYS and HVALUES --- handlers.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 2 ++ 2 files changed, 58 insertions(+) diff --git a/handlers.go b/handlers.go index a6ae6ef..aacabe5 100644 --- a/handlers.go +++ b/handlers.go @@ -487,4 +487,60 @@ func handleHgetall(conn net.Conn, args []string){ return } conn.Write(serializeRESP(hash)) +} + +func handleHkeys(conn net.Conn, args []string){ + if len(args) != 2 { + conn.Write(serializeRESP(errors.New("ERR wrong number of arguments for 'HKEYS'"))) + return + } + key := args[1] + + db.mu.Lock() + defer db.mu.Unlock() + + item, exists := db.data[key] + if !exists { + conn.Write(serializeRESP(nil)) + return + } + + hash, ok := item.Value.(map[string]string) + if !ok { + conn.Write(serializeRESP(errors.New("WRONGTYPE Operation against a key holding the wrong kind of value"))) + return + } + result := make([]string, 0, len(hash)) + for key := range hash { + result = append(result, key) + } + conn.Write(serializeRESP(result)) +} + +func handleHvalues(conn net.Conn, args []string){ + if len(args) != 2 { + conn.Write(serializeRESP(errors.New("ERR wrong number of arguments for 'HVALUES'"))) + return + } + key := args[1] + + db.mu.Lock() + defer db.mu.Unlock() + + item, exists := db.data[key] + if !exists { + conn.Write(serializeRESP(nil)) + return + } + + hash, ok := item.Value.(map[string]string) + if !ok { + conn.Write(serializeRESP(errors.New("WRONGTYPE Operation against a key holding the wrong kind of value"))) + return + } + result := make([]string, 0, len(hash)) + for _, value := range hash { + result = append(result, value) + } + conn.Write(serializeRESP(result)) } \ No newline at end of file diff --git a/main.go b/main.go index a20db6a..8a73770 100644 --- a/main.go +++ b/main.go @@ -32,6 +32,8 @@ var commandRegistry = map[string]handlerFunc{ "HSET": handleHset, "HGET": handleHget, "HGETALL": handleHgetall, + "HKEYS": handleHkeys, + "HVALUES": handleHvalues, } func main() { -- cgit v1.2.3