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:
authorNicolas Favre-Felix <n.favrefelix@gmail.com>2011-11-27 23:57:39 +0400
committerNicolas Favre-Felix <n.favrefelix@gmail.com>2011-11-27 23:57:39 +0400
commit7781557bb1c09584d47b9132015688810da1514d (patch)
tree1b3d9fe789e044354aece8414f8a743218d0dcd8
parent1ce8bcc5340bcf928ccca72a043ec0c44a4e19ac (diff)
Added missing UNWATCH.
Possibly resolves GitHub issue #86 (TBC).
-rw-r--r--redis_array.c19
-rw-r--r--redis_array.h1
-rw-r--r--redis_array_impl.c12
-rw-r--r--redis_array_impl.h1
4 files changed, 33 insertions, 0 deletions
diff --git a/redis_array.c b/redis_array.c
index cf67cfe2..e1955735 100644
--- a/redis_array.c
+++ b/redis_array.c
@@ -61,6 +61,7 @@ zend_function_entry redis_array_functions[] = {
PHP_ME(RedisArray, multi, NULL, ZEND_ACC_PUBLIC)
PHP_ME(RedisArray, exec, NULL, ZEND_ACC_PUBLIC)
PHP_ME(RedisArray, discard, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(RedisArray, unwatch, NULL, ZEND_ACC_PUBLIC)
/* Aliases */
PHP_MALIAS(RedisArray, delete, del, NULL, ZEND_ACC_PUBLIC)
@@ -1049,3 +1050,21 @@ PHP_METHOD(RedisArray, discard)
/* remove multi object */
ra->z_multi_exec = NULL;
}
+
+PHP_METHOD(RedisArray, unwatch)
+{
+ 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;
+ }
+
+ /* unwatch keys, stay in multi/exec mode. */
+ ra_index_unwatch(ra->z_multi_exec, return_value TSRMLS_CC);
+}
diff --git a/redis_array.h b/redis_array.h
index dfedbca5..d34b710b 100644
--- a/redis_array.h
+++ b/redis_array.h
@@ -24,6 +24,7 @@ PHP_METHOD(RedisArray, setOption);
PHP_METHOD(RedisArray, multi);
PHP_METHOD(RedisArray, exec);
PHP_METHOD(RedisArray, discard);
+PHP_METHOD(RedisArray, unwatch);
typedef struct RedisArray_ {
diff --git a/redis_array_impl.c b/redis_array_impl.c
index c7f475d3..a13fc998 100644
--- a/redis_array_impl.c
+++ b/redis_array_impl.c
@@ -528,6 +528,18 @@ ra_index_discard(zval *z_redis, zval *return_value TSRMLS_DC) {
zval_dtor(&z_ret);
}
+void
+ra_index_unwatch(zval *z_redis, zval *return_value TSRMLS_DC) {
+
+ zval z_fun_unwatch, z_ret;
+
+ /* run UNWATCH */
+ ZVAL_STRING(&z_fun_unwatch, "UNWATCH", 0);
+ call_user_function(&redis_ce->function_table, &z_redis, &z_fun_unwatch, &z_ret, 0, NULL TSRMLS_CC);
+
+ zval_dtor(&z_ret);
+}
+
zend_bool
ra_is_write_cmd(RedisArray *ra, const char *cmd, int cmd_len) {
diff --git a/redis_array_impl.h b/redis_array_impl.h
index c42a97a7..78338bc4 100644
--- a/redis_array_impl.h
+++ b/redis_array_impl.h
@@ -21,6 +21,7 @@ void ra_index_keys(zval *z_pairs, zval *z_redis TSRMLS_DC);
void ra_index_del(zval *z_keys, zval *z_redis TSRMLS_DC);
void ra_index_exec(zval *z_redis, zval *return_value, int keep_all TSRMLS_DC);
void ra_index_discard(zval *z_redis, zval *return_value TSRMLS_DC);
+void ra_index_unwatch(zval *z_redis, zval *return_value TSRMLS_DC);
zend_bool ra_is_write_cmd(RedisArray *ra, const char *cmd, int cmd_len);
void ra_rehash(RedisArray *ra, zval *z_cb TSRMLS_DC);