提交 23d3a5fe 编写于 作者: P Pieter Noordhuis

make LINSERT return -1 when the value could not be inserted

上级 70b4b320
...@@ -538,7 +538,7 @@ typedef struct zset { ...@@ -538,7 +538,7 @@ typedef struct zset {
#define REDIS_SHARED_INTEGERS 10000 #define REDIS_SHARED_INTEGERS 10000
struct sharedObjectsStruct { 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, *colon, *nullbulk, *nullmultibulk, *queued,
*emptymultibulk, *wrongtypeerr, *nokeyerr, *syntaxerr, *sameobjecterr, *emptymultibulk, *wrongtypeerr, *nokeyerr, *syntaxerr, *sameobjecterr,
*outofrangeerr, *plus, *outofrangeerr, *plus,
...@@ -1677,6 +1677,7 @@ static void createSharedObjects(void) { ...@@ -1677,6 +1677,7 @@ static void createSharedObjects(void) {
shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n")); shared.emptybulk = createObject(REDIS_STRING,sdsnew("$0\r\n\r\n"));
shared.czero = createObject(REDIS_STRING,sdsnew(":0\r\n")); shared.czero = createObject(REDIS_STRING,sdsnew(":0\r\n"));
shared.cone = createObject(REDIS_STRING,sdsnew(":1\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.nullbulk = createObject(REDIS_STRING,sdsnew("$-1\r\n"));
shared.nullmultibulk = 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")); shared.emptymultibulk = createObject(REDIS_STRING,sdsnew("*0\r\n"));
...@@ -5252,6 +5253,10 @@ static void pushxGenericCommand(redisClient *c, robj *refval, robj *val, int whe ...@@ -5252,6 +5253,10 @@ static void pushxGenericCommand(redisClient *c, robj *refval, robj *val, int whe
ziplistLen(subject->ptr) > server.list_max_ziplist_entries) ziplistLen(subject->ptr) > server.list_max_ziplist_entries)
listTypeConvert(subject,REDIS_ENCODING_LIST); listTypeConvert(subject,REDIS_ENCODING_LIST);
server.dirty++; server.dirty++;
} else {
/* Notify client of a failed insert */
addReply(c,shared.cnegone);
return;
} }
} else { } else {
listTypePush(subject,val,where); listTypePush(subject,val,where);
......
...@@ -101,10 +101,10 @@ start_server { ...@@ -101,10 +101,10 @@ start_server {
assert_equal 6 [r linsert xlist after c yy] assert_equal 6 [r linsert xlist after c yy]
assert_equal {a b zz c yy d} [r lrange xlist 0 10] 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 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 {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 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] assert_equal {aa a b zz c yy d dd} [r lrange xlist 0 10]
# check inserting integer encoded value # check inserting integer encoded value
...@@ -154,10 +154,10 @@ start_server { ...@@ -154,10 +154,10 @@ start_server {
# don't convert when the value could not be inserted # don't convert when the value could not be inserted
create_ziplist xlist [lrepeat 256 a] 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 assert_encoding ziplist xlist
create_ziplist xlist [lrepeat 256 a] 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 assert_encoding ziplist xlist
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册