X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/cea8c5cd75b88cd5a13d9b253d792cc045d28b62..56209f720ae602cf5de70a35573625cff9ef0e2c:/src/t_hash.c?ds=inline diff --git a/src/t_hash.c b/src/t_hash.c index 5e7525bd..3ccdfd14 100644 --- a/src/t_hash.c +++ b/src/t_hash.c @@ -160,7 +160,7 @@ hashTypeIterator *hashTypeInitIterator(robj *subject) { } else if (hi->encoding == REDIS_ENCODING_HT) { hi->di = dictGetIterator(subject->ptr); } else { - redisAssert(NULL); + redisAssertWithInfo(NULL,subject,0); } return hi; } @@ -250,7 +250,7 @@ void convertToRealHash(robj *o) { unsigned int klen, vlen; dict *dict = dictCreate(&hashDictType,NULL); - redisAssert(o->type == REDIS_HASH && o->encoding != REDIS_ENCODING_HT); + redisAssertWithInfo(NULL,o,o->type == REDIS_HASH && o->encoding != REDIS_ENCODING_HT); p = zipmapRewind(zm); while((p = zipmapNext(p,&key,&klen,&val,&vlen)) != NULL) { robj *keyobj, *valobj; @@ -396,17 +396,25 @@ 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])) { - if (hashTypeLength(o) == 0) dbDelete(c->db,c->argv[1]); - addReply(c,shared.cone); + for (j = 2; j < c->argc; j++) { + if (hashTypeDelete(o,c->argv[j])) { + deleted++; + if (hashTypeLength(o) == 0) { + dbDelete(c->db,c->argv[1]); + break; + } + } + } + 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) {