Use helper functions in APPEND
This commit is contained in:
parent
8f8eeffec1
commit
1333f98dd2
@ -393,31 +393,26 @@ void decrbyCommand(redisClient *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void appendCommand(redisClient *c) {
|
void appendCommand(redisClient *c) {
|
||||||
int retval;
|
|
||||||
size_t totlen;
|
size_t totlen;
|
||||||
robj *o, *append;
|
robj *o, *append;
|
||||||
|
|
||||||
o = lookupKeyWrite(c->db,c->argv[1]);
|
o = lookupKeyWrite(c->db,c->argv[1]);
|
||||||
c->argv[2] = tryObjectEncoding(c->argv[2]);
|
|
||||||
if (o == NULL) {
|
if (o == NULL) {
|
||||||
/* Create the key */
|
/* Create the key */
|
||||||
retval = dbAdd(c->db,c->argv[1],c->argv[2]);
|
c->argv[2] = tryObjectEncoding(c->argv[2]);
|
||||||
|
dbAdd(c->db,c->argv[1],c->argv[2]);
|
||||||
incrRefCount(c->argv[2]);
|
incrRefCount(c->argv[2]);
|
||||||
totlen = stringObjectLen(c->argv[2]);
|
totlen = stringObjectLen(c->argv[2]);
|
||||||
} else {
|
} else {
|
||||||
if (o->type != REDIS_STRING) {
|
/* Key exists, check type */
|
||||||
addReply(c,shared.wrongtypeerr);
|
if (checkType(c,o,REDIS_STRING))
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
append = getDecodedObject(c->argv[2]);
|
/* "append" is an argument, so always an sds */
|
||||||
if (o->encoding == REDIS_ENCODING_RAW &&
|
append = c->argv[2];
|
||||||
(sdslen(o->ptr) + sdslen(append->ptr)) > 512*1024*1024)
|
totlen = stringObjectLen(o)+sdslen(append->ptr);
|
||||||
{
|
if (checkStringLength(c,totlen) != REDIS_OK)
|
||||||
addReplyError(c,"string exceeds maximum allowed size (512MB)");
|
|
||||||
decrRefCount(append);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
/* If the object is shared or encoded, we have to make a copy */
|
/* If the object is shared or encoded, we have to make a copy */
|
||||||
if (o->refcount != 1 || o->encoding != REDIS_ENCODING_RAW) {
|
if (o->refcount != 1 || o->encoding != REDIS_ENCODING_RAW) {
|
||||||
@ -429,7 +424,6 @@ void appendCommand(redisClient *c) {
|
|||||||
|
|
||||||
/* Append the value */
|
/* Append the value */
|
||||||
o->ptr = sdscatlen(o->ptr,append->ptr,sdslen(append->ptr));
|
o->ptr = sdscatlen(o->ptr,append->ptr,sdslen(append->ptr));
|
||||||
decrRefCount(append);
|
|
||||||
totlen = sdslen(o->ptr);
|
totlen = sdslen(o->ptr);
|
||||||
}
|
}
|
||||||
touchWatchedKey(c->db,c->argv[1]);
|
touchWatchedKey(c->db,c->argv[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user