From 7ae1d4d6f50fa627a32eee261743d41d64a13e96 Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 13 Jul 2015 18:06:24 +0200 Subject: [PATCH] EXISTS is now variadic. The new return value is the number of keys existing, among the ones specified in the command line, counting the same key multiple times if given multiple times (and if it exists). See PR #2667. --- src/db.c | 14 +++++++++----- src/redis.c | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/db.c b/src/db.c index 2982c0166..b7cbbfd0a 100644 --- a/src/db.c +++ b/src/db.c @@ -293,13 +293,17 @@ void delCommand(redisClient *c) { addReplyLongLong(c,deleted); } +/* EXISTS key1 key2 ... key_N. + * Return value is the number of keys existing. */ void existsCommand(redisClient *c) { - expireIfNeeded(c->db,c->argv[1]); - if (dbExists(c->db,c->argv[1])) { - addReply(c, shared.cone); - } else { - addReply(c, shared.czero); + long long count = 0; + int j; + + for (j = 1; j < c->argc; j++) { + expireIfNeeded(c->db,c->argv[j]); + if (dbExists(c->db,c->argv[j])) count++; } + addReplyLongLong(c,count); } void selectCommand(redisClient *c) { diff --git a/src/redis.c b/src/redis.c index 309e9088b..4623479a7 100644 --- a/src/redis.c +++ b/src/redis.c @@ -129,7 +129,7 @@ struct redisCommand redisCommandTable[] = { {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0}, {"strlen",strlenCommand,2,"rF",0,NULL,1,1,1,0,0}, {"del",delCommand,-2,"w",0,NULL,1,-1,1,0,0}, - {"exists",existsCommand,2,"rF",0,NULL,1,1,1,0,0}, + {"exists",existsCommand,-2,"rF",0,NULL,1,-1,1,0,0}, {"setbit",setbitCommand,4,"wm",0,NULL,1,1,1,0,0}, {"getbit",getbitCommand,3,"rF",0,NULL,1,1,1,0,0}, {"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0},