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:
authorMichael Grunder <michael.grunder@gmail.com>2020-06-07 23:48:06 +0300
committerGitHub <noreply@github.com>2020-06-07 23:48:06 +0300
commita0c53e0b30e0c6af15cc137415e7d65f6d1867f7 (patch)
tree4a0eb466a14748c24bdf45bb2ab15efc07f8f994 /redis_commands.c
parent58dab5649fcc2cc63f5a29df83f783e154d7fa22 (diff)
Issue.1762 xinfo full (#1771)
Add support for `XINFO STREAM FULL [COUNT]`
Diffstat (limited to 'redis_commands.c')
-rw-r--r--redis_commands.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/redis_commands.c b/redis_commands.c
index 942b2272..f07fdfcb 100644
--- a/redis_commands.c
+++ b/redis_commands.c
@@ -3816,33 +3816,49 @@ int redis_xgroup_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
return FAILURE;
}
-
-
/* XINFO CONSUMERS key group
* XINFO GROUPS key
- * XINFO STREAM key
+ * XINFO STREAM key [FULL [COUNT N]]
* XINFO HELP */
int redis_xinfo_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
- char *op, *key, *arg;
+ char *op, *key, *arg = NULL;
size_t oplen, keylen, arglen;
- char fmt[4];
+ zend_long count = -1;
int argc = ZEND_NUM_ARGS();
+ char fmt[] = "skssl";
- if (argc > 3 || zend_parse_parameters(ZEND_NUM_ARGS(), "s|ss",
+ if (argc > 4 || zend_parse_parameters(ZEND_NUM_ARGS(), "s|ssl",
&op, &oplen, &key, &keylen, &arg,
- &arglen) == FAILURE)
+ &arglen, &count) == FAILURE)
{
return FAILURE;
}
- /* Our format is simply "s", "sk" or "sks" depending on argc */
- memcpy(fmt, "sks", sizeof("sks")-1);
+ /* Handle everything except XINFO STREAM */
+ if (strncasecmp(op, "STREAM", 6) != 0) {
+ fmt[argc] = '\0';
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "XINFO", fmt, op, oplen, key, keylen,
+ arg, arglen);
+ return SUCCESS;
+ }
+
+ /* 'FULL' is the only legal option to XINFO STREAM */
+ if (argc > 2 && strncasecmp(arg, "FULL", 4) != 0) {
+ php_error_docref(NULL, E_WARNING, "'%s' is not a valid option for XINFO STREAM", arg);
+ return FAILURE;
+ }
+
+ /* If we have a COUNT bump the argument count to account for the 'COUNT' literal */
+ if (argc == 4) argc++;
+
fmt[argc] = '\0';
- *cmd_len = REDIS_CMD_SPPRINTF(cmd, "XINFO", fmt, op, oplen, key, keylen,
- arg, arglen);
+ /* Build our XINFO STREAM variant */
+ *cmd_len = REDIS_CMD_SPPRINTF(cmd, "XINFO", fmt, "STREAM", 6, key, keylen,
+ "FULL", 4, "COUNT", 5, count);
+
return SUCCESS;
}