diff --git a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java index dcfd5d960..5bd90eb9c 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -68,6 +68,7 @@ import org.springframework.util.ObjectUtils; * @author Mark Paluch * @author Ninad Divadkar * @author Tugdual Grall + * @author Andrey Shlykov */ public class DefaultStringRedisConnection implements StringRedisConnection, DecoratedRedisConnection { @@ -3625,7 +3626,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco */ @Override public Set zRangeByLex(String key, Range range) { - return zRangeByLex(key, range, null); + return zRangeByLex(key, range, Limit.unlimited()); } /* @@ -3634,7 +3635,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco */ @Override public Set zRangeByLex(String key, Range range, Limit limit) { - return convertAndReturn(delegate.zRangeByLex(serialize(key), range), byteSetToStringSet); + return convertAndReturn(delegate.zRangeByLex(serialize(key), range, limit), byteSetToStringSet); } /* diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java index 793be788d..edbb301af 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java @@ -34,6 +34,7 @@ import org.springframework.util.Assert; * @author Christoph Strobl * @author Clement Ong * @author Mark Paluch + * @author Andrey Shlykov * @since 2.0 */ class JedisZSetCommands implements RedisZSetCommands { @@ -863,7 +864,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 { @@ -873,7 +874,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 { diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java index 7a75d97f9..70c635d42 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -62,6 +62,7 @@ import org.springframework.data.redis.connection.RedisStreamCommands.XClaimOptio 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; @@ -100,6 +101,7 @@ import org.springframework.test.annotation.ProfileValueSourceConfiguration; * @author Mark Paluch * @author Tugdual Grall * @author Dejan Jankov + * @author Andrey Shlykov */ @ProfileValueSourceConfiguration(RedisTestProfileValueSource.class) public abstract class AbstractConnectionIntegrationTests { @@ -2371,7 +2373,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() { @@ -2389,6 +2391,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 results = getResults(); Set values = (Set) results.get(7); @@ -2407,6 +2413,18 @@ public abstract class AbstractConnectionIntegrationTests { values = (Set) results.get(10); assertThat(values).contains("e", "f", "g"); assertThat(values).doesNotContain("a", "b", "c", "d"); + + values = (Set) results.get(11); + assertThat(values).contains("a", "b", "c"); + assertThat(values).doesNotContain("d", "e", "f", "g"); + + values = (Set) results.get(12); + assertThat(values).contains("a"); + assertThat(values).doesNotContain("b", "c", "d", "e", "f", "g"); + + values = (Set) results.get(13); + assertThat(values).contains("b"); + assertThat(values).doesNotContain("a", "c", "d", "e", "f", "g"); } @Test(expected = IllegalArgumentException.class) // DATAREDIS-316, DATAREDIS-692