From 3dd7ca6f2a2612eaa6091c9ae62846228ae78a9a Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Sun, 25 Jul 2010 17:51:11 -0300 Subject: [PATCH] Added more sorting options --- src/main/java/redis/clients/jedis/Client.java | 13 +++-- .../redis/clients/jedis/SortingParams.java | 38 +++++++++++--- .../tests/commands/SortingCommandsTest.java | 49 +++++++++++++++++-- 3 files changed, 82 insertions(+), 18 deletions(-) diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index a01b2d4..a3b83cb 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -340,8 +340,8 @@ public class Client extends Connection { } public void zrevrange(String key, int start, int end) throws JedisException { - sendCommand("ZREVRANGE", key, String.valueOf(start), - String.valueOf(end)); + sendCommand("ZREVRANGE", key, String.valueOf(start), String + .valueOf(end)); } public void zrangeWithScores(String key, int start, int end) @@ -352,8 +352,8 @@ public class Client extends Connection { public void zrevrangeWithScores(String key, int start, int end) throws JedisException { - sendCommand("ZREVRANGE", key, String.valueOf(start), - String.valueOf(end), "WITHSCORES"); + sendCommand("ZREVRANGE", key, String.valueOf(start), String + .valueOf(end), "WITHSCORES"); } public void zcard(String key) throws JedisException { @@ -390,6 +390,9 @@ public class Client extends Connection { public void sort(String key, SortingParams sortingParameters) throws JedisException { - sendCommand("SORT", sortingParameters.getParams()); + List args = new ArrayList(); + args.add(key); + args.addAll(sortingParameters.getParams()); + sendCommand("SORT", args.toArray(new String[args.size()])); } } diff --git a/src/test/java/redis/clients/jedis/SortingParams.java b/src/test/java/redis/clients/jedis/SortingParams.java index 96135a9..43ab9cc 100644 --- a/src/test/java/redis/clients/jedis/SortingParams.java +++ b/src/test/java/redis/clients/jedis/SortingParams.java @@ -1,20 +1,42 @@ package redis.clients.jedis; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; public class SortingParams { - private String pattern = null; private List params = new ArrayList(); public SortingParams by(String pattern) { - this.pattern = pattern; - params.add("BY"); - params.add(pattern); - return this; + params.add("BY"); + params.add(pattern); + return this; } - public String[] getParams() { - return params.toArray(new String[params.size()]); + public Collection getParams() { + return Collections.unmodifiableCollection(params); } -} + + public SortingParams desc() { + params.add("DESC"); + return this; + } + + public SortingParams asc() { + params.add("ASC"); + return this; + } + + public SortingParams limit(int start, int count) { + params.add("LIMIT"); + params.add(String.valueOf(start)); + params.add(String.valueOf(count)); + return this; + } + + public SortingParams alpha() { + params.add("ALPHA"); + return this; + } +} \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java index 251d2f6..59508c8 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java @@ -20,6 +20,7 @@ public class SortingCommandsTest extends Assert { public void setUp() throws Exception { jedis = new Jedis("localhost"); jedis.connect(); + jedis.flushDB(); } @After @@ -45,20 +46,58 @@ public class SortingCommandsTest extends Assert { } @Test - public void sortBy() throws JedisException { + public void sortDesc() throws JedisException { jedis.lpush("foo", "3"); jedis.lpush("foo", "2"); jedis.lpush("foo", "1"); SortingParams sp = new SortingParams(); - sp.by("bar_*"); + sp.desc(); List result = jedis.sort("foo", sp); List expected = new ArrayList(); - expected.add("foo_1"); - expected.add("foo_2"); - expected.add("foo_3"); + expected.add("3"); + expected.add("2"); + expected.add("1"); + + assertEquals(expected, result); + } + + @Test + public void sortLimit() throws JedisException { + for (int n = 10; n > 0; n--) { + jedis.lpush("foo", String.valueOf(n)); + } + + SortingParams sp = new SortingParams(); + sp.limit(0, 3); + + List result = jedis.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("3"); + + assertEquals(expected, result); + } + + @Test + public void sortAlpha() throws JedisException { + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); + + SortingParams sp = new SortingParams(); + sp.alpha(); + + List result = jedis.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("10"); + expected.add("2"); assertEquals(expected, result); }