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>2010-09-13 01:29:14 +0400
committerNicolas Favre-Felix <n.favrefelix@gmail.com>2010-09-13 01:29:14 +0400
commit0b2a644bf910844f7972cde58268803f3e58c761 (patch)
treeae8ce137c9e72b08ab8656cac9481039497e5881 /redis.c
parent46d5baa8efc5f08390cc7bbf17d77ef63d653f2b (diff)
Added WATCH, UNWATCH, with doc and unit tests.
Diffstat (limited to 'redis.c')
-rwxr-xr-xredis.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/redis.c b/redis.c
index d221b162..cae0d490 100755
--- a/redis.c
+++ b/redis.c
@@ -144,6 +144,8 @@ static zend_function_entry redis_functions[] = {
PHP_ME(Redis, discard, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Redis, exec, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Redis, pipeline, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(Redis, watch, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(Redis, unwatch, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Redis, publish, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Redis, subscribe, NULL, ZEND_ACC_PUBLIC)
@@ -1007,6 +1009,35 @@ PHP_METHOD(Redis, delete)
}
/* }}} */
+/* {{{ proto boolean Redis::watch(string key1, string key2...)
+ */
+PHP_METHOD(Redis, watch)
+{
+ RedisSock *redis_sock;
+
+ generic_multiple_args_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU,
+ "WATCH", sizeof("WATCH") - 1,
+ 1, &redis_sock);
+ zval * object = getThis();
+
+ IF_ATOMIC() {
+ redis_boolean_response(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL);
+ }
+ REDIS_PROCESS_RESPONSE(redis_boolean_response);
+
+}
+/* }}} */
+
+/* {{{ proto boolean Redis::unwatch()
+ */
+PHP_METHOD(Redis, unwatch)
+{
+ char cmd[] = "*1" _NL "$7" _NL "UNWATCH" _NL;
+ generic_empty_cmd(INTERNAL_FUNCTION_PARAM_PASSTHRU, estrdup(cmd), sizeof(cmd)-1);
+
+}
+/* }}} */
+
/* {{{ proto array Redis::getKeys(string pattern)
*/
PHP_METHOD(Redis, getKeys)
@@ -4128,8 +4159,11 @@ PHPAPI int redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAMETERS,
/* number of responses */
int numElems = atoi(inbuf+1);
- zval_dtor(return_value);
+ if(numElems < 0) {
+ return -1;
+ }
+ zval_dtor(return_value);
zval *z_tab;
MAKE_STD_ZVAL(z_tab);
array_init(z_tab);
@@ -4200,6 +4234,7 @@ PHP_METHOD(Redis, exec)
if (redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock) < 0) {
zval_dtor(return_value);
free_reply_callbacks(object);
+ set_flag(object, REDIS_ATOMIC TSRMLS_CC);
RETURN_FALSE;
}
free_reply_callbacks(object);