Skip to content

Commit

Permalink
Support JSON.RESP command
Browse files Browse the repository at this point in the history
  • Loading branch information
sazzad16 committed Jun 29, 2022
1 parent bf0d815 commit 67902a5
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 15 deletions.
42 changes: 28 additions & 14 deletions src/main/java/redis/clients/jedis/BuilderFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -362,20 +362,6 @@ public String toString() {
}
};

public static final Builder<List<List<String>>> STRING_LIST_LIST = new Builder<List<List<String>>>() {
@Override
@SuppressWarnings("unchecked")
public List<List<String>> build(Object data) {
if (null == data) return null;
return ((List<Object>) data).stream().map(STRING_LIST::build).collect(Collectors.toList());
}

@Override
public String toString() {
return "List<List<String>>";
}
};

public static final Builder<KeyedListElement> KEYED_LIST_ELEMENT = new Builder<KeyedListElement>() {
@Override
@SuppressWarnings("unchecked")
Expand Down Expand Up @@ -1620,6 +1606,34 @@ public List<JSONArray> build(Object data) {
}
};

public static final Builder<List<List<String>>> STRING_LIST_LIST = new Builder<List<List<String>>>() {
@Override
@SuppressWarnings("unchecked")
public List<List<String>> build(Object data) {
if (null == data) return null;
return ((List<Object>) data).stream().map(STRING_LIST::build).collect(Collectors.toList());
}

@Override
public String toString() {
return "List<List<String>>";
}
};

public static final Builder<List<List<Object>>> ENCODED_OBJECT_LIST_LIST = new Builder<List<List<Object>>>() {
@Override
@SuppressWarnings("unchecked")
public List<List<Object>> build(Object data) {
if (null == data) return null;
return ((List<Object>) data).stream().map(ENCODED_OBJECT_LIST::build).collect(Collectors.toList());
}

@Override
public String toString() {
return "List<List<Object>>";
}
};

