diff options
author | Nicolas Favre-Felix <n.favrefelix@gmail.com> | 2011-11-27 23:52:03 +0400 |
---|---|---|
committer | Nicolas Favre-Felix <n.favrefelix@gmail.com> | 2011-11-27 23:52:03 +0400 |
commit | 1ce8bcc5340bcf928ccca72a043ec0c44a4e19ac (patch) | |
tree | 6803fcb893ddb150b5d42e086270b995b12d7cf3 /redis_array.c | |
parent | 9692ad980d6abc80e00a1fb960737e824581507b (diff) |
Added missing DISCARD in RedisArray mode.
Also added a unit test covering this feature.
This commit fixes GitHub issue #87.
Diffstat (limited to 'redis_array.c')
-rw-r--r-- | redis_array.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/redis_array.c b/redis_array.c index 1d8fd415..cf67cfe2 100644 --- a/redis_array.c +++ b/redis_array.c @@ -60,6 +60,7 @@ zend_function_entry redis_array_functions[] = { /* Multi/Exec */ PHP_ME(RedisArray, multi, NULL, ZEND_ACC_PUBLIC) PHP_ME(RedisArray, exec, NULL, ZEND_ACC_PUBLIC) + PHP_ME(RedisArray, discard, NULL, ZEND_ACC_PUBLIC) /* Aliases */ PHP_MALIAS(RedisArray, delete, del, NULL, ZEND_ACC_PUBLIC) @@ -1027,3 +1028,24 @@ PHP_METHOD(RedisArray, exec) /* remove multi object */ ra->z_multi_exec = NULL; } + +PHP_METHOD(RedisArray, discard) +{ + zval *object; + RedisArray *ra; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", + &object, redis_array_ce) == FAILURE) { + RETURN_FALSE; + } + + if (redis_array_get(object, &ra TSRMLS_CC) < 0 || !ra->z_multi_exec) { + RETURN_FALSE; + } + + /* switch redis instance out of multi/exec mode. */ + ra_index_discard(ra->z_multi_exec, return_value TSRMLS_CC); + + /* remove multi object */ + ra->z_multi_exec = NULL; +} |