From 7b8752c59ef6784c256a287a63f7a1b0283043ef Mon Sep 17 00:00:00 2001 From: Anoakie Turner Date: Wed, 20 Mar 2013 00:53:09 +0000 Subject: [PATCH 1/2] Add appendx, happend, and happendx --- php_redis.h | 3 +++ redis.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/php_redis.h b/php_redis.h index 24f002150e..fd2be133fc 100644 --- a/php_redis.h +++ b/php_redis.h @@ -49,6 +49,7 @@ PHP_METHOD(Redis, decr); PHP_METHOD(Redis, decrBy); PHP_METHOD(Redis, type); PHP_METHOD(Redis, append); +PHP_METHOD(Redis, appendx); PHP_METHOD(Redis, getRange); PHP_METHOD(Redis, setRange); PHP_METHOD(Redis, getBit); @@ -157,6 +158,8 @@ PHP_METHOD(Redis, hKeys); PHP_METHOD(Redis, hVals); PHP_METHOD(Redis, hGetAll); PHP_METHOD(Redis, hExists); +PHP_METHOD(Redis, hAppend); +PHP_METHOD(Redis, hAppendX); PHP_METHOD(Redis, hIncrBy); PHP_METHOD(Redis, hIncrByFloat); PHP_METHOD(Redis, hMset); diff --git a/redis.c b/redis.c index bf92513edb..799ac005bd 100644 --- a/redis.c +++ b/redis.c @@ -1529,6 +1529,35 @@ PHP_METHOD(Redis, type) } /* }}} */ +PHP_METHOD(Redis, appendx) +{ + zval *object; + RedisSock *redis_sock; + char *cmd; + int cmd_len, key_len, val_len, key_free; + char *key, *val; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", + &object, redis_ce, + &key, &key_len, &val, &val_len) == FAILURE) { + RETURN_NULL(); + } + + if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) { + RETURN_FALSE; + } + + key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC); + cmd_len = redis_cmd_format_static(&cmd, "APPENDX", "ss", key, key_len, val, val_len); + if(key_free) efree(key); + + REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len); + IF_ATOMIC() { + redis_long_response(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL, NULL); + } + REDIS_PROCESS_RESPONSE(redis_long_response); +} + PHP_METHOD(Redis, append) { zval *object; @@ -4595,6 +4624,50 @@ PHP_METHOD(Redis, hExists) } +PHPAPI void +generic_happend(INTERNAL_FUNCTION_PARAMETERS, char *kw, void (*fun)(INTERNAL_FUNCTION_PARAMETERS, RedisSock *, zval *, void *)) { + zval *object; + RedisSock *redis_sock; + char *key = NULL, *cmd, *member, *val; + int key_len, member_len, cmd_len, val_len; + int val_free, key_free = 0; + zval *z_value; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ossz", + &object, redis_ce, + &key, &key_len, &member, &member_len, &z_value) == FAILURE) { + RETURN_FALSE; + } + + if (redis_sock_get(object, &redis_sock TSRMLS_CC, 0) < 0) { + RETURN_FALSE; + } + + val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC); + key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC); + cmd_len = redis_cmd_format_static(&cmd, kw, "sss", key, key_len, member, member_len, val, val_len); + if(val_free) efree(val); + if(key_free) efree(key); + + REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len); + IF_ATOMIC() { + fun(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, NULL, NULL); + } + REDIS_PROCESS_RESPONSE(fun); +} +/* hAppend */ +PHP_METHOD(Redis, hAppend) +{ + generic_happend(INTERNAL_FUNCTION_PARAM_PASSTHRU, "HAPPEND", redis_long_response); +} +/* }}} */ +/* hAppendx */ +PHP_METHOD(Redis, hAppendX) +{ + generic_happend(INTERNAL_FUNCTION_PARAM_PASSTHRU, "HAPPENDX", redis_long_response); +} +/* }}} */ + PHPAPI RedisSock* generic_hash_command_1(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_len) { From 629137584e9deb97ce1c38f4945c9313884916ed Mon Sep 17 00:00:00 2001 From: Anoakie Turner Date: Wed, 20 Mar 2013 00:53:09 +0000 Subject: [PATCH 2/2] Add appendx, happend, and happendx --- redis.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/redis.c b/redis.c index 799ac005bd..9f2ed0dd80 100644 --- a/redis.c +++ b/redis.c @@ -198,6 +198,11 @@ static zend_function_entry redis_functions[] = { PHP_ME(Redis, hMset, NULL, ZEND_ACC_PUBLIC) PHP_ME(Redis, hMget, NULL, ZEND_ACC_PUBLIC) + /* 1.8 */ + PHP_ME(Redis, appendx, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Redis, hAppend, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Redis, hAppendX, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Redis, multi, NULL, ZEND_ACC_PUBLIC) PHP_ME(Redis, discard, NULL, ZEND_ACC_PUBLIC) PHP_ME(Redis, exec, NULL, ZEND_ACC_PUBLIC) @@ -4661,7 +4666,7 @@ PHP_METHOD(Redis, hAppend) generic_happend(INTERNAL_FUNCTION_PARAM_PASSTHRU, "HAPPEND", redis_long_response); } /* }}} */ -/* hAppendx */ +/* hAppendX */ PHP_METHOD(Redis, hAppendX) { generic_happend(INTERNAL_FUNCTION_PARAM_PASSTHRU, "HAPPENDX", redis_long_response);