This commit is contained in:
Hisham Mardam-Bey
2013-08-21 20:57:08 -04:00
4 changed files with 98 additions and 2 deletions

View File

@@ -2755,7 +2755,7 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand
client.rollbackTimeout();
}
private String[] getParams(List<String> keys, List<String> args) {
protected static String[] getParams(List<String> keys, List<String> args) {
int keyCount = keys.size();
int argCount = args.size();

View File

@@ -1159,4 +1159,33 @@ abstract class PipelineBase extends Queable implements
return getResponse(BuilderFactory.DOUBLE);
}
public Response<String> eval(String script) {
return this.eval(script, 0, new String[0]);
}
public Response<String> eval(String script, List<String> keys, List<String> args) {
String[] argv = Jedis.getParams(keys, args);
return this.eval(script, keys.size(), argv);
}
public Response<String> eval(String script, int numKeys, String[] argv) {
getClient(script).eval(script, numKeys, argv);
return getResponse(BuilderFactory.STRING);
}
public Response<String> evalsha(String script) {
return this.evalsha(script, 0, new String[0]);
}
public Response<String> evalsha(String sha1, List<String> keys, List<String> args) {
String[] argv = Jedis.getParams(keys, args);
return this.evalsha(sha1, keys.size(), argv);
}
public Response<String> evalsha(String sha1, int numKeys, String[] argv) {
getClient(sha1).evalsha(sha1, numKeys, argv);
return getResponse(BuilderFactory.STRING);
}
}

View File

@@ -242,4 +242,70 @@ public class PipeliningTest extends Assert {
assertEquals(new Long(-3), r3.get().get(1));
}
@Test
public void testEval() {
String script = "return 'success!'";
Pipeline p = jedis.pipelined();
Response<String> result = p.eval(script);
p.sync();
assertEquals("success!", result.get());
}
@Test
public void testEvalKeyAndArg() {
String key = "test";
String arg = "3";
String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])";
Pipeline p = jedis.pipelined();
p.set(key, "0");
Response<String> result0 = p.eval(script, Arrays.asList(key), Arrays.asList(arg));
p.incr(key);
Response<String> result1 = p.eval(script, Arrays.asList(key), Arrays.asList(arg));
Response<String> result2 = p.get(key);
p.sync();
assertNull(result0.get());
assertNull(result1.get());
assertEquals("13", result2.get());
}
@Test
public void testEvalsha() {
String script = "return 'success!'";
String sha1 = jedis.scriptLoad(script);
assertTrue(jedis.scriptExists(sha1));
Pipeline p = jedis.pipelined();
Response<String> result = p.evalsha(sha1);
p.sync();
assertEquals("success!", result.get());
}
@Test
public void testEvalshaKeyAndArg() {
String key = "test";
String arg = "3";
String script = "redis.call('INCRBY', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[1], ARGV[1])";
String sha1 = jedis.scriptLoad(script);
assertTrue(jedis.scriptExists(sha1));
Pipeline p = jedis.pipelined();
p.set(key, "0");
Response<String> result0 = p.evalsha(sha1, Arrays.asList(key), Arrays.asList(arg));
p.incr(key);
Response<String> result1 = p.evalsha(sha1, Arrays.asList(key), Arrays.asList(arg));
Response<String> result2 = p.get(key);
p.sync();
assertNull(result0.get());
assertNull(result1.get());
assertEquals("13", result2.get());
}
}