提交 67cac143 编写于 作者: P Pieter Noordhuis

fix ZRANK (realize that rank is 1-based due to the skip list header)

上级 39191553
......@@ -5483,13 +5483,16 @@ static void zrankCommand(redisClient *c) {
while (x->forward[i] &&
(x->forward[i]->score < *score ||
(x->forward[i]->score == *score &&
compareStringObjects(x->forward[i]->obj,c->argv[2]) < 0))) {
compareStringObjects(x->forward[i]->obj,c->argv[2]) <= 0))) {
rank += x->span[i];
x = x->forward[i];
}
if (x->forward[i] && compareStringObjects(x->forward[i]->obj,c->argv[2]) == 0) {
addReplyLong(c, rank);
/* x might be equal to zsl->header, so test if obj is non-NULL */
if (x->obj && compareStringObjects(x->obj,c->argv[2]) == 0) {
/* the pointer from zsl->header to the first element also spans one,
* which makes the rank 1-based */
addReplyLong(c, rank-1);
return;
}
}
......
......@@ -1545,7 +1545,7 @@ proc main {server port} {
set ele [lindex [$r zrange myzset $index $index] 0]
set rank [$r zrank myzset $ele]
if {$rank != $index} {
set err "$ele RANK is wrong! ($rank != [expr $index+1])"
set err "$ele RANK is wrong! ($rank != $index)"
break
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册