From 23d3a5feef0572762cac979f70accbae7ff1eda0 Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Fri, 11 Jun 2010 17:34:23 +0200 Subject: [PATCH] make LINSERT return -1 when the value could not be inserted --- redis.c | 7 ++++++- tests/unit/type/list.tcl | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/redis.c b/redis.c index efaeb0f1c..b563c4d5c 100644 --- 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); diff --git a/tests/unit/type/list.tcl b/tests/unit/type/list.tcl index 052cde0af..1d69a88f1 100644 --- a/tests/unit/type/list.tcl +++ b/tests/unit/type/list.tcl @@ -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 } -- GitLab