From 5c31e73cbfe8f28e4411b35186090f02656d3c0a Mon Sep 17 00:00:00 2001 From: Jennifer Hickey Date: Mon, 15 Jul 2013 13:39:42 -0700 Subject: [PATCH] Support null sortParams in Lettuce and SRP sort DATAREDIS-217 --- .../connection/lettuce/LettuceUtils.java | 4 ++ .../data/redis/connection/srp/SrpUtils.java | 50 ++++++++++--------- .../AbstractConnectionIntegrationTests.java | 11 ++++ ...disConnectionPipelineIntegrationTests.java | 4 ++ .../JRedisConnectionIntegrationTests.java | 10 ++++ .../rjc/RjcConnectionIntegrationTests.java | 4 ++ ...RjcConnectionPipelineIntegrationTests.java | 4 ++ 7 files changed, 63 insertions(+), 24 deletions(-) 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 2075cdfa5..bfe489386 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 @@ -101,6 +101,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 79821e00a..e721f909f 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 @@ -223,34 +223,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 dcf2fc5ce..4823db0f8 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -449,6 +449,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 3f2fe9e16..b0e96e634 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 193c41f72..d3b257668 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 @@ -295,6 +295,16 @@ public class JRedisConnectionIntegrationTests extends AbstractConnectionIntegrat 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"); diff --git a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionIntegrationTests.java index 4df05f5d9..5a1ecd87d 100644 --- a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionIntegrationTests.java @@ -79,6 +79,10 @@ public class RjcConnectionIntegrationTests extends AbstractConnectionIntegration public void testSortStore() { } + @Ignore("DATAREDIS-134 string ops do not work with encoded values") + public void testSortNullParams() { + } + @Ignore("DATAREDIS-134 string ops do not work with encoded values") public void testGetRangeSetRange() { } diff --git a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java index 2313b68f9..c8434ed77 100644 --- a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java @@ -75,6 +75,10 @@ public class RjcConnectionPipelineIntegrationTests extends public void testSortStore() { } + @Ignore("DATAREDIS-134 string ops do not work with encoded values") + public void testSortNullParams() { + } + @Ignore("DATAREDIS-134 string ops do not work with encoded values") public void testStrLen() { }