diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceUtils.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceUtils.java index d9416d7f4..20f744977 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceUtils.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceUtils.java @@ -105,6 +105,10 @@ abstract class LettuceUtils { static SortArgs sort(SortParameters params) { SortArgs args = new SortArgs(); + if(params == null) { + return args; + } + if (params.getByPattern() != null) { args.by(new String(params.getByPattern(), Charsets.ASCII)); } diff --git a/src/main/java/org/springframework/data/redis/connection/srp/SrpUtils.java b/src/main/java/org/springframework/data/redis/connection/srp/SrpUtils.java index 7d310b375..0740b198a 100644 --- a/src/main/java/org/springframework/data/redis/connection/srp/SrpUtils.java +++ b/src/main/java/org/springframework/data/redis/connection/srp/SrpUtils.java @@ -247,34 +247,36 @@ abstract class SrpUtils { static Object[] sortParams(SortParameters params, byte[] sortKey) { List arrays = new ArrayList(); - if (params.getByPattern() != null) { - arrays.add(BY); - arrays.add(params.getByPattern()); - } - - if (params.getLimit() != null) { - arrays.add(limit(params.getLimit().getStart(), params.getLimit().getCount())); - } - - if (params.getGetPattern() != null) { - byte[][] pattern = params.getGetPattern(); - for (byte[] bs : pattern) { - arrays.add(GET); - arrays.add(bs); + if(params != null) { + if (params.getByPattern() != null) { + arrays.add(BY); + arrays.add(params.getByPattern()); } - } - if (params.getOrder() != null) { - arrays.add(params.getOrder().name().getBytes(Charsets.UTF_8)); - } + if (params.getLimit() != null) { + arrays.add(limit(params.getLimit().getStart(), params.getLimit().getCount())); + } - if (params.isAlphabetic()) { - arrays.add(ALPHA); - } + if (params.getGetPattern() != null) { + byte[][] pattern = params.getGetPattern(); + for (byte[] bs : pattern) { + arrays.add(GET); + arrays.add(bs); + } + } - if (sortKey != null) { - arrays.add(STORE); - arrays.add(sortKey); + if (params.getOrder() != null) { + arrays.add(params.getOrder().name().getBytes(Charsets.UTF_8)); + } + + if (params.isAlphabetic()) { + arrays.add(ALPHA); + } + + if (sortKey != null) { + arrays.add(STORE); + arrays.add(sortKey); + } } return arrays.toArray(); 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 dc6312207..e7be6ad12 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -712,6 +712,17 @@ public abstract class AbstractConnectionIntegrationTests { Arrays.asList(new String[] { "bar", "baz", "foo" }) }), actual); } + @Test + public void testSortNullParams() { + actual.add(connection.rPush("sortlist", "5")); + actual.add(connection.rPush("sortlist", "2")); + actual.add(connection.rPush("sortlist", "3")); + actual.add(connection.sort("sortlist", null)); + verifyResults( + Arrays.asList(new Object[] { 1l, 2l, 3l, + Arrays.asList(new String[] { "2", "3", "5" }) }), actual); + } + @Test public void testDbSize() { connection.set("dbparam", "foo"); diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java index 676aed10f..b86c308e0 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java @@ -83,6 +83,10 @@ public class JedisConnectionPipelineIntegrationTests extends public void testSortStore() { } + @Ignore("DATAREDIS-143 Pipeline tries to return Long instead of List on sort with no params") + public void testSortNullParams() { + } + @Ignore("DATAREDIS-143 Jedis ClassCastExceptions closing pipeline on certain ops") public void testMultiExec() { } diff --git a/src/test/java/org/springframework/data/redis/connection/jredis/JRedisConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jredis/JRedisConnectionIntegrationTests.java index a5e78a682..167e51edd 100644 --- a/src/test/java/org/springframework/data/redis/connection/jredis/JRedisConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jredis/JRedisConnectionIntegrationTests.java @@ -543,6 +543,16 @@ public class JRedisConnectionIntegrationTests extends AbstractConnectionIntegrat assertEquals(Arrays.asList(new String[] { "bar", "baz", "foo" }), connection.lRange("newlist", 0, 9)); } + @Test + public void testSortNullParams() { + connection.rPush("sortlist", "5"); + connection.rPush("sortlist", "2"); + connection.rPush("sortlist", "3"); + actual.add(connection.sort("sortlist", null)); + verifyResults( + Arrays.asList(new Object[] { Arrays.asList(new String[] { "2", "3", "5" }) }), actual); + } + @Test public void testLPop() { connection.rPush("PopList", "hello");