From 0c6fb165243ae087143dfab6f357437bbeb2c529 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 7 Jul 2026 19:19:14 +0200 Subject: added LPUSH command --- handlers.go | 38 ++++++++++++++++++++++++++++++++++++++ main.go | 1 + 2 files changed, 39 insertions(+) diff --git a/handlers.go b/handlers.go index 5bf16a8..3b7fb76 100644 --- a/handlers.go +++ b/handlers.go @@ -200,6 +200,12 @@ func handleRpush(conn net.Conn, args []string) { key := args[1] newItems := args[2:] + if len(args) < 3 { + err := errors.New("wrong number of arguments for 'RPUSH'") + conn.Write(serializeRESP(err)) + return + } + db.mu.Lock() defer db.mu.Unlock() @@ -222,6 +228,38 @@ func handleRpush(conn net.Conn, args []string) { conn.Write(serializeRESP(len(list))) } +func handleLpush(conn net.Conn, args []string) { + key := args[1] + newItems := args[2:] + + if len(args) < 3 { + err := errors.New("wrong number of arguments for 'LPUSH'") + conn.Write(serializeRESP(err)) + return + } + + db.mu.Lock() + defer db.mu.Unlock() + + var list []string + existingItem, exists := db.data[key] + + if exists { + var ok bool + list, ok = existingItem.Value.([]string) + if !ok { + err := errors.New("WRONGTYPE Operation against a key holding the wrong kind of value") + conn.Write(serializeRESP(err)) + return + } + } else { + list = []string{} + } + list = append(newItems, list...) + db.data[key] = Item{Value: list} + conn.Write(serializeRESP(len(list))) +} + func handleLrange(conn net.Conn, args []string) { db.mu.Lock() defer db.mu.Unlock() diff --git a/main.go b/main.go index cbdae4b..82c3542 100644 --- a/main.go +++ b/main.go @@ -25,6 +25,7 @@ var commandRegistry = map[string]handlerFunc{ "PING": handlePing, "FLUSHALL": handleFlushall, "RPUSH": handleRpush, + "LPUSH": handleLpush, "LRANGE": handleLrange, "LPOP": handleLpop, "RPOP": handleRpop, -- cgit v1.2.3