Skip to content

Commit 996c749

Browse files
committed
Fix JedisClusterZSetCommands.reverseRangeByLex(…) parameter order.
max/min parameter are now used in the correct order. Closes #1998
1 parent a39b457 commit 996c749

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

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

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

362362
try {
363363
if (limit.isUnlimited()) {
364-
return connection.getCluster().zrevrangeByLex(key, min, max);
364+
return connection.getCluster().zrevrangeByLex(key, max, min);
365365
}
366-
return connection.getCluster().zrevrangeByLex(key, min, max, limit.getOffset(), limit.getCount());
366+
return connection.getCluster().zrevrangeByLex(key, max, min, limit.getOffset(), limit.getCount());
367367
} catch (Exception ex) {
368368
throw convertJedisAccessException(ex);
369369
}

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

+36-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
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

2829
import redis.clients.jedis.HostAndPort;
@@ -61,14 +62,13 @@
6162
import org.springframework.data.redis.connection.RedisNode;
6263
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
6364
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
64-
import org.springframework.data.redis.connection.RedisZSetCommands.Range;
65-
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
6665
import org.springframework.data.redis.connection.ReturnType;
6766
import org.springframework.data.redis.connection.ValueEncoding.RedisValueEncoding;
6867
import org.springframework.data.redis.core.Cursor;
6968
import org.springframework.data.redis.core.ScanOptions;
7069
import org.springframework.data.redis.core.script.DigestUtils;
7170
import org.springframework.data.redis.core.types.Expiration;
71+
import org.springframework.data.redis.test.condition.EnabledOnCommand;
7272
import org.springframework.data.redis.test.condition.EnabledOnRedisClusterAvailable;
7373
import org.springframework.data.redis.test.extension.JedisExtension;
7474
import org.springframework.data.redis.test.util.HexStringUtils;
@@ -2039,6 +2039,40 @@ public void zRangeByLexShouldReturnResultCorrectly() {
20392039
JedisConverters.toBytes("c"), JedisConverters.toBytes("d"));
20402040
}
20412041

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

0 commit comments

Comments
 (0)