Skip to content

Commit 446e58c

Browse files
anshlykovchristophstrobl
authored andcommitted
DATAREDIS-1222 - Fix limit parameter in DefaultStringRedisConnection#zRangeByLex(String,Range,Limit)
Original Pull Request: #564
1 parent a505a48 commit 446e58c

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
* @author Mark Paluch
6969
* @author Ninad Divadkar
7070
* @author Tugdual Grall
71+
* @author Andrey Shlykov
7172
*/
7273
public class DefaultStringRedisConnection implements StringRedisConnection, DecoratedRedisConnection {
7374

@@ -3625,7 +3626,7 @@ public Set<String> zRangeByLex(String key) {
36253626
*/
36263627
@Override
36273628
public Set<String> zRangeByLex(String key, Range range) {
3628-
return zRangeByLex(key, range, null);
3629+
return zRangeByLex(key, range, Limit.unlimited());
36293630
}
36303631

36313632
/*
@@ -3634,7 +3635,7 @@ public Set<String> zRangeByLex(String key, Range range) {
36343635
*/
36353636
@Override
36363637
public Set<String> zRangeByLex(String key, Range range, Limit limit) {
3637-
return convertAndReturn(delegate.zRangeByLex(serialize(key), range), byteSetToStringSet);
3638+
return convertAndReturn(delegate.zRangeByLex(serialize(key), range, limit), byteSetToStringSet);
36383639
}
36393640

36403641
/*

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
* @author Christoph Strobl
3535
* @author Clement Ong
3636
* @author Mark Paluch
37+
* @author Andrey Shlykov
3738
* @since 2.0
3839
*/
3940
class JedisZSetCommands implements RedisZSetCommands {
@@ -863,7 +864,7 @@ public Set<byte[]> zRangeByLex(byte[] key, Range range, @Nullable Limit limit) {
863864

864865
try {
865866
if (isPipelined()) {
866-
if (limit != null) {
867+
if (limit != null && !limit.isUnlimited()) {
867868
pipeline(connection.newJedisResult(
868869
connection.getRequiredPipeline().zrangeByLex(key, min, max, limit.getOffset(), limit.getCount())));
869870
} else {
@@ -873,7 +874,7 @@ public Set<byte[]> zRangeByLex(byte[] key, Range range, @Nullable Limit limit) {
873874
}
874875

875876
if (isQueueing()) {
876-
if (limit != null) {
877+
if (limit != null && !limit.isUnlimited()) {
877878
transaction(connection.newJedisResult(
878879
connection.getRequiredTransaction().zrangeByLex(key, min, max, limit.getOffset(), limit.getCount())));
879880
} else {

src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
6363
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
6464
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
65+
import org.springframework.data.redis.connection.RedisZSetCommands.Limit;
6566
import org.springframework.data.redis.connection.RedisZSetCommands.Range;
6667
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
6768
import org.springframework.data.redis.connection.SortParameters.Order;
@@ -100,6 +101,7 @@
100101
* @author Mark Paluch
101102
* @author Tugdual Grall
102103
* @author Dejan Jankov
104+
* @author Andrey Shlykov
103105
*/
104106
@ProfileValueSourceConfiguration(RedisTestProfileValueSource.class)
105107
public abstract class AbstractConnectionIntegrationTests {
@@ -2371,7 +2373,7 @@ public void pfCountWithNullKeysShouldThrowIllegalArgumentException() {
23712373
}
23722374

23732375
@SuppressWarnings("unchecked")
2374-
@Test // DATAREDIS-378
2376+
@Test // DATAREDIS-378, DATAREDIS-1222
23752377
@IfProfileValue(name = "redisVersion", value = "2.9.0+")
23762378
@WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE })
23772379
public void zRangeByLexTest() {
@@ -2389,6 +2391,10 @@ public void zRangeByLexTest() {
23892391
actual.add(connection.zRangeByLex("myzset", Range.range().gte("aaa").lt("g")));
23902392
actual.add(connection.zRangeByLex("myzset", Range.range().gte("e")));
23912393

2394+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.unlimited()));
2395+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1)));
2396+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1).offset(1)));
2397+
23922398
List<Object> results = getResults();
23932399

23942400
Set<String> values = (Set<String>) results.get(7);
@@ -2407,6 +2413,18 @@ public void zRangeByLexTest() {
24072413
values = (Set<String>) results.get(10);
24082414
assertThat(values).contains("e", "f", "g");
24092415
assertThat(values).doesNotContain("a", "b", "c", "d");
2416+
2417+
values = (Set<String>) results.get(11);
2418+
assertThat(values).contains("a", "b", "c");
2419+
assertThat(values).doesNotContain("d", "e", "f", "g");
2420+
2421+
values = (Set<String>) results.get(12);
2422+
assertThat(values).contains("a");
2423+
assertThat(values).doesNotContain("b", "c", "d", "e", "f", "g");
2424+
2425+
values = (Set<String>) results.get(13);
2426+
assertThat(values).contains("b");
2427+
assertThat(values).doesNotContain("a", "c", "d", "e", "f", "g");
24102428
}
24112429

24122430
@Test(expected = IllegalArgumentException.class) // DATAREDIS-316, DATAREDIS-692

0 commit comments

Comments
 (0)