static void hkeysCommand(redisClient *c);
static void hvalsCommand(redisClient *c);
static void hgetallCommand(redisClient *c);
+static void hexistsCommand(redisClient *c);
/*================================= Globals ================================= */
{"hkeys",hkeysCommand,2,REDIS_CMD_INLINE,1,1,1},
{"hvals",hvalsCommand,2,REDIS_CMD_INLINE,1,1,1},
{"hgetall",hgetallCommand,2,REDIS_CMD_INLINE,1,1,1},
+ {"hexists",hexistsCommand,3,REDIS_CMD_BULK,1,1,1},
{"incrby",incrbyCommand,3,REDIS_CMD_INLINE|REDIS_CMD_DENYOOM,1,1,1},
{"decrby",decrbyCommand,3,REDIS_CMD_INLINE|REDIS_CMD_DENYOOM,1,1,1},
{"getset",getsetCommand,3,REDIS_CMD_BULK|REDIS_CMD_DENYOOM,1,1,1},
genericHgetallCommand(c,REDIS_GETALL_KEYS|REDIS_GETALL_VALS);
}
+static void hexistsCommand(redisClient *c) {
+ robj *o;
+ int exists = 0;
+
+ if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.czero)) == NULL ||
+ checkType(c,o,REDIS_HASH)) return;
+
+ if (o->encoding == REDIS_ENCODING_ZIPMAP) {
+ robj *field;
+ unsigned char *zm = o->ptr;
+
+ field = getDecodedObject(c->argv[2]);
+ exists = zipmapExists(zm,field->ptr,sdslen(field->ptr));
+ decrRefCount(field);
+ } else {
+ exists = dictFind(o->ptr,c->argv[2]) != NULL;
+ }
+ addReply(c,exists ? shared.cone : shared.czero);
+}
+
static void convertToRealHash(robj *o) {
unsigned char *key, *val, *p, *zm = o->ptr;
unsigned int klen, vlen;
lappend rv [$r hdel smallhash $k]
lappend rv [$r hdel smallhash $k]
lappend rv [$r hget smallhash $k]
+ unset smallhash($k)
set k [lindex [array names bighash *] 0]
lappend rv [$r hdel bighash $k]
lappend rv [$r hdel bighash $k]
lappend rv [$r hget bighash $k]
+ unset bighash($k)
set _ $rv
} {0 0 1 0 {} 1 0 {}}
+ test {HEXISTS} {
+ set rv {}
+ set k [lindex [array names smallhash *] 0]
+ lappend rv [$r hexists smallhash $k]
+ lappend rv [$r hexists smallhash nokey]
+ set k [lindex [array names bighash *] 0]
+ lappend rv [$r hexists bighash $k]
+ lappend rv [$r hexists bighash nokey]
+ } {1 0 1 0}
+
test {Is a zipmap encoded Hash promoted on big payload?} {
$r hset smallhash foo [string repeat a 1024]
$r debug object smallhash