]> git.saurik.com Git - redis.git/commitdiff
SORT with STORE removes key if result is empty. This fixes issue #227.
authorMichal Kwiatkowski <michal@trivas.pl>
Mon, 30 Jan 2012 06:36:49 +0000 (07:36 +0100)
committerMichal Kwiatkowski <michal@trivas.pl>
Mon, 30 Jan 2012 06:36:49 +0000 (07:36 +0100)
src/sort.c
tests/unit/cas.tcl
tests/unit/sort.tcl

index 7e50582efcd76602c2f9f9c5b2889ef424728a0e..038aec27afbbb3b9f233cf8c0967734a6d71a1c2 100644 (file)
@@ -367,9 +367,14 @@ void sortCommand(redisClient *c) {
                 }
             }
         }
-        if (outputlen) setKey(c->db,storekey,sobj);
+        if (outputlen) {
+            setKey(c->db,storekey,sobj);
+            server.dirty += outputlen;
+        } else if (dbDelete(c->db,storekey)) {
+            signalModifiedKey(c->db,storekey);
+            server.dirty++;
+        }
         decrRefCount(sobj);
-        server.dirty += outputlen;
         addReplyLongLong(c,outputlen);
     }
 
index 082fba3535815102f0a0bb6ac0022b48219b91f0..95766abe4580a63602bd65ab26cb4cc110b3d190 100644 (file)
@@ -25,6 +25,16 @@ start_server {tags {"cas"}} {
         r exec
     } {}
 
+    test {EXEC fail on WATCHed key modified by SORT with STORE even if the result is empty} {
+        r flushdb
+        r lpush foo bar
+        r watch foo
+        r sort emptylist store foo
+        r multi
+        r ping
+        r exec
+    } {}
+
     test {After successful EXEC key is no longer watched} {
         r set x 30
         r watch x
index d8f93e83b9227289b24beb2a797a5f399418c6f5..38813065923c15fd0555f0b4068806bfae1591a0 100644 (file)
@@ -150,6 +150,13 @@ start_server {
         r exists zap
     } {0}
 
+    test "SORT with STORE removes key if result is empty (github issue 227)" {
+        r flushdb
+        r lpush foo bar
+        r sort emptylist store foo
+        r exists foo
+    } {0}
+
     tags {"slow"} {
         set num 100
         set res [create_random_dataset $num lpush]