diff options
| author | alex <[email protected]> | 2026-07-09 16:51:26 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-09 16:51:26 +0200 |
| commit | 8126486c8e488a6f541fb8b3bc65156fa983c489 (patch) | |
| tree | 4207059a31b72a00955b7df693598549f35e1d1f | |
| parent | 6aebb5bb1d35016bc8e3bed04e971614898cb6ff (diff) | |
| download | redis-clone-8126486c8e488a6f541fb8b3bc65156fa983c489.tar.xz redis-clone-8126486c8e488a6f541fb8b3bc65156fa983c489.zip | |
added RENAME command
| -rw-r--r-- | handlers.go | 24 | ||||
| -rw-r--r-- | main.go | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go index 0b5267c..105bca0 100644 --- a/handlers.go +++ b/handlers.go @@ -197,6 +197,30 @@ func handleFlushall(conn net.Conn, args []string) { }) conn.Write(serializeRESP(result)) } + +func handleRename(conn net.Conn, args []string){ + if len(args) != 3 { + err := errors.New("wrong number of arguments for 'RENAME'") + conn.Write(serializeRESP(err)) + return + } + keys := args[1:] + + result := db.ExecuteMulti(keys,func(shards []*Shard)interface{}{ + item, exists := db.getShard(keys[0]).data[keys[0]] + if !exists { + + return errors.New("no such key") + } + + db.getShard(keys[1]).data[keys[1]] = item + delete(db.getShard(keys[0]).data, keys[0]) + + return SimpleString("OK") + }) + conn.Write(serializeRESP(result)) +} + /* func handleRpush(conn net.Conn, args []string) { key := args[1] @@ -23,6 +23,7 @@ var commandRegistry = map[string]handlerFunc{ "INCR": handleIncr, "DECR": handleDecr, "PING": handlePing, + "RENAME": handleRename, /* "FLUSHALL": handleFlushall, "RPUSH": handleRpush, "LPUSH": handleLpush, |
