Skip to content

Commit a26f914

Browse files
Java: Add binary version of ZRANK WITHSCORE (valkey-io#2896)
* Java: Add binary version of ZRANK WITHSCORE --------- Signed-off-by: James Xin <[email protected]>
1 parent abec885 commit a26f914

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* Go: Add `SScan` and `SMove` ([#2789](https://github.com/valkey-io/valkey-glide/issues/2789))
1212
* Go: Add `ZADD` ([#2813](https://github.com/valkey-io/valkey-glide/issues/2813))
1313
* Go: Add `ZPopMin` and `ZPopMax` ([#2850](https://github.com/valkey-io/valkey-glide/pull/2850))
14+
* Java: Add binary version of `ZRANK WITHSCORE` ([#2896](https://github.com/valkey-io/valkey-glide/pull/2896))
1415

1516
#### Breaking Changes
1617

java/client/src/main/java/glide/api/BaseClient.java

+9
Original file line numberDiff line numberDiff line change
@@ -2207,6 +2207,15 @@ public CompletableFuture<Object[]> zrankWithScore(@NonNull String key, @NonNull
22072207
ZRank, new String[] {key, member, WITH_SCORE_VALKEY_API}, this::handleArrayOrNullResponse);
22082208
}
22092209

2210+
@Override
2211+
public CompletableFuture<Object[]> zrankWithScore(
2212+
@NonNull GlideString key, @NonNull GlideString member) {
2213+
return commandManager.submitNewCommand(
2214+
ZRank,
2215+
new GlideString[] {key, member, gs(WITH_SCORE_VALKEY_API)},
2216+
this::handleArrayOrNullResponse);
2217+
}
2218+
22102219
@Override
22112220
public CompletableFuture<Long> zrevrank(@NonNull String key, @NonNull String member) {
22122221
return commandManager.submitNewCommand(

java/client/src/main/java/glide/api/commands/SortedSetBaseCommands.java

+22
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,28 @@ CompletableFuture<Long> zrangestore(
11631163
*/
11641164
CompletableFuture<Object[]> zrankWithScore(String key, String member);
11651165

1166+
/**
1167+
* Returns the rank of <code>member</code> in the sorted set stored at <code>key</code> with its
1168+
* score, where scores are ordered from the lowest to highest, starting from <code>0</code>.<br>
1169+
*
1170+
* @see <a href="https://valkey.io/commands/zrank/">valkey.io</a> for more details.
1171+
* @param key The key of the sorted set.
1172+
* @param member The member whose rank is to be retrieved.
1173+
* @return An array containing the rank (as <code>Long</code>) and score (as <code>Double</code>)
1174+
* of <code>member</code> in the sorted set.<br>
1175+
* If <code>key</code> doesn't exist, or if <code>member</code> is not present in the set,
1176+
* <code>null</code> will be returned.
1177+
* @example
1178+
* <pre>{@code
1179+
* Object[] result1 = client.zrankWithScore(gs("mySortedSet"), gs("member2")).get();
1180+
* assert ((Long) result1[0]) == 1L && ((Double) result1[1]) == 6.0; // Indicates that "member2" with score 6.0 has the second-lowest score in the sorted set "mySortedSet".
1181+
*
1182+
* Object[] result2 = client.zrankWithScore(gs("mySortedSet"), gs("nonExistingMember")).get();
1183+
* assert result2 == null; // Indicates that "nonExistingMember" is not present in the sorted set "mySortedSet".
1184+
* }</pre>
1185+
*/
1186+
CompletableFuture<Object[]> zrankWithScore(GlideString key, GlideString member);
1187+
11661188
/**
11671189
* Returns the rank of <code>member</code> in the sorted set stored at <code>key</code>, where
11681190
* scores are ordered from the highest to lowest, starting from <code>0</code>.<br>

java/client/src/test/java/glide/api/GlideClientTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -5652,6 +5652,31 @@ public void zrankWithScore_returns_success() {
56525652
assertEquals(value, payload);
56535653
}
56545654

5655+
@SneakyThrows
5656+
@Test
5657+
public void zrankWithScore_binary_returns_success() {
5658+
// setup
5659+
GlideString key = gs("testKey");
5660+
GlideString member = gs("testMember");
5661+
GlideString[] arguments = new GlideString[] {key, member, gs(WITH_SCORE_VALKEY_API)};
5662+
Object[] value = new Object[] {1, 6.0};
5663+
5664+
CompletableFuture<Object[]> testResponse = new CompletableFuture<>();
5665+
testResponse.complete(value);
5666+
5667+
// match on protobuf request
5668+
when(commandManager.<Object[]>submitNewCommand(eq(ZRank), eq(arguments), any()))
5669+
.thenReturn(testResponse);
5670+
5671+
// exercise
5672+
CompletableFuture<Object[]> response = service.zrankWithScore(key, member);
5673+
Object[] payload = response.get();
5674+
5675+
// verify
5676+
assertEquals(testResponse, response);
5677+
assertEquals(value, payload);
5678+
}
5679+
56555680
@SneakyThrows
56565681
@Test
56575682
public void zrevrank_returns_success() {

java/integTest/src/test/java/glide/SharedCommandTests.java

+1
Original file line numberDiff line numberDiff line change
@@ -3924,6 +3924,7 @@ public void zrank(BaseClient client) {
39243924

39253925
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.2.0")) {
39263926
assertArrayEquals(new Object[] {0L, 1.5}, client.zrankWithScore(key, "one").get());
3927+
assertArrayEquals(new Object[] {0L, 1.5}, client.zrankWithScore(gs(key), gs("one")).get());
39273928
assertNull(client.zrankWithScore(key, "nonExistingMember").get());
39283929
assertNull(client.zrankWithScore("nonExistingKey", "nonExistingMember").get());
39293930
}

0 commit comments

Comments
 (0)