Skip to content

Commit acd1040

Browse files
committed
Handle async parameter for RedisArray::flushDb and RedisArray::flushAll TODO: implementation for RedisCluster and unit-tests
1 parent beb6e8f commit acd1040

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

redis_array.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ zend_function_entry redis_array_functions[] = {
110110
PHP_ME(RedisArray, del, arginfo_del, ZEND_ACC_PUBLIC)
111111
PHP_ME(RedisArray, discard, arginfo_void, ZEND_ACC_PUBLIC)
112112
PHP_ME(RedisArray, exec, arginfo_void, ZEND_ACC_PUBLIC)
113-
PHP_ME(RedisArray, flushall, arginfo_void, ZEND_ACC_PUBLIC)
114-
PHP_ME(RedisArray, flushdb, arginfo_void, ZEND_ACC_PUBLIC)
113+
PHP_ME(RedisArray, flushall, arginfo_flush, ZEND_ACC_PUBLIC)
114+
PHP_ME(RedisArray, flushdb, arginfo_flush, ZEND_ACC_PUBLIC)
115115
PHP_ME(RedisArray, getOption, arginfo_getopt, ZEND_ACC_PUBLIC)
116116
PHP_ME(RedisArray, info, arginfo_void, ZEND_ACC_PUBLIC)
117117
PHP_ME(RedisArray, keys, arginfo_keys, ZEND_ACC_PUBLIC)
@@ -646,10 +646,10 @@ multihost_distribute_call(RedisArray *ra, zval *return_value, zval *z_fun, int a
646646
}
647647
}
648648

649-
static void multihost_distribute(INTERNAL_FUNCTION_PARAMETERS, const char *method_name)
649+
static void
650+
multihost_distribute(INTERNAL_FUNCTION_PARAMETERS, const char *method_name)
650651
{
651652
zval *object, z_fun;
652-
int i;
653653
RedisArray *ra;
654654

655655
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",
@@ -669,6 +669,31 @@ static void multihost_distribute(INTERNAL_FUNCTION_PARAMETERS, const char *metho
669669
zval_dtor(&z_fun);
670670
}
671671

672+
static void
673+
multihost_distribute_flush(INTERNAL_FUNCTION_PARAMETERS, const char *method_name)
674+
{
675+
zval *object, z_fun, z_args[1];
676+
zend_bool async = 0;
677+
RedisArray *ra;
678+
679+
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|b",
680+
&object, redis_array_ce, &async) == FAILURE) {
681+
RETURN_FALSE;
682+
}
683+
684+
if ((ra = redis_array_get(object TSRMLS_CC)) == NULL) {
685+
RETURN_FALSE;
686+
}
687+
688+
/* prepare call */
689+
ZVAL_STRING(&z_fun, method_name);
690+
ZVAL_BOOL(&z_args[0], async);
691+
692+
multihost_distribute_call(ra, return_value, &z_fun, 1, z_args TSRMLS_CC);
693+
694+
zval_dtor(&z_fun);
695+
}
696+
672697
PHP_METHOD(RedisArray, info)
673698
{
674699
multihost_distribute(INTERNAL_FUNCTION_PARAM_PASSTHRU, "INFO");
@@ -681,12 +706,12 @@ PHP_METHOD(RedisArray, ping)
681706

682707
PHP_METHOD(RedisArray, flushdb)
683708
{
684-
multihost_distribute(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHDB");
709+
multihost_distribute_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHDB");
685710
}
686711

687712
PHP_METHOD(RedisArray, flushall)
688713
{
689-
multihost_distribute(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHALL");
714+
multihost_distribute_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, "FLUSHALL");
690715
}
691716

692717
PHP_METHOD(RedisArray, save)
@@ -702,7 +727,7 @@ PHP_METHOD(RedisArray, bgsave)
702727

703728
PHP_METHOD(RedisArray, keys)
704729
{
705-
zval *object, z_args[1], z_fun;
730+
zval *object, z_fun, z_args[1];
706731
RedisArray *ra;
707732
char *pattern;
708733
strlen_t pattern_len;

0 commit comments

Comments
 (0)