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 bbfbabce5..c097b13c6 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -2040,8 +2040,40 @@ public class DefaultStringRedisConnection implements StringRedisConnection { } return tupleToStringTuple.convert(results); } - + public Set zRevRangeByScore(String key, double min, double max) { + Set results = delegate.zRevRangeByScore(serialize(key), min, max); + if(isPipelined()) { + pipeline(byteSetToStringSet); + } + return byteSetToStringSet.convert(results); + } + + public Set zRevRangeByScoreWithScores(String key, double min, double max) { + Set results = delegate.zRevRangeByScoreWithScores(serialize(key), min, max); + if(isPipelined()) { + pipeline(tupleToStringTuple); + } + return tupleToStringTuple.convert(results); + } + + public Set zRevRangeByScore(String key, double min, double max, long offset, long count) { + Set results = delegate.zRevRangeByScore(serialize(key), min, max, offset, count); + if(isPipelined()) { + pipeline(byteSetToStringSet); + } + return byteSetToStringSet.convert(results); + } + + public Set zRevRangeByScoreWithScores(String key, double min, double max, + long offset, long count) { + Set results = delegate.zRevRangeByScoreWithScores(serialize(key), min, max, offset, count); + if(isPipelined()) { + pipeline(tupleToStringTuple); + } + return tupleToStringTuple.convert(results); + } + public Long zRevRank(String key, String value) { Long result = delegate.zRevRank(serialize(key), serialize(value)); if(isPipelined()) { diff --git a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java index 50c3f7b3c..8870bc5b5 100644 --- a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java @@ -207,6 +207,14 @@ public interface StringRedisConnection extends RedisConnection { Set zRevRangeWithScores(String key, long start, long end); + Set zRevRangeByScore(String key, double min, double max); + + Set zRevRangeByScoreWithScores(String key, double min, double max); + + Set zRevRangeByScore(String key, double min, double max, long offset, long count); + + Set zRevRangeByScoreWithScores(String key, double min, double max, long offset, long count); + Set zRangeByScore(String key, double min, double max); Set zRangeByScoreWithScores(String key, double min, double max); 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 b001f1de5..355120b56 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -34,7 +34,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; import java.util.UUID; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; @@ -53,13 +52,11 @@ import org.springframework.data.redis.TestCondition; import org.springframework.data.redis.connection.RedisListCommands.Position; import org.springframework.data.redis.connection.RedisStringCommands.BitOperation; import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate; -import org.springframework.data.redis.connection.RedisZSetCommands.Tuple; import org.springframework.data.redis.connection.SortParameters.Order; import org.springframework.data.redis.connection.StringRedisConnection.StringTuple; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationUtils; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.test.annotation.IfProfileValue; import org.springframework.test.annotation.ProfileValueSourceConfiguration; @@ -1589,46 +1586,44 @@ public abstract class AbstractConnectionIntegrationTests { new DefaultStringTuple("James".getBytes(), "James", 1d) })) })); } - @SuppressWarnings("unchecked") @Test public void testZRevRangeByScoreOffsetCount() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d, 0, 5)); - assertEquals(new LinkedHashSet(Arrays.asList(new String[] { "Bob", "James" })), - SerializationUtils.deserialize((Set) getResults().get(2), stringSerializer)); + actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); + actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes())); + actual.add(connection.zRevRangeByScore("myset", 0d, 3d, 0, 5)); + verifyResults(Arrays.asList(new Object[] {true, true, + new LinkedHashSet(Arrays.asList(new String[] { "Bob", "James" }))})); } - @SuppressWarnings("unchecked") @Test public void testZRevRangeByScore() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d)); - assertEquals(new LinkedHashSet(Arrays.asList(new String[] { "Bob", "James" })), - SerializationUtils.deserialize((Set) getResults().get(2), stringSerializer)); + actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); + actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes())); + actual.add(connection.zRevRangeByScore("myset", 0d, 3d)); + verifyResults(Arrays.asList(new Object[] {true, true, + new LinkedHashSet(Arrays.asList(new String[] { "Bob", "James" }))})); } @Test public void testZRevRangeByScoreWithScoresOffsetCount() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScoreWithScores("myset".getBytes(), 0d, 3d, 0, 1)); - assertEquals( - new LinkedHashSet(Arrays.asList(new Tuple[] { new DefaultTuple("Bob" - .getBytes(), 2d) })), getResults().get(2)); + actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); + actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes())); + actual.add(connection.zRevRangeByScoreWithScores("myset", 0d, 3d, 0, 1)); + verifyResults(Arrays.asList(new Object[] {true, true, + new LinkedHashSet(Arrays.asList(new StringTuple[] { new DefaultStringTuple("Bob" + .getBytes(), "Bob", 2d) }))})); } @Test public void testZRevRangeByScoreWithScores() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 3, "Joe".getBytes())); - actual.add(byteConnection.zRevRangeByScoreWithScores("myset".getBytes(), 0d, 2d)); - assertEquals( - new LinkedHashSet(Arrays.asList(new Tuple[] { - new DefaultTuple("Bob".getBytes(), 2d), - new DefaultTuple("James".getBytes(), 1d) })), getResults().get(3)); + actual.add(connection.zAdd("myset", 2, "Bob")); + actual.add(connection.zAdd("myset", 1, "James")); + actual.add(connection.zAdd("myset", 3, "Joe")); + actual.add(connection.zRevRangeByScoreWithScores("myset", 0d, 2d)); + verifyResults(Arrays.asList(new Object[] {true, true, true, + new LinkedHashSet(Arrays.asList(new StringTuple[] { + new DefaultStringTuple("Bob".getBytes(), "Bob", 2d), + new DefaultStringTuple("James".getBytes(), "James", 1d) }))})); } @Test diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionTransactionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionTransactionIntegrationTests.java index 27b03f59d..4df377373 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionTransactionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionTransactionIntegrationTests.java @@ -459,34 +459,6 @@ abstract public class AbstractConnectionTransactionIntegrationTests extends verifyResults(Arrays.asList(new Object[] { "sup", 13l, "suckrcalifrag" })); } - @SuppressWarnings("unchecked") - @Test - public void testZRevRangeByScoreOffsetCount() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d, 0, 5)); - assertEquals(Arrays.asList(new String[] { "Bob", "James" }),(List) getResults().get(2)); - } - - @SuppressWarnings("unchecked") - @Test - public void testZRevRangeByScore() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d)); - assertEquals(Arrays.asList(new String[] { "Bob", "James" }), (List) getResults().get(2)); - } - - @SuppressWarnings("unchecked") - @Test - public void testZRevRangeByScoreWithScoresOffsetCount() { - actual.add(byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes())); - actual.add(byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes())); - actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d, 0, 5)); - assertEquals(Arrays.asList(new String[] { "Bob", "James" }), - (List) getResults().get(2)); - } - protected void initConnection() { connection.multi(); } diff --git a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionPipelineTests.java b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionPipelineTests.java index c8976dcee..00e7e27c5 100644 --- a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionPipelineTests.java +++ b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionPipelineTests.java @@ -1141,24 +1141,48 @@ public class DefaultStringRedisConnectionPipelineTests extends DefaultStringRedi super.testZRevRangeByScoreOffsetCountBytes(); } + @Test + public void testZRevRangeByScoreOffsetCount() { + doReturn(Arrays.asList(new Object[] { bytesSet })).when(nativeConnection).closePipeline(); + super.testZRevRangeByScoreOffsetCount(); + } + @Test public void testZRevRangeByScoreBytes() { doReturn(Arrays.asList(new Object[] { bytesSet })).when(nativeConnection).closePipeline(); super.testZRevRangeByScoreBytes(); } + @Test + public void testZRevRangeByScore() { + doReturn(Arrays.asList(new Object[] { bytesSet })).when(nativeConnection).closePipeline(); + super.testZRevRangeByScore(); + } + @Test public void testZRevRangeByScoreWithScoresOffsetCountBytes() { doReturn(Arrays.asList(new Object[] { tupleSet })).when(nativeConnection).closePipeline(); super.testZRevRangeByScoreWithScoresOffsetCountBytes(); } + @Test + public void testZRevRangeByScoreWithScoresOffsetCount() { + doReturn(Arrays.asList(new Object[] { tupleSet })).when(nativeConnection).closePipeline(); + super.testZRevRangeByScoreWithScoresOffsetCount(); + } + @Test public void testZRevRangeByScoreWithScoresBytes() { doReturn(Arrays.asList(new Object[] { tupleSet })).when(nativeConnection).closePipeline(); super.testZRevRangeByScoreWithScoresBytes(); } + @Test + public void testZRevRangeByScoreWithScores() { + doReturn(Arrays.asList(new Object[] { tupleSet })).when(nativeConnection).closePipeline(); + super.testZRevRangeByScoreWithScores(); + } + @Test public void testZRankBytes() { doReturn(Arrays.asList(new Object[] { 5l })).when(nativeConnection).closePipeline(); diff --git a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java index b255b222d..401870b9e 100644 --- a/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java +++ b/src/test/java/org/springframework/data/redis/connection/DefaultStringRedisConnectionTests.java @@ -1361,6 +1361,13 @@ public class DefaultStringRedisConnectionTests { verifyResults(Arrays.asList(new Object[] { bytesSet })); } + @Test + public void testZRevRangeByScoreOffsetCount() { + doReturn(bytesSet).when(nativeConnection).zRevRangeByScore(fooBytes, 1d, 3d, 5l, 7l); + actual.add(connection.zRevRangeByScore(foo, 1d, 3d, 5l, 7l)); + verifyResults(Arrays.asList(new Object[] { stringSet })); + } + @Test public void testZRevRangeByScoreBytes() { doReturn(bytesSet).when(nativeConnection).zRevRangeByScore(fooBytes, 1d, 3d); @@ -1368,6 +1375,13 @@ public class DefaultStringRedisConnectionTests { verifyResults(Arrays.asList(new Object[] { bytesSet })); } + @Test + public void testZRevRangeByScore() { + doReturn(bytesSet).when(nativeConnection).zRevRangeByScore(fooBytes, 1d, 3d); + actual.add(connection.zRevRangeByScore(foo, 1d, 3d)); + verifyResults(Arrays.asList(new Object[] { stringSet })); + } + @Test public void testZRevRangeByScoreWithScoresOffsetCountBytes() { doReturn(tupleSet).when(nativeConnection).zRevRangeByScoreWithScores(fooBytes, 1d, 3d, 5l, @@ -1376,6 +1390,14 @@ public class DefaultStringRedisConnectionTests { verifyResults(Arrays.asList(new Object[] { tupleSet })); } + @Test + public void testZRevRangeByScoreWithScoresOffsetCount() { + doReturn(tupleSet).when(nativeConnection).zRevRangeByScoreWithScores(fooBytes, 1d, 3d, 5l, + 7l); + actual.add(connection.zRevRangeByScoreWithScores(foo, 1d, 3d, 5l, 7l)); + verifyResults(Arrays.asList(new Object[] { stringTupleSet })); + } + @Test public void testZRevRangeByScoreWithScoresBytes() { doReturn(tupleSet).when(nativeConnection).zRevRangeByScoreWithScores(fooBytes, 1d, 3d); @@ -1383,6 +1405,13 @@ public class DefaultStringRedisConnectionTests { verifyResults(Arrays.asList(new Object[] { tupleSet })); } + @Test + public void testZRevRangeByScoreWithScores() { + doReturn(tupleSet).when(nativeConnection).zRevRangeByScoreWithScores(fooBytes, 1d, 3d); + actual.add(connection.zRevRangeByScoreWithScores(foo, 1d, 3d)); + verifyResults(Arrays.asList(new Object[] { stringTupleSet })); + } + @Test public void testZRankBytes() { doReturn(5l).when(nativeConnection).zRank(fooBytes, barBytes); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionTransactionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionTransactionIntegrationTests.java index ec8ff222f..d3b62ddee 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionTransactionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionTransactionIntegrationTests.java @@ -56,7 +56,6 @@ public class LettuceConnectionTransactionIntegrationTests extends private boolean convertListToSet; - private boolean convertToStringTuple=true; @Test @Ignore("Exceptions on native execute are swallowed in tx") @@ -118,6 +117,18 @@ public class LettuceConnectionTransactionIntegrationTests extends super.testZRangeByScoreWithScoresOffsetCount(); } + @Test + public void testZRevRangeByScoreOffsetCount() { + convertListToSet = true; + super.testZRevRangeByScoreOffsetCount(); + } + + @Test + public void testZRevRangeByScore() { + convertListToSet = true; + super.testZRevRangeByScore(); + } + @Test public void testZRevRange() { convertListToSet = true; @@ -195,12 +206,6 @@ public class LettuceConnectionTransactionIntegrationTests extends super.testSortStoreNullParams(); } - @Test - public void testZRevRangeByScoreWithScores() { - convertToStringTuple = false; - super.testZRevRangeByScoreWithScores(); - } - @Test public void testMove() { connection.set("foo", "bar"); @@ -242,11 +247,8 @@ public class LettuceConnectionTransactionIntegrationTests extends if (convertedResult instanceof List && !(((List) result).isEmpty()) && ((List) convertedResult).get(0) instanceof ScoredValue) { Set tuples = LettuceConverters.toTupleSet((List) convertedResult); - if(convertToStringTuple) { - return new SetConverter(new TupleConverter()) + return new SetConverter(new TupleConverter()) .convert(tuples); - } - return tuples; } if (convertListToSet && convertedResult instanceof List) { return new LinkedHashSet((List) convertedResult); diff --git a/src/test/java/org/springframework/data/redis/connection/srp/SrpConnectionTransactionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/srp/SrpConnectionTransactionIntegrationTests.java index bad5a34c3..713ad5726 100644 --- a/src/test/java/org/springframework/data/redis/connection/srp/SrpConnectionTransactionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/srp/SrpConnectionTransactionIntegrationTests.java @@ -58,8 +58,6 @@ public class SrpConnectionTransactionIntegrationTests extends AbstractConnection protected boolean convertResultToStringTuples=false; - protected boolean convertResultToTuples=false; - protected boolean convertBooleanToLong=false; protected boolean convertResultsToMap=false; @@ -254,10 +252,30 @@ public class SrpConnectionTransactionIntegrationTests extends AbstractConnection @Test public void testZRevRangeByScoreWithScores() { - convertResultToTuples = true; + convertResultToStringTuples = true; + convertResultToSet = true; super.testZRevRangeByScoreWithScores(); } + @Test + public void testZRevRangeByScoreOffsetCount() { + convertResultToSet = true; + super.testZRevRangeByScoreOffsetCount(); + } + + @Test + public void testZRevRangeByScore() { + convertResultToSet = true; + super.testZRevRangeByScore(); + } + + @Test + public void testZRevRangeByScoreWithScoresOffsetCount() { + convertResultToStringTuples = true; + convertResultToSet = true; + super.testZRevRangeByScoreWithScoresOffsetCount(); + } + @Test public void testZRem() { convertResultToSet = true; @@ -367,10 +385,7 @@ public class SrpConnectionTransactionIntegrationTests extends AbstractConnection stringTuples.add(new DefaultStringTuple(tuple, new String(tuple.getValue()))); } return stringTuples; - } else if(convertResultToTuples) { - return SrpConverters.toTupleSet((Reply[])convertedResult); - } - else if (convertResultToSet) { + } else if (convertResultToSet) { return SerializationUtils.deserialize(SrpConverters.toBytesSet((Reply[])convertedResult), stringSerializer); } else if(((Reply[]) convertedResult).length > 0 && ((Reply[])convertedResult)[0] instanceof IntegerReply) {