Skip to content

Commit c3a9153

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

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
@@ -62,6 +62,7 @@
6262
* @author Thomas Darimont
6363
* @author Mark Paluch
6464
* @author Ninad Divadkar
65+
* @author Andrey Shlykov
6566
*/
6667
public class DefaultStringRedisConnection implements StringRedisConnection, DecoratedRedisConnection {
6768

@@ -3601,7 +3602,7 @@ public Set<String> zRangeByLex(String key) {
36013602
*/
36023603
@Override
36033604
public Set<String> zRangeByLex(String key, Range range) {
3604-
return zRangeByLex(key, range, null);
3605+
return zRangeByLex(key, range, Limit.unlimited());
36053606
}
36063607

36073608
/*
@@ -3610,7 +3611,7 @@ public Set<String> zRangeByLex(String key, Range range) {
36103611
*/
36113612
@Override
36123613
public Set<String> zRangeByLex(String key, Range range, Limit limit) {
3613-
return convertAndReturn(delegate.zRangeByLex(serialize(key), range), byteSetToStringSet);
3614+
return convertAndReturn(delegate.zRangeByLex(serialize(key), range, limit), byteSetToStringSet);
36143615
}
36153616

36163617
/*

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
@@ -36,6 +36,7 @@
3636
* @author Christoph Strobl
3737
* @author Clement Ong
3838
* @author Mark Paluch
39+
* @author Andrey Shlykov
3940
* @since 2.0
4041
*/
4142
@RequiredArgsConstructor
@@ -862,7 +863,7 @@ public Set<byte[]> zRangeByLex(byte[] key, Range range, @Nullable Limit limit) {
862863

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

874875
if (isQueueing()) {
875-
if (limit != null) {
876+
if (limit != null && !limit.isUnlimited()) {
876877
transaction(connection.newJedisResult(
877878
connection.getRequiredTransaction().zrangeByLex(key, min, max, limit.getOffset(), limit.getCount())));
878879
} 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
@@ -61,6 +61,7 @@
6161
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
6262
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
6363
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
64+
import org.springframework.data.redis.connection.RedisZSetCommands.Limit;
6465
import org.springframework.data.redis.connection.RedisZSetCommands.Range;
6566
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
6667
import org.springframework.data.redis.connection.SortParameters.Order;
@@ -93,6 +94,7 @@
9394
* @author Thomas Darimont
9495
* @author Mark Paluch
9596
* @author Dejan Jankov
97+
* @author Andrey Shlykov
9698
*/
9799
@ProfileValueSourceConfiguration(RedisTestProfileValueSource.class)
98100
public abstract class AbstractConnectionIntegrationTests {
@@ -2298,7 +2300,7 @@ public void pfCountWithNullKeysShouldThrowIllegalArgumentException() {
22982300
}
22992301

23002302
@SuppressWarnings("unchecked")
2301-
@Test // DATAREDIS-378
2303+
@Test // DATAREDIS-378, DATAREDIS-1222
23022304
@IfProfileValue(name = "redisVersion", value = "2.9.0+")
23032305
@WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE })
23042306
public void zRangeByLexTest() {
@@ -2316,6 +2318,10 @@ public void zRangeByLexTest() {
23162318
actual.add(connection.zRangeByLex("myzset", Range.range().gte("aaa").lt("g")));
23172319
actual.add(connection.zRangeByLex("myzset", Range.range().gte("e")));
23182320

2321+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.unlimited()));
2322+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1)));
2323+
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1).offset(1)));
2324+
23192325
List<Object> results = getResults();
23202326

23212327
Set<String> values = (Set<String>) results.get(7);
@@ -2334,6 +2340,18 @@ public void zRangeByLexTest() {
23342340
values = (Set<String>) results.get(10);
23352341
assertThat(values).contains("e", "f", "g");
23362342
assertThat(values).doesNotContain("a", "b", "c", "d");
2343+
2344+
values = (Set<String>) results.get(11);
2345+
assertThat(values).contains("a", "b", "c");
2346+
assertThat(values).doesNotContain("d", "e", "f", "g");
2347+
2348+
values = (Set<String>) results.get(12);
2349+
assertThat(values).contains("a");
2350+
assertThat(values).doesNotContain("b", "c", "d", "e", "f", "g");
2351+
2352+
values = (Set<String>) results.get(13);
2353+
assertThat(values).contains("b");
2354+
assertThat(values).doesNotContain("a", "c", "d", "e", "f", "g");
23372355
}
23382356

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

0 commit comments

Comments
 (0)