Merge pull request #528 from jideji/eval-with-nested-lists-and-longs
Eval with nested lists and longs
This commit is contained in:
@@ -2797,17 +2797,18 @@ public class Jedis extends BinaryJedis implements JedisCommands,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Object getEvalResult() {
|
private Object getEvalResult() {
|
||||||
Object result = client.getOne();
|
return evalResult(client.getOne());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object evalResult(Object result) {
|
||||||
if (result instanceof byte[])
|
if (result instanceof byte[])
|
||||||
return SafeEncoder.encode((byte[]) result);
|
return SafeEncoder.encode((byte[]) result);
|
||||||
|
|
||||||
if (result instanceof List<?>) {
|
if (result instanceof List<?>) {
|
||||||
List<?> list = (List<?>) result;
|
List<?> list = (List<?>) result;
|
||||||
List<String> listResult = new ArrayList<String>(list.size());
|
List<Object> listResult = new ArrayList<Object>(list.size());
|
||||||
for (Object bin : list) {
|
for (Object bin : list) {
|
||||||
listResult.add((bin == null ? null : SafeEncoder
|
listResult.add(evalResult(bin));
|
||||||
.encode((byte[]) bin)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return listResult;
|
return listResult;
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
package redis.clients.jedis.tests.commands;
|
package redis.clients.jedis.tests.commands;
|
||||||
|
|
||||||
|
import org.hamcrest.CoreMatchers;
|
||||||
|
import org.hamcrest.Matcher;
|
||||||
|
import org.junit.Test;
|
||||||
|
import redis.clients.jedis.BinaryJedis;
|
||||||
|
import redis.clients.jedis.exceptions.JedisDataException;
|
||||||
|
import redis.clients.util.SafeEncoder;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.junit.Test;
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
|
||||||
import redis.clients.jedis.BinaryJedis;
|
|
||||||
import redis.clients.jedis.exceptions.JedisDataException;
|
|
||||||
import redis.clients.util.SafeEncoder;
|
|
||||||
|
|
||||||
public class ScriptingCommandsTest extends JedisCommandTestBase {
|
public class ScriptingCommandsTest extends JedisCommandTestBase {
|
||||||
|
|
||||||
@@ -88,6 +91,15 @@ public class ScriptingCommandsTest extends JedisCommandTestBase {
|
|||||||
assertEquals(new Long(2), response);
|
assertEquals(new Long(2), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void evalNestedLists() {
|
||||||
|
String script = "return { {KEYS[1]} , {2} }";
|
||||||
|
List<?> results = (List<?>) jedis.eval(script, 1, "key1");
|
||||||
|
|
||||||
|
assertThat((List<String>) results.get(0), listWithItem("key1"));
|
||||||
|
assertThat((List<Long>) results.get(1), listWithItem(2L));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void evalNoArgs() {
|
public void evalNoArgs() {
|
||||||
String script = "return KEYS[1]";
|
String script = "return KEYS[1]";
|
||||||
@@ -171,24 +183,25 @@ public class ScriptingCommandsTest extends JedisCommandTestBase {
|
|||||||
@Test
|
@Test
|
||||||
public void scriptEvalReturnNullValues() {
|
public void scriptEvalReturnNullValues() {
|
||||||
String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
|
String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
|
||||||
List<String> results = (List<String>) jedis.eval(script, 2, "key1",
|
List<String> results = (List<String>) jedis.eval(script, 2, "key1", "key2", "1", "2");
|
||||||
"key2", "1", "2");
|
assertEquals("key1", results.get(0));
|
||||||
assertEquals(results.get(0), "key1");
|
assertEquals("key2", results.get(1));
|
||||||
assertEquals(results.get(1), "key2");
|
assertEquals("1", results.get(2));
|
||||||
assertEquals(results.get(2), "1");
|
assertEquals("2", results.get(3));
|
||||||
assertEquals(results.get(3), "2");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptEvalShaReturnNullValues() {
|
public void scriptEvalShaReturnNullValues() {
|
||||||
String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
|
String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
|
||||||
String sha = jedis.scriptLoad(script);
|
String sha = jedis.scriptLoad(script);
|
||||||
List<String> results = (List<String>) jedis.evalsha(sha, 2, "key1",
|
List<String> results = (List<String>) jedis.evalsha(sha, 2, "key1", "key2", "1", "2");
|
||||||
"key2", "1", "2");
|
assertEquals("key1", results.get(0));
|
||||||
assertEquals(results.get(0), "key1");
|
assertEquals("key2", results.get(1));
|
||||||
assertEquals(results.get(1), "key2");
|
assertEquals("1", results.get(2));
|
||||||
assertEquals(results.get(2), "1");
|
assertEquals("2", results.get(3));
|
||||||
assertEquals(results.get(3), "2");
|
}
|
||||||
|
|
||||||
|
private <T> Matcher<Iterable<? super T>> listWithItem(T expected) {
|
||||||
|
return CoreMatchers.<T>hasItem(equalTo(expected));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user