Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2021-04-15 09:26:10 +0300
committerPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2021-04-15 18:49:46 +0300
commit28de62202e600725139e6cb2976a0f6d9547439f (patch)
treef28361e49ea14950ead6ab4a03dc8dc6db7d687e
parent6aa9c0899cab2210e9340bd710ee81db72d76d40 (diff)
[WIP] Issue #1894
Add IDLE argument to XPENDING command
-rw-r--r--common.h1
-rw-r--r--redis_commands.c18
2 files changed, 12 insertions, 7 deletions
diff --git a/common.h b/common.h
index e4808969..2ad7c708 100644
--- a/common.h
+++ b/common.h
@@ -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);