mirror of
https://github.com/phpredis/phpredis.git
synced 2026-06-19 07:35:31 +00:00
Issue #2055
This commit is contained in:
committed by
michael-grunder
parent
a64a0c3785
commit
08a9d5db91
@@ -1113,6 +1113,56 @@ PHP_METHOD(RedisArray, unlink) {
|
||||
ra_generic_del(INTERNAL_FUNCTION_PARAM_PASSTHRU, "UNLINK", sizeof("UNLINK") - 1);
|
||||
}
|
||||
|
||||
static void
|
||||
ra_generic_scan_cmd(INTERNAL_FUNCTION_PARAMETERS, const char *kw, int kw_len)
|
||||
{
|
||||
RedisArray *ra;
|
||||
zend_string *key, *pattern = NULL;
|
||||
zval *object, *redis_inst, *z_iter, z_fun, z_args[4];
|
||||
zend_long count = 0;
|
||||
|
||||
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "OSz/|S!l",
|
||||
&object, redis_array_ce, &key, &z_iter, &pattern, &count) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if ((ra = redis_array_get(object)) == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if ((redis_inst = ra_find_node(ra, ZSTR_VAL(key), ZSTR_LEN(key), NULL)) == NULL) {
|
||||
php_error_docref(NULL, E_ERROR, "Could not find any redis servers for this key.");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
ZVAL_STR(&z_args[0], key);
|
||||
ZVAL_NEW_REF(&z_args[1], z_iter);
|
||||
if (pattern) ZVAL_STR(&z_args[2], pattern);
|
||||
ZVAL_LONG(&z_args[3], count);
|
||||
|
||||
ZVAL_STRINGL(&z_fun, kw, kw_len);
|
||||
call_user_function(&redis_ce->function_table, redis_inst, &z_fun, return_value, ZEND_NUM_ARGS(), z_args);
|
||||
zval_dtor(&z_fun);
|
||||
|
||||
ZVAL_ZVAL(z_iter, &z_args[1], 0, 1);
|
||||
}
|
||||
|
||||
PHP_METHOD(RedisArray, hscan)
|
||||
{
|
||||
ra_generic_scan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "HSCAN", sizeof("HSCAN") - 1);
|
||||
}
|
||||
|
||||
PHP_METHOD(RedisArray, sscan)
|
||||
{
|
||||
ra_generic_scan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "SSCAN", sizeof("SSCAN") - 1);
|
||||
}
|
||||
|
||||
PHP_METHOD(RedisArray, zscan)
|
||||
{
|
||||
ra_generic_scan_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, "ZSCAN", sizeof("ZSCAN") - 1);
|
||||
}
|
||||
|
||||
|
||||
PHP_METHOD(RedisArray, multi)
|
||||
{
|
||||
zval *object;
|
||||
|
||||
Reference in New Issue
Block a user