aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handlers.go24
-rw-r--r--main.go1
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]
diff --git a/main.go b/main.go
index cd9cb7a..2364d02 100644
--- a/main.go
+++ b/main.go
@@ -23,6 +23,7 @@ var commandRegistry = map[string]handlerFunc{
"INCR": handleIncr,
"DECR": handleDecr,
"PING": handlePing,
+ "RENAME": handleRename,
/* "FLUSHALL": handleFlushall,
"RPUSH": handleRpush,
"LPUSH": handleLpush,