Skip to content

Commit 4dd5a7a

Browse files
committed
Fix JedisClusterZSetCommands.reverseRangeByLex(…) parameter order.
max/min parameter are now used in the correct order. Closes #1998
1 parent 04dae74 commit 4dd5a7a

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

Diff for: src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,9 @@ public Set<byte[]> zRevRangeByLex(byte[] key, Range range, Limit limit) {
384384

385385
try {
386386
if (limit.isUnlimited()) {
387-
return connection.getCluster().zrevrangeByLex(key, min, max);
387+
return connection.getCluster().zrevrangeByLex(key, max, min);
388388
}
389-
return connection.getCluster().zrevrangeByLex(key, min, max, limit.getOffset(), limit.getCount());
389+
return connection.getCluster().zrevrangeByLex(key, max, min, limit.getOffset(), limit.getCount());
390390
} catch (Exception ex) {
391391
throw convertJedisAccessException(ex);
392392
}

Diff for: src/test/java/org/springframework/data/redis/connection/jedis/JedisClusterConnectionTests.java

+36-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import static org.springframework.data.redis.connection.ClusterTestVariables.*;
2424
import static org.springframework.data.redis.connection.RedisGeoCommands.DistanceUnit.*;
2525
import static org.springframework.data.redis.connection.RedisGeoCommands.GeoRadiusCommandArgs.*;
26+
import static org.springframework.data.redis.connection.RedisZSetCommands.*;
2627
import static org.springframework.data.redis.core.ScanOptions.*;
2728

28-
import org.springframework.data.redis.test.condition.EnabledOnCommand;
2929
import redis.clients.jedis.HostAndPort;
3030
import redis.clients.jedis.Jedis;
3131
import redis.clients.jedis.JedisCluster;
@@ -63,14 +63,13 @@
6363
import org.springframework.data.redis.connection.RedisNode;
6464
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
6565
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
66-
import org.springframework.data.redis.connection.RedisZSetCommands.Range;
67-
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
6866
import org.springframework.data.redis.connection.ReturnType;
6967
import org.springframework.data.redis.connection.ValueEncoding.RedisValueEncoding;
7068
import org.springframework.data.redis.core.Cursor;
7169
import org.springframework.data.redis.core.ScanOptions;
7270
import org.springframework.data.redis.core.script.DigestUtils;
7371
import org.springframework.data.redis.core.types.Expiration;
72+
import org.springframework.data.redis.test.condition.EnabledOnCommand;
7473
import org.springframework.data.redis.test.condition.EnabledOnRedisClusterAvailable;
7574
import org.springframework.data.redis.test.extension.JedisExtension;
7675
import org.springframework.data.redis.test.util.HexStringUtils;
@@ -2041,6 +2040,40 @@ public void zRangeByLexShouldReturnResultCorrectly() {
20412040
JedisConverters.toBytes("c"), JedisConverters.toBytes("d"));
20422041
}
20432042

2043+
@Test // GH-1998
2044+
public void zRevRangeByLexShouldReturnValuesCorrectly() {
2045+
2046+
nativeConnection.zadd(KEY_1, 0, "a");
2047+
nativeConnection.zadd(KEY_1, 0, "b");
2048+
nativeConnection.zadd(KEY_1, 0, "c");
2049+
nativeConnection.zadd(KEY_1, 0, "d");
2050+
nativeConnection.zadd(KEY_1, 0, "e");
2051+
nativeConnection.zadd(KEY_1, 0, "f");
2052+
nativeConnection.zadd(KEY_1, 0, "g");
2053+
2054+
Set<byte[]> values = clusterConnection.zRevRangeByLex(KEY_1_BYTES, Range.range().lte("c"));
2055+
2056+
assertThat(values).containsExactly(JedisConverters.toBytes("c"), JedisConverters.toBytes("b"),
2057+
JedisConverters.toBytes("a"));
2058+
assertThat(values).doesNotContain(JedisConverters.toBytes("d"), JedisConverters.toBytes("e"),
2059+
JedisConverters.toBytes("f"), JedisConverters.toBytes("g"));
2060+
2061+
values = clusterConnection.zRevRangeByLex(KEY_1_BYTES, Range.range().lt("c"));
2062+
assertThat(values).containsExactly(JedisConverters.toBytes("b"), JedisConverters.toBytes("a"));
2063+
assertThat(values).doesNotContain(JedisConverters.toBytes("c"));
2064+
2065+
values = clusterConnection.zRevRangeByLex(KEY_1_BYTES, Range.range().gte("aaa").lt("g"));
2066+
assertThat(values).containsExactly(JedisConverters.toBytes("f"), JedisConverters.toBytes("e"),
2067+
JedisConverters.toBytes("d"), JedisConverters.toBytes("c"), JedisConverters.toBytes("b"));
2068+
assertThat(values).doesNotContain(JedisConverters.toBytes("a"), JedisConverters.toBytes("g"));
2069+
2070+
values = clusterConnection.zRevRangeByLex(KEY_1_BYTES, Range.range().lte("d"), Limit.limit().count(2).offset(1));
2071+
2072+
assertThat(values).hasSize(2).containsExactly(JedisConverters.toBytes("c"), JedisConverters.toBytes("b"));
2073+
assertThat(values).doesNotContain(JedisConverters.toBytes("a"), JedisConverters.toBytes("d"),
2074+
JedisConverters.toBytes("e"), JedisConverters.toBytes("f"), JedisConverters.toBytes("g"));
2075+
}
2076+
20442077
@Test // DATAREDIS-315
20452078
public void zRangeByScoreShouldReturnValuesCorrectly() {
20462079

0 commit comments

Comments
 (0)