variadic HDEL with tests
This commit is contained in:
parent
271f087842
commit
64a13a36e6
@ -138,7 +138,7 @@ struct redisCommand redisCommandTable[] = {
|
|||||||
{"hmset",hmsetCommand,-4,REDIS_CMD_DENYOOM,NULL,1,1,1,0,0},
|
{"hmset",hmsetCommand,-4,REDIS_CMD_DENYOOM,NULL,1,1,1,0,0},
|
||||||
{"hmget",hmgetCommand,-3,0,NULL,1,1,1,0,0},
|
{"hmget",hmgetCommand,-3,0,NULL,1,1,1,0,0},
|
||||||
{"hincrby",hincrbyCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1,0,0},
|
{"hincrby",hincrbyCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1,0,0},
|
||||||
{"hdel",hdelCommand,3,0,NULL,1,1,1,0,0},
|
{"hdel",hdelCommand,-3,0,NULL,1,1,1,0,0},
|
||||||
{"hlen",hlenCommand,2,0,NULL,1,1,1,0,0},
|
{"hlen",hlenCommand,2,0,NULL,1,1,1,0,0},
|
||||||
{"hkeys",hkeysCommand,2,0,NULL,1,1,1,0,0},
|
{"hkeys",hkeysCommand,2,0,NULL,1,1,1,0,0},
|
||||||
{"hvals",hvalsCommand,2,0,NULL,1,1,1,0,0},
|
{"hvals",hvalsCommand,2,0,NULL,1,1,1,0,0},
|
||||||
|
17
src/t_hash.c
17
src/t_hash.c
@ -396,18 +396,23 @@ void hmgetCommand(redisClient *c) {
|
|||||||
|
|
||||||
void hdelCommand(redisClient *c) {
|
void hdelCommand(redisClient *c) {
|
||||||
robj *o;
|
robj *o;
|
||||||
|
int j, deleted = 0;
|
||||||
|
|
||||||
if ((o = lookupKeyWriteOrReply(c,c->argv[1],shared.czero)) == NULL ||
|
if ((o = lookupKeyWriteOrReply(c,c->argv[1],shared.czero)) == NULL ||
|
||||||
checkType(c,o,REDIS_HASH)) return;
|
checkType(c,o,REDIS_HASH)) return;
|
||||||
|
|
||||||
if (hashTypeDelete(o,c->argv[2])) {
|
for (j = 2; j < c->argc; j++) {
|
||||||
|
if (hashTypeDelete(o,c->argv[j])) {
|
||||||
if (hashTypeLength(o) == 0) dbDelete(c->db,c->argv[1]);
|
if (hashTypeLength(o) == 0) dbDelete(c->db,c->argv[1]);
|
||||||
addReply(c,shared.cone);
|
deleted++;
|
||||||
signalModifiedKey(c->db,c->argv[1]);
|
|
||||||
server.dirty++;
|
|
||||||
} else {
|
|
||||||
addReply(c,shared.czero);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (deleted) {
|
||||||
|
signalModifiedKey(c->db,c->argv[1]);
|
||||||
|
server.dirty += deleted;
|
||||||
|
}
|
||||||
|
addReplyLongLong(c,deleted);
|
||||||
|
}
|
||||||
|
|
||||||
void hlenCommand(redisClient *c) {
|
void hlenCommand(redisClient *c) {
|
||||||
robj *o;
|
robj *o;
|
||||||
|
@ -226,6 +226,15 @@ start_server {tags {"hash"}} {
|
|||||||
set _ $rv
|
set _ $rv
|
||||||
} {0 0 1 0 {} 1 0 {}}
|
} {0 0 1 0 {} 1 0 {}}
|
||||||
|
|
||||||
|
test {HDEL - more than a single value} {
|
||||||
|
set rv {}
|
||||||
|
r del myhash
|
||||||
|
r hmset myhash a 1 b 2 c 3
|
||||||
|
assert_equal 0 [r hdel myhash x y]
|
||||||
|
assert_equal 2 [r hdel myhash a c f]
|
||||||
|
r hgetall myhash
|
||||||
|
} {b 2}
|
||||||
|
|
||||||
test {HEXISTS} {
|
test {HEXISTS} {
|
||||||
set rv {}
|
set rv {}
|
||||||
set k [lindex [array names smallhash *] 0]
|
set k [lindex [array names smallhash *] 0]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user