@@ -114,6 +114,7 @@ zend_function_entry redis_array_functions[] = {
114
114
PHP_ME (RedisArray , flushall , arginfo_flush , ZEND_ACC_PUBLIC )
115
115
PHP_ME (RedisArray , flushdb , arginfo_flush , ZEND_ACC_PUBLIC )
116
116
PHP_ME (RedisArray , getOption , arginfo_getopt , ZEND_ACC_PUBLIC )
117
+ PHP_ME (RedisArray , hscan , arginfo_kscan , ZEND_ACC_PUBLIC )
117
118
PHP_ME (RedisArray , info , arginfo_void , ZEND_ACC_PUBLIC )
118
119
PHP_ME (RedisArray , keys , arginfo_keys , ZEND_ACC_PUBLIC )
119
120
PHP_ME (RedisArray , mget , arginfo_mget , ZEND_ACC_PUBLIC )
@@ -123,8 +124,10 @@ zend_function_entry redis_array_functions[] = {
123
124
PHP_ME (RedisArray , save , arginfo_void , ZEND_ACC_PUBLIC )
124
125
PHP_ME (RedisArray , select , arginfo_select , ZEND_ACC_PUBLIC )
125
126
PHP_ME (RedisArray , setOption ,arginfo_setopt , ZEND_ACC_PUBLIC )
127
+ PHP_ME (RedisArray , sscan , arginfo_kscan , ZEND_ACC_PUBLIC )
126
128
PHP_ME (RedisArray , unlink , arginfo_void , ZEND_ACC_PUBLIC )
127
129
PHP_ME (RedisArray , unwatch , arginfo_void , ZEND_ACC_PUBLIC )
130
+ PHP_ME (RedisArray , zscan , arginfo_kscan , ZEND_ACC_PUBLIC )
128
131
PHP_MALIAS (RedisArray , delete , del , arginfo_del , ZEND_ACC_PUBLIC )
129
132
PHP_MALIAS (RedisArray , getMultiple , mget , arginfo_mget , ZEND_ACC_PUBLIC )
130
133
PHP_FE_END
@@ -1195,6 +1198,56 @@ PHP_METHOD(RedisArray, unlink) {
1195
1198
ra_generic_del (INTERNAL_FUNCTION_PARAM_PASSTHRU , "UNLINK" , sizeof ("UNLINK" ) - 1 );
1196
1199
}
1197
1200
1201
+ static void
1202
+ ra_generic_scan_cmd (INTERNAL_FUNCTION_PARAMETERS , const char * kw , int kw_len )
1203
+ {
1204
+ RedisArray * ra ;
1205
+ zend_string * key , * pattern = NULL ;
1206
+ zval * object , * redis_inst , * z_iter , z_fun , z_args [4 ];
1207
+ zend_long count = 0 ;
1208
+
1209
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "OSz/|S!l" ,
1210
+ & object , redis_array_ce , & key , & z_iter , & pattern , & count ) == FAILURE ) {
1211
+ RETURN_FALSE ;
1212
+ }
1213
+
1214
+ if ((ra = redis_array_get (object )) == NULL ) {
1215
+ RETURN_FALSE ;
1216
+ }
1217
+
1218
+ if ((redis_inst = ra_find_node (ra , ZSTR_VAL (key ), ZSTR_LEN (key ), NULL )) == NULL ) {
1219
+ php_error_docref (NULL , E_ERROR , "Could not find any redis servers for this key." );
1220
+ RETURN_FALSE ;
1221
+ }
1222
+
1223
+ ZVAL_STR (& z_args [0 ], key );
1224
+ ZVAL_NEW_REF (& z_args [1 ], z_iter );
1225
+ if (pattern ) ZVAL_STR (& z_args [2 ], pattern );
1226
+ ZVAL_LONG (& z_args [3 ], count );
1227
+
1228
+ ZVAL_STRINGL (& z_fun , kw , kw_len );
1229
+ call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , return_value , ZEND_NUM_ARGS (), z_args );
1230
+ zval_dtor (& z_fun );
1231
+
1232
+ ZVAL_ZVAL (z_iter , & z_args [1 ], 0 , 1 );
1233
+ }
1234
+
1235
+ PHP_METHOD (RedisArray , hscan )
1236
+ {
1237
+ ra_generic_scan_cmd (INTERNAL_FUNCTION_PARAM_PASSTHRU , "HSCAN" , sizeof ("HSCAN" ) - 1 );
1238
+ }
1239
+
1240
+ PHP_METHOD (RedisArray , sscan )
1241
+ {
1242
+ ra_generic_scan_cmd (INTERNAL_FUNCTION_PARAM_PASSTHRU , "SSCAN" , sizeof ("SSCAN" ) - 1 );
1243
+ }
1244
+
1245
+ PHP_METHOD (RedisArray , zscan )
1246
+ {
1247
+ ra_generic_scan_cmd (INTERNAL_FUNCTION_PARAM_PASSTHRU , "ZSCAN" , sizeof ("ZSCAN" ) - 1 );
1248
+ }
1249
+
1250
+
1198
1251
PHP_METHOD (RedisArray , multi )
1199
1252
{
1200
1253
zval * object ;
0 commit comments