diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2021-04-15 09:26:10 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2021-04-15 18:49:46 +0300 |
commit | 28de62202e600725139e6cb2976a0f6d9547439f (patch) | |
tree | f28361e49ea14950ead6ab4a03dc8dc6db7d687e | |
parent | 6aa9c0899cab2210e9340bd710ee81db72d76d40 (diff) |
[WIP] Issue #1894
Add IDLE argument to XPENDING command
-rw-r--r-- | common.h | 1 | ||||
-rw-r--r-- | redis_commands.c | 18 |
2 files changed, 12 insertions, 7 deletions
@@ -680,6 +680,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_xpending, 0, 0, 2) ZEND_ARG_INFO(0, str_end) ZEND_ARG_INFO(0, i_count) ZEND_ARG_INFO(0, str_consumer) + ZEND_ARG_INFO(0, idle) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_xrange, 0, 0, 3) diff --git a/redis_commands.c b/redis_commands.c index 06e352cc..16bc8e8c 100644 --- a/redis_commands.c +++ b/redis_commands.c @@ -3619,7 +3619,7 @@ int redis_xadd_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, return SUCCESS; } -// XPENDING key group [start end count] [consumer] +// XPENDING key group [start end count [consumer] [idle]] int redis_xpending_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char **cmd, int *cmd_len, short *slot, void **ctx) { @@ -3627,13 +3627,13 @@ int redis_xpending_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *key, *group, *start = NULL, *end = NULL, *consumer = NULL; size_t keylen, grouplen, startlen, endlen, consumerlen; int argc; - zend_long count = -1; + zend_long count = -1, idle = 0; // XPENDING mystream group55 - + 10 consumer-123 - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ssls", &key, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|sslsl", &key, &keylen, &group, &grouplen, &start, &startlen, - &end, &endlen, &count, &consumer, &consumerlen) - == FAILURE) + &end, &endlen, &count, &consumer, &consumerlen, + &idle) == FAILURE) { return FAILURE; } @@ -3643,8 +3643,8 @@ int redis_xpending_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, return FAILURE; } - /* Calculate argc. It's either 2, 5, or 6 */ - argc = 2 + (start != NULL ? 3 + (consumer != NULL) : 0); + /* Calculate argc. It's either 2, 5, 6 or 7 */ + argc = 2 + (start != NULL ? 3 + (consumer != NULL) + (idle != 0) : 0); /* Construct command and add required arguments */ REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "XPENDING"); @@ -3653,6 +3653,10 @@ int redis_xpending_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, /* Add optional argumentst */ if (start) { + if (idle != 0) { + REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "IDLE"); + redis_cmd_append_sstr_long(&cmdstr, (long)idle); + } redis_cmd_append_sstr(&cmdstr, start, startlen); redis_cmd_append_sstr(&cmdstr, end, endlen); redis_cmd_append_sstr_long(&cmdstr, (long)count); |