mirror of
https://github.com/fluencelabs/redis
synced 2025-04-09 02:46:02 +00:00
Merge pull request #4737 from guybe7/zlexcount_fix
Don't call sdscmp() with shared.maxstring or shared.minstring
This commit is contained in:
commit
6a6471aad5
14
src/t_zset.c
14
src/t_zset.c
@ -574,12 +574,12 @@ int zslParseLexRangeItem(robj *item, sds *dest, int *ex) {
|
|||||||
switch(c[0]) {
|
switch(c[0]) {
|
||||||
case '+':
|
case '+':
|
||||||
if (c[1] != '\0') return C_ERR;
|
if (c[1] != '\0') return C_ERR;
|
||||||
*ex = 0;
|
*ex = 1;
|
||||||
*dest = shared.maxstring;
|
*dest = shared.maxstring;
|
||||||
return C_OK;
|
return C_OK;
|
||||||
case '-':
|
case '-':
|
||||||
if (c[1] != '\0') return C_ERR;
|
if (c[1] != '\0') return C_ERR;
|
||||||
*ex = 0;
|
*ex = 1;
|
||||||
*dest = shared.minstring;
|
*dest = shared.minstring;
|
||||||
return C_OK;
|
return C_OK;
|
||||||
case '(':
|
case '(':
|
||||||
@ -652,9 +652,8 @@ int zslIsInLexRange(zskiplist *zsl, zlexrangespec *range) {
|
|||||||
zskiplistNode *x;
|
zskiplistNode *x;
|
||||||
|
|
||||||
/* Test for ranges that will always be empty. */
|
/* Test for ranges that will always be empty. */
|
||||||
if (sdscmplex(range->min,range->max) > 1 ||
|
int cmp = sdscmplex(range->min,range->max);
|
||||||
(sdscmp(range->min,range->max) == 0 &&
|
if (cmp > 0 || (cmp == 0 && (range->minex || range->maxex)))
|
||||||
(range->minex || range->maxex)))
|
|
||||||
return 0;
|
return 0;
|
||||||
x = zsl->tail;
|
x = zsl->tail;
|
||||||
if (x == NULL || !zslLexValueGteMin(x->ele,range))
|
if (x == NULL || !zslLexValueGteMin(x->ele,range))
|
||||||
@ -927,9 +926,8 @@ int zzlIsInLexRange(unsigned char *zl, zlexrangespec *range) {
|
|||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
|
||||||
/* Test for ranges that will always be empty. */
|
/* Test for ranges that will always be empty. */
|
||||||
if (sdscmplex(range->min,range->max) > 1 ||
|
int cmp = sdscmplex(range->min,range->max);
|
||||||
(sdscmp(range->min,range->max) == 0 &&
|
if (cmp > 0 || (cmp == 0 && (range->minex || range->maxex)))
|
||||||
(range->minex || range->maxex)))
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
p = ziplistIndex(zl,-2); /* Last element. */
|
p = ziplistIndex(zl,-2); /* Last element. */
|
||||||
|
@ -388,7 +388,7 @@ start_server {tags {"zset"}} {
|
|||||||
0 omega}
|
0 omega}
|
||||||
}
|
}
|
||||||
|
|
||||||
test "ZRANGEBYLEX/ZREVRANGEBYLEX/ZCOUNT basics" {
|
test "ZRANGEBYLEX/ZREVRANGEBYLEX/ZLEXCOUNT basics" {
|
||||||
create_default_lex_zset
|
create_default_lex_zset
|
||||||
|
|
||||||
# inclusive range
|
# inclusive range
|
||||||
@ -416,6 +416,22 @@ start_server {tags {"zset"}} {
|
|||||||
assert_equal {} [r zrevrangebylex zset \[elez \[elex]
|
assert_equal {} [r zrevrangebylex zset \[elez \[elex]
|
||||||
assert_equal {} [r zrevrangebylex zset (hill (omega]
|
assert_equal {} [r zrevrangebylex zset (hill (omega]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "ZLEXCOUNT advanced" {
|
||||||
|
create_default_lex_zset
|
||||||
|
|
||||||
|
assert_equal 9 [r zlexcount zset - +]
|
||||||
|
assert_equal 0 [r zlexcount zset + -]
|
||||||
|
assert_equal 0 [r zlexcount zset + \[c]
|
||||||
|
assert_equal 0 [r zlexcount zset \[c -]
|
||||||
|
assert_equal 8 [r zlexcount zset \[bar +]
|
||||||
|
assert_equal 5 [r zlexcount zset \[bar \[foo]
|
||||||
|
assert_equal 4 [r zlexcount zset \[bar (foo]
|
||||||
|
assert_equal 4 [r zlexcount zset (bar \[foo]
|
||||||
|
assert_equal 3 [r zlexcount zset (bar (foo]
|
||||||
|
assert_equal 5 [r zlexcount zset - (foo]
|
||||||
|
assert_equal 1 [r zlexcount zset (maxstring +]
|
||||||
|
}
|
||||||
|
|
||||||
test "ZRANGEBYSLEX with LIMIT" {
|
test "ZRANGEBYSLEX with LIMIT" {
|
||||||
create_default_lex_zset
|
create_default_lex_zset
|
||||||
|
Loading…
x
Reference in New Issue
Block a user