@@ -161,6 +161,9 @@ static zend_function_entry redis_functions[] = {
161161 PHP_ME (Redis , dump , NULL , ZEND_ACC_PUBLIC )
162162 PHP_ME (Redis , restore , NULL , ZEND_ACC_PUBLIC )
163163
164+ PHP_ME (Redis , _prefix , NULL , ZEND_ACC_PUBLIC )
165+ PHP_ME (Redis , _unserialize , NULL , ZEND_ACC_PUBLIC )
166+
164167 /* 1.1 */
165168 PHP_ME (Redis , mset , NULL , ZEND_ACC_PUBLIC )
166169 PHP_ME (Redis , msetnx , NULL , ZEND_ACC_PUBLIC )
@@ -5861,7 +5864,7 @@ PHP_METHOD(Redis, dump) {
58615864}
58625865
58635866/*
5864- * {{{ proto RESTORE ttl key value
5867+ * {{{ proto Redis::restore( ttl, key, value)
58655868 */
58665869PHP_METHOD (Redis , restore ) {
58675870 zval * object ;
@@ -5894,5 +5897,64 @@ PHP_METHOD(Redis, restore) {
58945897 REDIS_PROCESS_RESPONSE (redis_boolean_response );
58955898}
58965899
5900+ /*
5901+ * {{{ proto Redis::_prefix(key)
5902+ */
5903+ PHP_METHOD (Redis , _prefix ) {
5904+ zval * object ;
5905+ RedisSock * redis_sock ;
5906+ char * key ;
5907+ int key_len ;
5908+
5909+ // Parse our arguments
5910+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" , & object , redis_ce ,
5911+ & key , & key_len ) == FAILURE ) {
5912+ RETURN_FALSE ;
5913+ }
5914+ // Grab socket
5915+ if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
5916+ RETURN_FALSE ;
5917+ }
5918+
5919+ // Prefix our key if we need to
5920+ if (redis_sock -> prefix != NULL && redis_sock -> prefix_len > 0 ) {
5921+ redis_key_prefix (redis_sock , & key , & key_len TSRMLS_CC );
5922+ RETURN_STRINGL (key , key_len , 0 );
5923+ } else {
5924+ RETURN_STRINGL (key , key_len , 1 );
5925+ }
5926+ }
5927+
5928+ /*
5929+ * {{{ proto Redis::_unserialize(value)
5930+ */
5931+ PHP_METHOD (Redis , _unserialize ) {
5932+ zval * object ;
5933+ RedisSock * redis_sock ;
5934+ char * value ;
5935+ int value_len ;
5936+
5937+ // Parse our arguments
5938+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" , & object , redis_ce ,
5939+ & value , & value_len ) == FAILURE ) {
5940+ RETURN_FALSE ;
5941+ }
5942+ // Grab socket
5943+ if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
5944+ RETURN_FALSE ;
5945+ }
5946+
5947+ // We only need to attempt unserialization if we have a serializer running
5948+ if (redis_sock -> serializer != REDIS_SERIALIZER_NONE ) {
5949+ if (redis_unserialize (redis_sock , value , value_len , & return_value TSRMLS_CC ) == 0 ) {
5950+ zend_throw_exception (redis_exception_ce , "Invalid serialized data, or unserialization error" , 0 TSRMLS_CC );
5951+ RETURN_FALSE ;
5952+ }
5953+ } else {
5954+ // Just return the value that was passed to us
5955+ RETURN_STRINGL (value , value_len , 1 );
5956+ }
5957+ }
5958+
58975959/* vim: set tabstop=4 softtabstop=4 noexpandtab shiftwidth=4: */
58985960
0 commit comments