]> git.saurik.com Git - redis.git/commitdiff
make LINSERT return -1 when the value could not be inserted
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 11 Jun 2010 15:34:23 +0000 (17:34 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 11 Jun 2010 15:34:23 +0000 (17:34 +0200)
redis.c
tests/unit/type/list.tcl

diff --git a/redis.c b/redis.c
index efaeb0f1c6616e8938af8cf32a9419a1784aac50..b563c4d5c3d731c0952bfd4803e042d9845cc745 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -538,7 +538,7 @@ typedef struct zset {
 
 #define REDIS_SHARED_INTEGERS 10000
 struct sharedObjectsStruct {
-    robj *crlf, *ok, *err, *emptybulk, *czero, *cone, *pong, *space,
+    robj *crlf, *ok, *err, *emptybulk, *czero, *cone, *cnegone, *pong, *space,
     *colon, *nullbulk, *nullmultibulk, *queued,
     *emptymultibulk, *wrongtypeerr, *nokeyerr, *syntaxerr, *sameobjecterr,
     *outofrangeerr, *plus,
@@ -1677,6 +1677,7 @@ static void createSharedObjects(void) {
     shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n"));
     shared.czero = createObject(REDIS_STRING,sdsnew(":0\r\n"));
     shared.cone = createObject(REDIS_STRING,sdsnew(":1\r\n"));
+    shared.cnegone = createObject(REDIS_STRING,sdsnew(":-1\r\n"));
     shared.nullbulk = createObject(REDIS_STRING,sdsnew("$-1\r\n"));
     shared.nullmultibulk = createObject(REDIS_STRING,sdsnew("*-1\r\n"));
     shared.emptymultibulk = createObject(REDIS_STRING,sdsnew("*0\r\n"));
@@ -5252,6 +5253,10 @@ static void pushxGenericCommand(redisClient *c, robj *refval, robj *val, int whe
                 ziplistLen(subject->ptr) > server.list_max_ziplist_entries)
                     listTypeConvert(subject,REDIS_ENCODING_LIST);
             server.dirty++;
+        } else {
+            /* Notify client of a failed insert */
+            addReply(c,shared.cnegone);
+            return;
         }
     } else {
         listTypePush(subject,val,where);
index 052cde0afe0d8ac6cb480130392dee204a52b260..1d69a88f1891a43c3b774fdd3032f9d4fe864a70 100644 (file)
@@ -101,10 +101,10 @@ start_server {
             assert_equal 6 [r linsert xlist after c yy]
             assert_equal {a b zz c yy d} [r lrange xlist 0 10]
             assert_equal 7 [r linsert xlist after d dd]
-            assert_equal 7 [r linsert xlist after bad ddd]
+            assert_equal -1 [r linsert xlist after bad ddd]
             assert_equal {a b zz c yy d dd} [r lrange xlist 0 10]
             assert_equal 8 [r linsert xlist before a aa]
-            assert_equal 8 [r linsert xlist before bad aaa]
+            assert_equal -1 [r linsert xlist before bad aaa]
             assert_equal {aa a b zz c yy d dd} [r lrange xlist 0 10]
 
             # check inserting integer encoded value
@@ -154,10 +154,10 @@ start_server {
 
         # don't convert when the value could not be inserted
         create_ziplist xlist [lrepeat 256 a]
-        assert_equal 256 [r linsert xlist before foo a]
+        assert_equal -1 [r linsert xlist before foo a]
         assert_encoding ziplist xlist
         create_ziplist xlist [lrepeat 256 a]
-        assert_equal 256 [r linsert xlist after foo a]
+        assert_equal -1 [r linsert xlist after foo a]
         assert_encoding ziplist xlist
     }