@@ -58,6 +58,7 @@ zend_function_entry redis_array_functions[] = {
58
58
PHP_ME (RedisArray , del , NULL , ZEND_ACC_PUBLIC )
59
59
PHP_ME (RedisArray , getOption , NULL , ZEND_ACC_PUBLIC )
60
60
PHP_ME (RedisArray , setOption , NULL , ZEND_ACC_PUBLIC )
61
+ PHP_ME (RedisArray , keys , NULL , ZEND_ACC_PUBLIC )
61
62
62
63
/* Multi/Exec */
63
64
PHP_ME (RedisArray , multi , NULL , ZEND_ACC_PUBLIC )
@@ -553,6 +554,51 @@ PHP_METHOD(RedisArray, ping)
553
554
multihost_distribute (INTERNAL_FUNCTION_PARAM_PASSTHRU , "PING" );
554
555
}
555
556
557
+ PHP_METHOD (RedisArray , keys )
558
+ {
559
+ zval * object , * z_args [1 ], * z_tmp , z_fun ;
560
+ RedisArray * ra ;
561
+ char * pattern ;
562
+ int pattern_len , i ;
563
+
564
+ // Make sure the prototype is correct
565
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" ,
566
+ & object , redis_array_ce , & pattern , & pattern_len ) == FAILURE )
567
+ {
568
+ RETURN_FALSE ;
569
+ }
570
+
571
+ // Make sure we can grab our RedisArray object
572
+ if (redis_array_get (object , & ra TSRMLS_CC ) < 0 ) {
573
+ RETURN_FALSE ;
574
+ }
575
+
576
+ // Set up our function call (KEYS)
577
+ ZVAL_STRING (& z_fun , "KEYS" , 0 );
578
+
579
+ // We will be passing with one string argument (the pattern)
580
+ MAKE_STD_ZVAL (z_args [0 ]);
581
+ ZVAL_STRINGL (z_args [0 ], pattern , pattern_len , 0 );
582
+
583
+ // Init our array return
584
+ array_init (return_value );
585
+
586
+ // Iterate our RedisArray nodes
587
+ for (i = 0 ; i < ra -> count ; ++ i ) {
588
+ // Return for this node
589
+ MAKE_STD_ZVAL (z_tmp );
590
+
591
+ // Call KEYS on each node
592
+ call_user_function (& redis_ce -> function_table , & ra -> redis [i ], & z_fun , z_tmp , 1 , z_args TSRMLS_CC );
593
+
594
+ // Add the result for this host
595
+ add_assoc_zval (return_value , ra -> hosts [i ], z_tmp );
596
+ }
597
+
598
+ // Free arg array
599
+ efree (z_args [0 ]);
600
+ }
601
+
556
602
PHP_METHOD (RedisArray , getOption )
557
603
{
558
604
zval * object , z_fun , * z_tmp , * z_args [1 ];
0 commit comments