DATAREDIS-1222 - Fix limit parameter in DefaultStringRedisConnection#zRangeByLex(String,Range,Limit)

Original Pull Request: #564
This commit is contained in:
anshlykov
2020-09-21 19:12:03 +03:00
committed by Christoph Strobl
parent 74050bc810
commit 7d9b84a86d
3 changed files with 25 additions and 5 deletions

View File

@@ -63,6 +63,7 @@ import org.springframework.util.ObjectUtils;
* @author Thomas Darimont
* @author Mark Paluch
* @author Ninad Divadkar
* @author Andrey Shlykov
*/
public class DefaultStringRedisConnection implements StringRedisConnection, DecoratedRedisConnection {
@@ -3573,7 +3574,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco
*/
@Override
public Set<String> zRangeByLex(String key, Range range) {
return zRangeByLex(key, range, null);
return zRangeByLex(key, range, Limit.unlimited());
}
/*
@@ -3582,7 +3583,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco
*/
@Override
public Set<String> zRangeByLex(String key, Range range, Limit limit) {
return convertAndReturn(delegate.zRangeByLex(serialize(key), range), byteSetToStringSet);
return convertAndReturn(delegate.zRangeByLex(serialize(key), range, limit), byteSetToStringSet);
}
/*

View File

@@ -36,6 +36,7 @@ import org.springframework.util.Assert;
* @author Christoph Strobl
* @author Clement Ong
* @author Mark Paluch
* @author Andrey Shlykov
* @since 2.0
*/
@RequiredArgsConstructor
@@ -856,7 +857,7 @@ class JedisZSetCommands implements RedisZSetCommands {
try {
if (isPipelined()) {
if (limit != null) {
if (limit != null && !limit.isUnlimited()) {
pipeline(connection.newJedisResult(
connection.getRequiredPipeline().zrangeByLex(key, min, max, limit.getOffset(), limit.getCount())));
} else {
@@ -866,7 +867,7 @@ class JedisZSetCommands implements RedisZSetCommands {
}
if (isQueueing()) {
if (limit != null) {
if (limit != null && !limit.isUnlimited()) {
transaction(connection.newJedisResult(
connection.getRequiredTransaction().zrangeByLex(key, min, max, limit.getOffset(), limit.getCount())));
} else {

View File

@@ -67,6 +67,7 @@ import org.springframework.data.redis.connection.RedisListCommands.Position;
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
import org.springframework.data.redis.connection.RedisZSetCommands.Limit;
import org.springframework.data.redis.connection.RedisZSetCommands.Range;
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
import org.springframework.data.redis.connection.SortParameters.Order;
@@ -94,6 +95,7 @@ import org.springframework.test.annotation.ProfileValueSourceConfiguration;
* @author Christoph Strobl
* @author Thomas Darimont
* @author Mark Paluch
* @author Andrey Shlykov
*/
@ProfileValueSourceConfiguration(RedisTestProfileValueSource.class)
public abstract class AbstractConnectionIntegrationTests {
@@ -2299,7 +2301,7 @@ public abstract class AbstractConnectionIntegrationTests {
}
@SuppressWarnings("unchecked")
@Test // DATAREDIS-378
@Test // DATAREDIS-378, DATAREDIS-1222
@IfProfileValue(name = "redisVersion", value = "2.9.0+")
@WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE })
public void zRangeByLexTest() {
@@ -2317,6 +2319,10 @@ public abstract class AbstractConnectionIntegrationTests {
actual.add(connection.zRangeByLex("myzset", Range.range().gte("aaa").lt("g")));
actual.add(connection.zRangeByLex("myzset", Range.range().gte("e")));
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.unlimited()));
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1)));
actual.add(connection.zRangeByLex("myzset", Range.range().lte("c"), Limit.limit().count(1).offset(1)));
List<Object> results = getResults();
Set<String> values = (Set<String>) results.get(7);
@@ -2335,6 +2341,18 @@ public abstract class AbstractConnectionIntegrationTests {
values = (Set<String>) results.get(10);
assertThat(values, hasItems("e", "f", "g"));
assertThat(values, not(hasItems("a", "b", "c", "d")));
values = (Set<String>) results.get(11);
assertThat(values, hasItems("a", "b", "c"));
assertThat(values, not(hasItems("d", "e", "f", "g")));
values = (Set<String>) results.get(12);
assertThat(values, hasItems("a"));
assertThat(values, not(hasItems("b", "c", "d", "e", "f", "g")));
values = (Set<String>) results.get(13);
assertThat(values, hasItems("b"));
assertThat(values, not(hasItems("a", "c", "d", "e", "f", "g")));
}
@Test(expected = IllegalArgumentException.class) // DATAREDIS-316, DATAREDIS-692