From f0d33077b6d88a6584901b1f4ae8ec0ef39949bb 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 772b8920a..caa07986d 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 { @@ -3607,7 +3608,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()); } /* @@ -3616,7 +3617,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 cf73f6397..c16215422 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 { @@ -2305,7 +2307,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() { @@ -2323,6 +2325,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); @@ -2341,6 +2347,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