diff options
| author | alex <[email protected]> | 2026-07-06 22:53:50 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-06 22:53:50 +0200 |
| commit | 6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f (patch) | |
| tree | 122bcc37a5619459d1ecad69828510efa4be0318 /handlers.go | |
| parent | 291a6c9044723fcbcce18a3cd12509d5fdac4702 (diff) | |
| download | redis-clone-6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f.tar.xz redis-clone-6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f.zip | |
added HKEYS and HVALUES
Diffstat (limited to 'handlers.go')
| -rw-r--r-- | handlers.go | 56 |
1 files changed, 56 insertions, 0 deletions
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 |
