@@ -122,6 +122,7 @@ zend_function_entry redis_array_functions[] = {
122122 PHP_ME (RedisArray , save , arginfo_void , ZEND_ACC_PUBLIC )
123123 PHP_ME (RedisArray , select , arginfo_select , ZEND_ACC_PUBLIC )
124124 PHP_ME (RedisArray , setOption ,arginfo_setopt , ZEND_ACC_PUBLIC )
125+ PHP_ME (RedisArray , unlink , arginfo_void , ZEND_ACC_PUBLIC )
125126 PHP_ME (RedisArray , unwatch , arginfo_void , ZEND_ACC_PUBLIC )
126127 PHP_MALIAS (RedisArray , delete , del , arginfo_del , ZEND_ACC_PUBLIC )
127128 PHP_MALIAS (RedisArray , getMultiple , mget , arginfo_mget , ZEND_ACC_PUBLIC )
@@ -849,7 +850,7 @@ PHP_METHOD(RedisArray, select)
849850 zval_dtor (& z_fun );
850851}
851852#if (PHP_MAJOR_VERSION < 7 )
852- #define HANDLE_MULTI_EXEC (ra , cmd ) do { \
853+ #define HANDLE_MULTI_EXEC (ra , cmd , cmdlen ) do { \
853854 if (ra && ra->z_multi_exec) { \
854855 int i, num_varargs;\
855856 zval ***varargs = NULL, *z_arg_array; \
@@ -867,7 +868,7 @@ PHP_METHOD(RedisArray, select)
867868 add_next_index_zval (z_arg_array , z_tmp ); \
868869 }\
869870 /* call */ \
870- ra_forward_call (INTERNAL_FUNCTION_PARAM_PASSTHRU , ra , cmd , sizeof ( cmd ) - 1 , z_arg_array , NULL ); \
871+ ra_forward_call (INTERNAL_FUNCTION_PARAM_PASSTHRU , ra , cmd , cmdlen , z_arg_array , NULL ); \
871872 zval_ptr_dtor (& z_arg_array ); \
872873 if (varargs ) {\
873874 efree (varargs );\
@@ -892,7 +893,7 @@ PHP_METHOD(RedisArray, select)
892893 add_next_index_zval (& z_arg_array , & z_tmp ); \
893894 } \
894895 /* call */ \
895- ra_forward_call (INTERNAL_FUNCTION_PARAM_PASSTHRU , ra , cmd , sizeof ( cmd ) - 1 , & z_arg_array , NULL ); \
896+ ra_forward_call (INTERNAL_FUNCTION_PARAM_PASSTHRU , ra , cmd , cmdlen , & z_arg_array , NULL ); \
896897 zval_dtor (& z_arg_array ); \
897898 return ; \
898899 } \
@@ -914,7 +915,7 @@ PHP_METHOD(RedisArray, mget)
914915 }
915916
916917 /* Multi/exec support */
917- HANDLE_MULTI_EXEC (ra , "MGET" );
918+ HANDLE_MULTI_EXEC (ra , "MGET" , sizeof ( "MGET" ) - 1 );
918919
919920 if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oa" ,
920921 & object , redis_array_ce , & z_keys ) == FAILURE ) {
@@ -1068,7 +1069,7 @@ PHP_METHOD(RedisArray, mset)
10681069 }
10691070
10701071 /* Multi/exec support */
1071- HANDLE_MULTI_EXEC (ra , "MSET" );
1072+ HANDLE_MULTI_EXEC (ra , "MSET" , sizeof ( "MSET" ) - 1 );
10721073
10731074 if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oa" ,
10741075 & object , redis_array_ce , & z_keys ) == FAILURE )
@@ -1179,9 +1180,8 @@ PHP_METHOD(RedisArray, mset)
11791180 RETURN_TRUE ;
11801181}
11811182
1182- /* DEL will distribute the call to several nodes and regroup the values. */
1183- PHP_METHOD (RedisArray , del )
1184- {
1183+ /* Generic handler for DEL or UNLINK which behave identically to phpredis */
1184+ static void ra_generic_del (INTERNAL_FUNCTION_PARAMETERS , char * kw , int kw_len ) {
11851185 zval * object , z_keys , z_fun , * data , z_ret , * z_tmp , * z_args ;
11861186 int i , n ;
11871187 RedisArray * ra ;
@@ -1194,8 +1194,9 @@ PHP_METHOD(RedisArray, del)
11941194 if ((ra = redis_array_get (getThis () TSRMLS_CC )) == NULL ) {
11951195 RETURN_FALSE ;
11961196 }
1197+
11971198 /* Multi/exec support */
1198- HANDLE_MULTI_EXEC (ra , "DEL" );
1199+ HANDLE_MULTI_EXEC (ra , kw , kw_len );
11991200
12001201 /* get all args in z_args */
12011202 z_args = emalloc (argc * sizeof (zval ));
@@ -1259,7 +1260,7 @@ PHP_METHOD(RedisArray, del)
12591260 } ZEND_HASH_FOREACH_END ();
12601261
12611262 /* prepare call */
1262- ZVAL_STRINGL (& z_fun , "DEL" , 3 );
1263+ ZVAL_STRINGL (& z_fun , kw , kw_len );
12631264
12641265 /* calls */
12651266 for (n = 0 ; n < ra -> count ; ++ n ) { /* for each node */
@@ -1285,7 +1286,7 @@ PHP_METHOD(RedisArray, del)
12851286 found ++ ;
12861287 }
12871288
1288- if (!found ) { /* don't run empty DELs */
1289+ if (!found ) { /* don't run empty DEL or UNLINK commands */
12891290 zval_dtor (& z_argarray );
12901291 continue ;
12911292 }
@@ -1322,6 +1323,16 @@ PHP_METHOD(RedisArray, del)
13221323 RETURN_LONG (total );
13231324}
13241325
1326+ /* DEL will distribute the call to several nodes and regroup the values. */
1327+ PHP_METHOD (RedisArray , del )
1328+ {
1329+ ra_generic_del (INTERNAL_FUNCTION_PARAM_PASSTHRU , "DEL" , sizeof ("DEL" )- 1 );
1330+ }
1331+
1332+ PHP_METHOD (RedisArray , unlink ) {
1333+ ra_generic_del (INTERNAL_FUNCTION_PARAM_PASSTHRU , "UNLINK" , sizeof ("UNLINK" ) - 1 );
1334+ }
1335+
13251336PHP_METHOD (RedisArray , multi )
13261337{
13271338 zval * object ;
0 commit comments