From c3a91535328890be84871835d42fc76bbb881e27 Mon Sep 17 00:00:00 2001 From: anshlykov Date: Mon, 21 Sep 2020 19:12:03 +0300 Subject: [PATCH] DATAREDIS-1222 - Fix limit parameter in DefaultStringRedisConnection#zRangeByLex(String,Range,Limit) Original Pull Request: #564 --- .../DefaultStringRedisConnection.java | 5 +++-- .../connection/jedis/JedisZSetCommands.java | 5 +++-- .../AbstractConnectionIntegrationTests.java | 20 ++++++++++++++++++- 3 files changed, 25 insertions(+), 5 deletions(-) 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 3af27aac6..5aa7c7c4e 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -62,6 +62,7 @@ import org.springframework.util.ObjectUtils; * @author Thomas Darimont * @author Mark Paluch * @author Ninad Divadkar + * @author Andrey Shlykov */ public class DefaultStringRedisConnection implements StringRedisConnection, DecoratedRedisConnection { @@ -3601,7 +3602,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()); } /* @@ -3610,7 +3611,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 e7443da55..813bb4a38 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 @@ -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 @@ -862,7 +863,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 { @@ -872,7 +873,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 a5f76d3f9..ad07dda1f 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -61,6 +61,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; @@ -93,6 +94,7 @@ import org.springframework.test.annotation.ProfileValueSourceConfiguration; * @author Thomas Darimont * @author Mark Paluch * @author Dejan Jankov + * @author Andrey Shlykov */ @ProfileValueSourceConfiguration(RedisTestProfileValueSource.class) public abstract class AbstractConnectionIntegrationTests { @@ -2298,7 +2300,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() { @@ -2316,6 +2318,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); @@ -2334,6 +2340,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