aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'handlers.go')
-rw-r--r--handlers.go24
1 files changed, 24 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]