提交 64a13a36 编写于 作者: A antirez

variadic HDEL with tests

上级 271f0878
......@@ -138,7 +138,7 @@ struct redisCommand redisCommandTable[] = {
{"hmset",hmsetCommand,-4,REDIS_CMD_DENYOOM,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},
{"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},
{"hkeys",hkeysCommand,2,0,NULL,1,1,1,0,0},
{"hvals",hvalsCommand,2,0,NULL,1,1,1,0,0},
......
......@@ -396,17 +396,22 @@ void hmgetCommand(redisClient *c) {
void hdelCommand(redisClient *c) {
robj *o;
int j, deleted = 0;
if ((o = lookupKeyWriteOrReply(c,c->argv[1],shared.czero)) == NULL ||
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]);
addReply(c,shared.cone);
deleted++;
}
}
if (deleted) {
signalModifiedKey(c->db,c->argv[1]);
server.dirty++;
} else {
addReply(c,shared.czero);
server.dirty += deleted;
}
addReplyLongLong(c,deleted);
}
void hlenCommand(redisClient *c) {
......
......@@ -226,6 +226,15 @@ start_server {tags {"hash"}} {
set _ $rv
} {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} {
set rv {}
set k [lindex [array names smallhash *] 0]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册