From 7d9b84a86d1af3a183694e7a1f5c1d72d9c03e9f 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 bb076d5ba..42b5785b2 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -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 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 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 c14b8152e..811220311 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 @@ -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 { 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 201f85dba..3ee4ef49b 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -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 results = getResults(); Set values = (Set) results.get(7); @@ -2335,6 +2341,18 @@ public abstract class AbstractConnectionIntegrationTests { values = (Set) results.get(10); assertThat(values, hasItems("e", "f", "g")); assertThat(values, not(hasItems("a", "b", "c", "d"))); + + values = (Set) results.get(11); + assertThat(values, hasItems("a", "b", "c")); + assertThat(values, not(hasItems("d", "e", "f", "g"))); + + values = (Set) results.get(12); + assertThat(values, hasItems("a")); + assertThat(values, not(hasItems("b", "c", "d", "e", "f", "g"))); + + values = (Set) 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