Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3574ef0

Browse files
Refactor INFO and SCRIPT commands.
Use `gen_varkey_cmd` for INFO and SCRIPT.
1 parent 8cb6dd1 commit 3574ef0

3 files changed

Lines changed: 27 additions & 34 deletions

File tree

redis.c

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,32 +1528,7 @@ PHP_METHOD(Redis, pttl) {
15281528

15291529
/* {{{ proto array Redis::info() */
15301530
PHP_METHOD(Redis, info) {
1531-
smart_string cmdstr = {0};
1532-
RedisSock *redis_sock;
1533-
zend_string *section;
1534-
zval *args = NULL;
1535-
int i, argc = 0;
1536-
1537-
ZEND_PARSE_PARAMETERS_START(0, -1)
1538-
Z_PARAM_VARIADIC('+', args, argc)
1539-
ZEND_PARSE_PARAMETERS_END();
1540-
1541-
if ((redis_sock = redis_sock_get(getThis(), 0)) == NULL)
1542-
RETURN_FALSE;
1543-
1544-
REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "INFO");
1545-
for (i = 0; i < argc; i++) {
1546-
section = zval_get_string(&args[i]);
1547-
redis_cmd_append_sstr_zstr(&cmdstr, section);
1548-
zend_string_release(section);
1549-
}
1550-
1551-
REDIS_PROCESS_REQUEST(redis_sock, cmdstr.c, cmdstr.len);
1552-
if (IS_ATOMIC(redis_sock)) {
1553-
redis_info_response(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL,
1554-
NULL);
1555-
}
1556-
REDIS_PROCESS_RESPONSE(redis_info_response);
1531+
REDIS_PROCESS_CMD(info, redis_info_response);
15571532
}
15581533
/* }}} */
15591534

@@ -2432,7 +2407,7 @@ PHP_METHOD(Redis, evalsha_ro) {
24322407

24332408
/* {{{ public function script($args...): mixed }}} */
24342409
PHP_METHOD(Redis, script) {
2435-
REDIS_PROCESS_KW_CMD("SCRIPT", redis_vararg_cmd, redis_read_variant_reply);
2410+
REDIS_PROCESS_CMD(script, redis_read_variant_reply);
24362411
}
24372412

24382413
/* {{{ proto DUMP key */

redis_commands.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,16 +1815,17 @@ int redis_key_str_arr_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
18151815
}
18161816

18171817
/* Generic function that takes one or more non-serialized arguments */
1818-
int redis_vararg_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1819-
char *kw, char **cmd, int *cmd_len, short *slot,
1820-
void **ctx)
1818+
static int
1819+
gen_vararg_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1820+
uint32_t min_argc, char *kw, char **cmd, int *cmd_len,
1821+
short *slot, void **ctx)
18211822
{
18221823
smart_string cmdstr = {0};
18231824
zval *argv = NULL;
18241825
zend_string *arg;
18251826
int argc = 0;
18261827

1827-
ZEND_PARSE_PARAMETERS_START(1, -1)
1828+
ZEND_PARSE_PARAMETERS_START(min_argc, -1)
18281829
Z_PARAM_VARIADIC('*', argv, argc)
18291830
ZEND_PARSE_PARAMETERS_END_EX(return FAILURE);
18301831

@@ -2013,6 +2014,20 @@ int redis_mpop_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *kw
20132014
return SUCCESS;
20142015
}
20152016

2017+
int redis_info_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
2018+
char **cmd, int *cmd_len, short *slot, void **ctx)
2019+
{
2020+
return gen_vararg_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, 0,
2021+
"INFO", cmd, cmd_len, slot, ctx);
2022+
}
2023+
2024+
int redis_script_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
2025+
char **cmd, int *cmd_len, short *slot, void **ctx)
2026+
{
2027+
return gen_vararg_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, 1,
2028+
"SCRIPT", cmd, cmd_len, slot, ctx);
2029+
}
2030+
20162031
/* Generic handling of every blocking pop command (BLPOP, BZPOP[MIN/MAX], etc */
20172032
int redis_blocking_pop_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
20182033
char *kw, char **cmd, int *cmd_len, short *slot,

redis_commands.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ int redis_geosearchstore_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock
185185
* specific processing we do (e.g. verifying subarguments) that make them
186186
* unique */
187187

188+
int redis_info_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
189+
char **cmd, int *cmd_len, short *slot, void **ctx);
190+
191+
int redis_script_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
192+
char **cmd, int *cmd_len, short *slot, void **ctx);
193+
188194
int redis_acl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
189195
char **cmd, int *cmd_len, short *slot, void **ctx);
190196

@@ -344,9 +350,6 @@ int redis_expire_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
344350
int redis_varkey_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
345351
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
346352

347-
int redis_vararg_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
348-
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
349-
350353
int redis_sentinel_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
351354
char *kw, char **cmd, int *cmd_len, short *slot, void **ctx);
352355

0 commit comments

Comments
 (0)