public static final Builder<AggregationResult> SEARCH_AGGREGATION_RESULT = new Builder<AggregationResult>() {
@Override
public AggregationResult build(Object data) {
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/redis/clients/jedis/CommandObjects.java
Original file line number Diff line number Diff line change
Expand Up @@ -3497,6 +3497,18 @@ public final CommandObject<Long> jsonDebugMemory(String key, Path path) {
public final CommandObject<List<Long>> jsonDebugMemory(String key, Path2 path) {
return new CommandObject<>(commandArguments(JsonCommand.DEBUG).add("MEMORY").key(key).add(path), BuilderFactory.LONG_LIST);
}

public final CommandObject<List<Object>> jsonResp(String key) {
return new CommandObject<>(commandArguments(JsonCommand.RESP).key(key), BuilderFactory.ENCODED_OBJECT_LIST);
}

public final CommandObject<List<Object>> jsonResp(String key, Path path) {
return new CommandObject<>(commandArguments(JsonCommand.RESP).key(key).add(path), BuilderFactory.ENCODED_OBJECT_LIST);
}

public final CommandObject<List<List<Object>>> jsonResp(String key, Path2 path) {
return new CommandObject<>(commandArguments(JsonCommand.RESP).key(key).add(path), BuilderFactory.ENCODED_OBJECT_LIST_LIST);
}
// RedisJSON commands

// RedisTimeSeries commands
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/redis/clients/jedis/UnifiedJedis.java
Original file line number Diff line number Diff line change
Expand Up @@ -3923,6 +3923,21 @@ public long jsonDebugMemory(String key, Path path) {
public List<Long> jsonDebugMemory(String key, Path2 path) {
return executeCommand(commandObjects.jsonDebugMemory(key, path));
}

@Override
public List<Object> jsonResp(String key) {
return executeCommand(commandObjects.jsonResp(key));
}

@Override
public List<Object> jsonResp(String key, Path path) {
return executeCommand(commandObjects.jsonResp(key, path));
}

@Override
public List<List<Object>> jsonResp(String key, Path2 path) {
return executeCommand(commandObjects.jsonResp(key, path));
}
// RedisJSON commands

// RedisTimeSeries commands
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/redis/clients/jedis/json/JsonProtocol.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public enum JsonCommand implements ProtocolCommand {
TOGGLE("JSON.TOGGLE"),
OBJKEYS("JSON.OBJKEYS"),
OBJLEN("JSON.OBJLEN"),
DEBUG("JSON.DEBUG");
DEBUG("JSON.DEBUG"),
RESP("JSON.RESP");

private final byte[] raw;

Expand Down
6 changes: 6 additions & 0 deletions src/main/java/redis/clients/jedis/json/RedisJsonCommands.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,10 @@ default <T> List<T> jsonMGet(Class<T> clazz, String... keys) {
long jsonDebugMemory(String key, Path path);

List<Long> jsonDebugMemory(String key, Path2 path);

List<Object> jsonResp(String key);

List<Object> jsonResp(String key, Path path);

List<List<Object>> jsonResp(String key, Path2 path);
}
Original file line number Diff line number Diff line change
Expand Up @@ -460,4 +460,34 @@ public void plainString() {
assertEquals("OK", client.jsonSetWithPlainString("plain", ROOT_PATH, json));
assertEquals(json, client.jsonGetAsPlainString("plain", ROOT_PATH));
}

@Test
public void resp() {
assertNull(client.jsonResp("resp"));
assertNull(client.jsonResp("resp", ROOT_PATH));

String json = "{\"foo\": {\"hello\":\"world\"}, \"bar\": [null, 3, 2.5, true]}";
client.jsonSetWithPlainString("resp", ROOT_PATH, json);

List<Object> resp = client.jsonResp("resp");
assertEquals("{", resp.get(0));

assertEquals("foo", resp.get(1));
assertEquals(Arrays.asList("{", "hello", "world"), resp.get(2));

assertEquals("bar", resp.get(3));
List<Object> arr = (List<Object>) resp.get(4);
assertEquals("[", arr.get(0));
assertNull(arr.get(1));
assertEquals(Long.valueOf(3), arr.get(2));
assertEquals("2.5", arr.get(3));
assertEquals("true", arr.get(4));

arr = client.jsonResp("resp", Path.of(".bar"));
assertEquals("[", arr.get(0));
assertNull(arr.get(1));
assertEquals(Long.valueOf(3), arr.get(2));
assertEquals("2.5", arr.get(3));
assertEquals("true", arr.get(4));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,31 @@ public void debugMemory() {
assertEquals(1, client.jsonDebugMemory("json", Path2.of("$..bar")).size());
}

@Test
public void resp() {
assertNull(client.jsonResp("resp", ROOT_PATH));

String json = "{\"foo\": {\"hello\":\"world\"}, \"bar\": [null, 3, 2.5, true]}";
client.jsonSet("resp", ROOT_PATH, json);

List<List<Object>> fullResp = client.jsonResp("resp", ROOT_PATH);
assertEquals(1, fullResp.size());

List<Object> resp = fullResp.get(0);
assertEquals("{", resp.get(0));

assertEquals("foo", resp.get(1));
assertEquals(Arrays.asList("{", "hello", "world"), resp.get(2));

assertEquals("bar", resp.get(3));
List<Object> arr = (List<Object>) resp.get(4);
assertEquals("[", arr.get(0));
assertNull(arr.get(1));
assertEquals(Long.valueOf(3), arr.get(2));
assertEquals("2.5", arr.get(3));
assertEquals("true", arr.get(4));
}

private void assertJsonArrayEquals(JSONArray a, Object _b) {
if (!(_b instanceof JSONArray)) {
fail("Actual value is not JSONArray.");
Expand Down

0 comments on commit 67902a5

Please sign in to comment.