Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
e53ca04b
Commit
e53ca04b
authored
Mar 11, 2011
by
Pieter Noordhuis
Browse files
Test for empty inner range when looking for elements in range
parent
8588bfa3
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/t_zset.c
View file @
e53ca04b
...
...
@@ -226,10 +226,12 @@ zskiplistNode *zslFirstInRange(zskiplist *zsl, zrangespec range) {
x
=
x
->
level
[
i
].
forward
;
}
/* The tail is in range, so the previous block should always return a
* node that is non-NULL and the last one to be out of range. */
/* This is an inner range, so the next node cannot be NULL. */
x
=
x
->
level
[
0
].
forward
;
redisAssert
(
x
!=
NULL
&&
zslValueInRange
(
x
->
score
,
&
range
));
redisAssert
(
x
!=
NULL
);
/* Check if score <= max. */
if
(
!
zslValueLteMax
(
x
->
score
,
&
range
))
return
NULL
;
return
x
;
}
...
...
@@ -250,9 +252,11 @@ zskiplistNode *zslLastInRange(zskiplist *zsl, zrangespec range) {
x
=
x
->
level
[
i
].
forward
;
}
/* The header is in range, so the previous block should always return a
* node that is non-NULL and in range. */
redisAssert
(
x
!=
NULL
&&
zslValueInRange
(
x
->
score
,
&
range
));
/* This is an inner range, so this node cannot be NULL. */
redisAssert
(
x
!=
NULL
);
/* Check if score >= min. */
if
(
!
zslValueGteMin
(
x
->
score
,
&
range
))
return
NULL
;
return
x
;
}
...
...
@@ -531,8 +535,12 @@ unsigned char *zzlFirstInRange(unsigned char *zl, zrangespec range) {
redisAssert
(
sptr
!=
NULL
);
score
=
zzlGetScore
(
sptr
);
if
(
zslValueGteMin
(
score
,
&
range
))
return
eptr
;
if
(
zslValueGteMin
(
score
,
&
range
))
{
/* Check if score <= max. */
if
(
zslValueLteMax
(
score
,
&
range
))
return
eptr
;
return
NULL
;
}
/* Move to next element. */
eptr
=
ziplistNext
(
zl
,
sptr
);
...
...
@@ -555,8 +563,12 @@ unsigned char *zzlLastInRange(unsigned char *zl, zrangespec range) {
redisAssert
(
sptr
!=
NULL
);
score
=
zzlGetScore
(
sptr
);
if
(
zslValueLteMax
(
score
,
&
range
))
return
eptr
;
if
(
zslValueLteMax
(
score
,
&
range
))
{
/* Check if score >= min. */
if
(
zslValueGteMin
(
score
,
&
range
))
return
eptr
;
return
NULL
;
}
/* Move to previous element by moving to the score of previous element.
* When this returns NULL, we know there also is no element. */
...
...
tests/unit/type/zset.tcl
View file @
e53ca04b
...
...
@@ -247,6 +247,12 @@ start_server {tags {"zset"}} {
assert_equal
{}
[
r zrangebyscore zset
(
-inf
(
-6
]
assert_equal
{}
[
r zrevrangebyscore zset
(
+inf
(
6
]
assert_equal
{}
[
r zrevrangebyscore zset
(
-6
(
-inf
]
# empty inner range
assert_equal
{}
[
r zrangebyscore zset 2.4 2.6
]
assert_equal
{}
[
r zrangebyscore zset
(
2.4 2.6
]
assert_equal
{}
[
r zrangebyscore zset 2.4
(
2.6
]
assert_equal
{}
[
r zrangebyscore zset
(
2.4
(
2.6
]
}
test
"ZRANGEBYSCORE with WITHSCORES"
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment