From dea8c12d1eb23a694dbf60c26fe304d6cce9b971 Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Tue, 3 Aug 2010 01:20:01 -0300 Subject: [PATCH] Implemented all the sorting parameters --- README.md | 8 ++-- src/main/java/redis/clients/jedis/Client.java | 14 ++++++ src/main/java/redis/clients/jedis/Jedis.java | 11 +++++ .../redis/clients/jedis/SortingParams.java | 8 ++++ .../tests/commands/SortingCommandsTest.java | 48 +++++++++++++++++++ 5 files changed, 85 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e9df416..e16978b 100644 --- a/README.md +++ b/README.md @@ -7,22 +7,22 @@ Jedis was conceived to be EASY to use and FULLY COMPATIBLE with the latest versi Jedis is a WORK IN PROGRESS. ## What's still missing? -- Sorting - Publish/Subscribe - Persistence control commands - Remote server control commands -- The AUTH, SORT, BRPOP, ZRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE commands +- The AUTH, BRPOP, ZRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE commands But stay close because things are going fast and all this will be implemented soon! ## Ok.. so what's already done? +- Sorting - Connection handling (not AUTH) - Commands operating on all the kind of values - Commands operating on string values - Commands operating on hashes -- Commands operating on lists (not SORT, BRPOP) +- Commands operating on lists (not BRPOP) - Commands operating on sets -- Commands operating on sorted sets (not SORT, ZRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE) +- Commands operating on sorted sets (not ZRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE) - Transactions ## How do I use it? diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index d653702..6ba24d7 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -399,4 +399,18 @@ public class Client extends Connection { public void blpop(String[] args) throws JedisException { sendCommand("BLPOP", args); } + + public void sort(String key, SortingParams sortingParameters, String dstkey) + throws JedisException { + List args = new ArrayList(); + args.add(key); + args.addAll(sortingParameters.getParams()); + args.add("STORE"); + args.add(dstkey); + sendCommand("SORT", args.toArray(new String[args.size()])); + } + + public void sort(String key, String dstkey) throws JedisException { + sendCommand("SORT", key, "STORE", dstkey); + } } diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index c007639..653ea75 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -519,4 +519,15 @@ public class Jedis { client.blpop(args.toArray(new String[args.size()])); return client.getMultiBulkReply(); } + + public int sort(String key, SortingParams sortingParameters, String dstkey) + throws JedisException { + client.sort(key, sortingParameters, dstkey); + return client.getIntegerReply(); + } + + public int sort(String key, String dstkey) throws JedisException { + client.sort(key, dstkey); + return client.getIntegerReply(); + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/SortingParams.java b/src/test/java/redis/clients/jedis/SortingParams.java index 43ab9cc..35f3712 100644 --- a/src/test/java/redis/clients/jedis/SortingParams.java +++ b/src/test/java/redis/clients/jedis/SortingParams.java @@ -39,4 +39,12 @@ public class SortingParams { params.add("ALPHA"); return this; } + + public SortingParams get(String... patterns) { + for (String pattern : patterns) { + params.add("GET"); + params.add(pattern); + } + 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 6afba8f..765594a 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SortingCommandsTest.java @@ -124,4 +124,52 @@ public class SortingCommandsTest extends Assert { assertEquals(expected, result); } + + @Test + public void sortGet() throws JedisException { + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); + + jedis.set("bar1", "bar1"); + jedis.set("bar2", "bar2"); + jedis.set("bar10", "bar10"); + + jedis.set("car1", "car1"); + jedis.set("car2", "car2"); + jedis.set("car10", "car10"); + + SortingParams sp = new SortingParams(); + sp.get("car*", "bar*"); + + List result = jedis.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("car1"); + expected.add("bar1"); + expected.add("car2"); + expected.add("bar2"); + expected.add("car10"); + expected.add("bar10"); + + assertEquals(expected, result); + } + + @Test + public void sortStore() throws JedisException { + jedis.lpush("foo", "1"); + jedis.lpush("foo", "2"); + jedis.lpush("foo", "10"); + + int result = jedis.sort("foo", "result"); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("10"); + + assertEquals(3, result); + assertEquals(expected, jedis.lrange("result", 0, 1000)); + } + } \ No newline at end of file