diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..9a874b5 Binary files /dev/null and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..ca5d0e6 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index aa5fbad..79efcaf 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -719,30 +719,25 @@ public class BinaryClient extends Connection { super.disconnect(); } - private void sendEvalCommand(Command command, byte[] script, List keys, List args){ - int keysSize = keys.size(); - int argsSize = args.size(); + private void sendEvalCommand(Command command, byte[] script, byte[] keyCount, byte[][] params){ - final byte[][] allArgs = new byte[keysSize + argsSize + 2][]; + final byte[][] allArgs = new byte[params.length + 2][]; allArgs[0] = script; - allArgs[1] =toByteArray(keysSize); + allArgs[1] = keyCount; - for(int i=0;i keys, List args){ - sendEvalCommand(EVAL, script, keys, args ); + public void eval(byte[] script, byte[] keyCount, byte[][] params){ + sendEvalCommand(EVAL, script, keyCount, params ); } - public void evalsha(byte[] sha1, List keys, List args){ - sendEvalCommand(EVALSHA, sha1, keys, args); + public void evalsha(byte[] sha1, byte[] keyCount, byte[][] params){ + sendEvalCommand(EVALSHA, sha1, keyCount, params); } public void scriptFlush(){ diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index f0b9d73..044ff56 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -16,6 +16,7 @@ import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.JedisByteHashMap; import redis.clients.util.SafeEncoder; +import static redis.clients.jedis.Protocol.toByteArray; public class BinaryJedis implements BinaryJedisCommands { protected Client client = null; @@ -3018,18 +3019,25 @@ public class BinaryJedis implements BinaryJedisCommands { */ public Object eval(byte[] script, List keys, List args) { client.setTimeoutInfinite(); - client.eval(script, keys, args); + client.eval(script, toByteArray(keys.size()), getParams(keys, args)); return client.getOne(); } - - /** - * Evaluates scripts using the Lua interpreter built into Redis starting from version 2.6.0. - *

- * - * @return Script result - */ - public Object eval(byte[] script, List keys) { - return eval(script,keys, new ArrayList()); + private byte[][] getParams(List keys, List args){ + int keyCount = keys.size(); + byte[][] params = new byte[keyCount + args.size()][]; + + for(int i=0;i keys, String... args) { - List k = new ArrayList(); - for(String key:keys){ - k.add(SafeEncoder.encode(key)); - } - List a = new ArrayList(); - for(String arg:args){ - a.add(SafeEncoder.encode(arg)); - } - eval(SafeEncoder.encode(script),k,a); + private byte[][] getByteParams(String... params){ + byte[][] p = new byte[params.length][]; + for(int i=0;i keys, String... args) { - List k = new ArrayList(); - for(String key:keys){ - k.add(SafeEncoder.encode(key)); - } - List a = new ArrayList(); - for(String arg:args){ - a.add(SafeEncoder.encode(arg)); - } - evalsha(SafeEncoder.encode(sha1),k,a); + + public void evalsha(String sha1, int keyCount, String... params) { + evalsha(SafeEncoder.encode(sha1),toByteArray(keyCount), getByteParams(params)); } public void scriptExists(String... sha1){ diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 78561a5..226ff65 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2693,19 +2693,38 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getStatusCodeReply(); } - public Object eval(String script, String... keys) { - List s = new ArrayList(keys.length); - for(String key : keys) - s.add(key); - - return eval(script, s); - } - - public Object eval(String script, List keys, String... args) { - client.setTimeoutInfinite(); - client.eval(script, keys, args); + public Object eval(String script, int keyCount, String... params) { + client.setTimeoutInfinite(); + client.eval(script, keyCount, params); return getEvalResult(); + } + + private String[] getParams(List keys, List args){ + int keyCount = keys.size(); + int argCount = args.size(); + + String[] params = new String[keyCount + args.size()]; + + for(int i=0;i keys, List args) { + return eval(script, keys.size(), getParams(keys, args)); + } + + public Object eval(String script) { + return eval(script,0); + } + + public Object evalsha(String script) { + return evalsha(script,0); } private Object getEvalResult(){ @@ -2726,17 +2745,13 @@ public class Jedis extends BinaryJedis implements JedisCommands { return result; } - public Object evalsha(String sha1, String... keys) { - List s = new ArrayList(keys.length); - for(String key : keys) - s.add(key); - - return evalsha(sha1, s); + public Object evalsha(String sha1, List keys, List args) { + return evalsha(sha1, keys.size(), getParams(keys, args)); } - public Object evalsha(String sha1, List keys, String... args) { + public Object evalsha(String sha1, int keyCount, String... params) { checkIsInMulti(); - client.evalsha(sha1, keys, args); + client.evalsha(sha1, keyCount, params); return getEvalResult(); } diff --git a/src/test/.DS_Store b/src/test/.DS_Store new file mode 100644 index 0000000..55c1fcb Binary files /dev/null and b/src/test/.DS_Store differ diff --git a/src/test/java/.DS_Store b/src/test/java/.DS_Store new file mode 100644 index 0000000..d209edf Binary files /dev/null and b/src/test/java/.DS_Store differ diff --git a/src/test/java/redis/.DS_Store b/src/test/java/redis/.DS_Store new file mode 100644 index 0000000..7debc59 Binary files /dev/null and b/src/test/java/redis/.DS_Store differ diff --git a/src/test/java/redis/clients/.DS_Store b/src/test/java/redis/clients/.DS_Store new file mode 100644 index 0000000..20845bd Binary files /dev/null and b/src/test/java/redis/clients/.DS_Store differ diff --git a/src/test/java/redis/clients/jedis/.DS_Store b/src/test/java/redis/clients/jedis/.DS_Store new file mode 100644 index 0000000..0b9a44b Binary files /dev/null and b/src/test/java/redis/clients/jedis/.DS_Store differ diff --git a/src/test/java/redis/clients/jedis/tests/.DS_Store b/src/test/java/redis/clients/jedis/tests/.DS_Store new file mode 100644 index 0000000..534c092 Binary files /dev/null and b/src/test/java/redis/clients/jedis/tests/.DS_Store differ diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index 78825a9..acee2cf 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -19,7 +19,11 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { keys.add("key1"); keys.add("key2"); - List response = (List)jedis.eval(script, keys, "first", "second" ); + List args = new ArrayList(); + args.add("first"); + args.add("second"); + + List response = (List)jedis.eval(script, keys, args ); assertEquals(4, response.size()); assertEquals("key1", response.get(0)); @@ -34,7 +38,10 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { List keys = new ArrayList(); keys.add("key1"); - String response = (String)jedis.eval(script, keys); + List args = new ArrayList(); + args.add("first"); + + String response = (String)jedis.eval(script, keys, args); assertEquals("key1", response); } @@ -45,7 +52,7 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { List keys = new ArrayList(); keys.add("key1"); - Long response = (Long)jedis.eval(script, keys); + Long response = (Long)jedis.eval(script, keys, new ArrayList()); assertEquals(new Long(2), response); } @@ -53,8 +60,9 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { @Test public void evalNoArgs() { String script = "return KEYS[1]"; - - String response = (String)jedis.eval(script, "key1"); + List keys = new ArrayList(); + keys.add("key1"); + String response = (String)jedis.eval(script, keys, new ArrayList()); assertEquals("key1", response); }