Skip to content

Commit

Permalink
Fix ZREVRANGESTORE Range argument ordering #2203
Browse files Browse the repository at this point in the history
Flip the argument order to match REV min/max semantics where min is the upper bound and max the lower now.
  • Loading branch information
mp911de committed Sep 23, 2022
1 parent 7b11917 commit 3641893
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
21 changes: 19 additions & 2 deletions src/main/java/io/lettuce/core/RedisCommandBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -3627,7 +3627,16 @@ Command<K, V, Long> zrangestorebylex(K dstKey, K srcKey, Range<? extends V> rang
notNullLimit(limit);

CommandArgs<K, V> args = new CommandArgs<>(codec);
args.addKeys(dstKey, srcKey).add(minValue(range)).add(maxValue(range)).add(BYLEX);
args.addKeys(dstKey, srcKey);

if (rev) {
args.add(maxValue(range)).add(minValue(range));
} else {
args.add(minValue(range)).add(maxValue(range));
}

args.add(BYLEX);

if (rev) {
args.add(REV);
}
Expand All @@ -3642,7 +3651,15 @@ Command<K, V, Long> zrangestorebyscore(K dstKey, K srcKey, Range<? extends Numbe
notNullLimit(limit);

CommandArgs<K, V> args = new CommandArgs<>(codec);
args.addKeys(dstKey, srcKey).add(min(range)).add(max(range)).add(BYSCORE);
args.addKeys(dstKey, srcKey);

if (rev) {
args.add(max(range)).add(min(range));
} else {
args.add(min(range)).add(max(range));
}

args.add(BYSCORE);
if (rev) {
args.add(REV);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ void zrangebyscoreWithScoresStreaming() {
void zrangestorebylex() {
redis.zadd(key, 1.0, "a", 2.0, "b", 3.0, "c", 4.0, "d");
assertThat(redis.zrangestorebylex("key1", key, Range.create("a", "b"), Limit.create(0, 4))).isEqualTo(2);
assertThat(redis.zrange("key1", 0, 2)). isEqualTo(list("a", "b"));
assertThat(redis.zrange("key1", 0, 2)).isEqualTo(list("a", "b"));
}

@Test
Expand Down Expand Up @@ -690,15 +690,16 @@ void zrevrank() {
@EnabledOnCommand("ZRANGESTORE") // Redis 6.2
void zrevrangestorebylex() {
redis.zadd(key, 1.0, "a", 2.0, "b", 3.0, "c", 4.0, "d");
assertThat(redis.zrevrangestorebylex("key1", key, Range.create("c", "-"), Limit.create(0, 4))).isEqualTo(3);
assertThat(redis.zrange("key1", 0, 2)). isEqualTo(list("a", "b", "c"));
assertThat(redis.zrevrangestorebylex("key1", key, Range.create("-", "c"), Limit.create(0, 4))).isEqualTo(3);
assertThat(redis.zrange("key1", 0, 2)).isEqualTo(list("a", "b", "c"));
}

@Test
@EnabledOnCommand("ZRANGESTORE") // Redis 6.2
void zrevrangestorebyscore() {
redis.zadd(key, 1.0, "a", 2.0, "b", 3.0, "c", 4.0, "d");
assertThat(redis.zrevrangestorebyscore("key1", key, Range.from(Boundary.including(2), Boundary.excluding(1)), Limit.create(0, 2))).isEqualTo(1);
assertThat(redis.zrevrangestorebyscore("key1", key, Range.from(Boundary.excluding(1), Boundary.including(2)),
Limit.create(0, 2))).isEqualTo(1);
assertThat(redis.zrange("key1", 0, 2)).isEqualTo(list("b"));
}

Expand Down

0 comments on commit 3641893

Please sign in to comment.