diff --git a/src/main/java/redis/clients/jedis/BinaryTransaction.java b/src/main/java/redis/clients/jedis/BinaryTransaction.java index 9fba829..6c77741 100644 --- a/src/main/java/redis/clients/jedis/BinaryTransaction.java +++ b/src/main/java/redis/clients/jedis/BinaryTransaction.java @@ -91,9 +91,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response get(byte[] key) { + public Response get(byte[] key) { client.get(key); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response getSet(byte[] key, byte[] value) { @@ -111,9 +111,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.BOOLEAN); } - public Response hget(byte[] key, byte[] field) { + public Response hget(byte[] key, byte[] field) { client.hget(key, field); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response> hgetAll(byte[] key) { @@ -126,9 +126,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> hkeys(byte[] key) { + public Response> hkeys(byte[] key) { client.hkeys(key); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response hlen(byte[] key) { @@ -136,14 +136,14 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> hmget(byte[] key, byte[]... fields) { + public Response> hmget(byte[] key, byte[]... fields) { client.hmget(key, fields); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - public Response hmset(byte[] key, Map hash) { + public Response hmset(byte[] key, Map hash) { client.hmset(key, hash); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response hset(byte[] key, byte[] field, byte[] value) { @@ -156,9 +156,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> hvals(byte[] key) { + public Response> hvals(byte[] key) { client.hvals(key); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response incr(byte[] key) { @@ -171,14 +171,14 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> keys(byte[] pattern) { + public Response> keys(byte[] pattern) { client.keys(pattern); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } - public Response lindex(byte[] key, int index) { + public Response lindex(byte[] key, long index) { client.lindex(key, index); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response linsert(byte[] key, LIST_POSITION where, @@ -192,9 +192,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response lpop(byte[] key) { + public Response lpop(byte[] key) { client.lpop(key); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response lpush(byte[] key, byte[] string) { @@ -207,9 +207,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> lrange(byte[] key, long start, int end) { + public Response> lrange(byte[] key, long start, long end) { client.lrange(key, start, end); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response lrem(byte[] key, long count, byte[] value) { @@ -227,9 +227,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.STRING); } - public Response> mget(byte[]... keys) { + public Response> mget(byte[]... keys) { client.mget(keys); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } public Response move(byte[] key, int dbIndex) { @@ -262,14 +262,14 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response rpop(byte[] key) { + public Response rpop(byte[] key) { client.rpop(key); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } - public Response rpoplpush(byte[] srckey, byte[] dstkey) { + public Response rpoplpush(byte[] srckey, byte[] dstkey) { client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response rpush(byte[] key, byte[] string) { @@ -292,9 +292,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> sdiff(byte[]... keys) { + public Response> sdiff(byte[]... keys) { client.sdiff(keys); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sdiffstore(byte[] dstkey, byte[]... keys) { @@ -302,9 +302,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response set(byte[] key, byte[] value) { + public Response set(byte[] key, byte[] value) { client.set(key, value); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response setbit(String key, long offset, boolean value) { @@ -322,9 +322,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> sinter(byte[]... keys) { + public Response> sinter(byte[]... keys) { client.sinter(keys); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sinterstore(byte[] dstkey, byte[]... keys) { @@ -337,9 +337,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.BOOLEAN); } - public Response> smembers(byte[] key) { + public Response> smembers(byte[] key) { client.smembers(key); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response smove(byte[] srckey, byte[] dstkey, byte[] member) { @@ -347,36 +347,36 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> sort(byte[] key) { + public Response> sort(byte[] key) { client.sort(key); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - public Response> sort(byte[] key, + public Response> sort(byte[] key, SortingParams sortingParameters) { client.sort(key, sortingParameters); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - public Response> sort(byte[] key, + public Response> sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) { client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - public Response> sort(byte[] key, byte[] dstkey) { + public Response> sort(byte[] key, byte[] dstkey) { client.sort(key, dstkey); - return getResponse(BuilderFactory.STRING_LIST); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); } - public Response spop(byte[] key) { + public Response spop(byte[] key) { client.spop(key); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } - public Response srandmember(byte[] key) { + public Response srandmember(byte[] key) { client.srandmember(key); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } public Response srem(byte[] key, byte[] member) { @@ -389,14 +389,15 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response substr(byte[] key, int start, int end) { + public Response substr(byte[] key, int start, int end) { // what's + // that? client.substr(key, start, end); return getResponse(BuilderFactory.STRING); } - public Response> sunion(byte[]... keys) { + public Response> sunion(byte[]... keys) { client.sunion(keys); - return getResponse(BuilderFactory.STRING_SET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response sunionstore(byte[] dstkey, byte[]... keys) { @@ -450,44 +451,44 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> zrange(byte[] key, int start, int end) { + public Response> zrange(byte[] key, int start, int end) { client.zrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } - public Response> zrangeByScore(byte[] key, double min, + public Response> zrangeByScore(byte[] key, double min, double max) { client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } - public Response> zrangeByScore(byte[] key, byte[] min, + public Response> zrangeByScore(byte[] key, byte[] min, byte[] max) { client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } - public Response> zrangeByScore(byte[] key, double min, + public Response> zrangeByScore(byte[] key, double min, double max, int offset, int count) { client.zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrangeByScoreWithScores(byte[] key, double min, double max) { client.zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response> zrangeByScoreWithScores(byte[] key, double min, double max, int offset, int count) { client.zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response> zrangeWithScores(byte[] key, int start, int end) { client.zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response zrank(byte[] key, byte[] member) { @@ -510,15 +511,15 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response> zrevrange(byte[] key, int start, int end) { + public Response> zrevrange(byte[] key, int start, int end) { client.zrevrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); } public Response> zrevrangeWithScores(byte[] key, int start, int end) { client.zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); } public Response zrevrank(byte[] key, byte[] member) { @@ -542,9 +543,9 @@ public class BinaryTransaction extends Queable { return getResponse(BuilderFactory.LONG); } - public Response brpoplpush(byte[] source, byte[] destination, + public Response brpoplpush(byte[] source, byte[] destination, int timeout) { client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.STRING); + return getResponse(BuilderFactory.BYTE_ARRAY); } -} \ No newline at end of file +} diff --git a/src/main/java/redis/clients/jedis/BuilderFactory.java b/src/main/java/redis/clients/jedis/BuilderFactory.java index fcbcd5c..998ee78 100644 --- a/src/main/java/redis/clients/jedis/BuilderFactory.java +++ b/src/main/java/redis/clients/jedis/BuilderFactory.java @@ -30,6 +30,16 @@ public class BuilderFactory { return "boolean"; } }; + public static final Builder BYTE_ARRAY = new Builder() { + public byte[] build(Object data) { + return ((byte[]) data); // deleted == 1 + } + + public String toString() { + return "byte[]"; + } + }; + public static final Builder LONG = new Builder() { public Long build(Object data) { return (Long) data; @@ -115,6 +125,39 @@ public class BuilderFactory { } }; + + public static final Builder> BYTE_ARRAY_LIST = new Builder>() { + @SuppressWarnings("unchecked") + public List build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + + return l; + } + + public String toString() { + return "List"; + } + }; + + public static final Builder> BYTE_ARRAY_ZSET = new Builder>() { + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l); + return result; + } + + public String toString() { + return "ZSet"; + } + }; + public static final Builder> STRING_ZSET = new Builder>() { @SuppressWarnings("unchecked") public Set build(Object data) { @@ -138,6 +181,7 @@ public class BuilderFactory { } }; + public static final Builder> TUPLE_ZSET = new Builder>() { @SuppressWarnings("unchecked") public Set build(Object data) { @@ -160,4 +204,27 @@ public class BuilderFactory { }; + public static final Builder> TUPLE_ZSET_BINARY = new Builder>() { + @SuppressWarnings("unchecked") + public Set build(Object data) { + if (null == data) { + return null; + } + List l = (List) data; + final Set result = new LinkedHashSet(l.size()); + Iterator iterator = l.iterator(); + while (iterator.hasNext()) { + result.add(new Tuple(iterator.next(), Double + .valueOf(SafeEncoder.encode(iterator.next())))); + } + + return result; + + } + + public String toString() { + return "ZSet"; + } + }; + } diff --git a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java index fce4624..f7d8d4d 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java @@ -170,7 +170,7 @@ public class TransactionCommandsTest extends JedisCommandTestBase { t.set(bmykey, bval); resp = t.exec(); assertEquals(1, resp.size()); - assertEquals("OK", resp.get(0)); + assertArrayEquals("OK".getBytes(), (byte[]) resp.get(0)); } @Test(expected = JedisDataException.class) @@ -209,6 +209,29 @@ public class TransactionCommandsTest extends JedisCommandTestBase { assertEquals("foo", set.get()); } + @Test + public void transactionResponseBinary() { + jedis.set("string", "foo"); + jedis.lpush("list", "foo"); + jedis.hset("hash", "foo", "bar"); + jedis.zadd("zset", 1, "foo"); + jedis.sadd("set", "foo"); + + Transaction t = jedis.multi(); + Response string = t.get("string".getBytes()); + Response list = t.lpop("list".getBytes()); + Response hash = t.hget("hash".getBytes(), "foo".getBytes()); + Response> zset = t.zrange("zset".getBytes(), 0, -1); + Response set = t.spop("set".getBytes()); + t.exec(); + + assertArrayEquals("foo".getBytes(), string.get()); + assertArrayEquals("foo".getBytes(), list.get()); + assertArrayEquals("bar".getBytes(), hash.get()); + assertArrayEquals("foo".getBytes(), zset.get().iterator().next()); + assertArrayEquals("foo".getBytes(), set.get()); + } + @Test(expected = JedisDataException.class) public void transactionResponseWithinPipeline() { jedis.set("string", "foo");