@@ -93,9 +93,14 @@ zend_function_entry redis_functions[] = {
93
93
PHP_ME (Redis , select , NULL , ZEND_ACC_PUBLIC )
94
94
PHP_ME (Redis , move , NULL , ZEND_ACC_PUBLIC )
95
95
96
+ /* 1.1 */
97
+ PHP_ME (Redis , mset , NULL , ZEND_ACC_PUBLIC )
98
+
99
+ /* aliases */
96
100
PHP_MALIAS (Redis , open , connect , NULL , ZEND_ACC_PUBLIC )
97
101
PHP_MALIAS (Redis , lLen , lSize , NULL , ZEND_ACC_PUBLIC )
98
102
PHP_MALIAS (Redis , sMembers , sGetMembers , NULL , ZEND_ACC_PUBLIC )
103
+ PHP_MALIAS (Redis , mget , getMultiple , NULL , ZEND_ACC_PUBLIC )
99
104
{NULL , NULL , NULL }
100
105
};
101
106
@@ -2416,4 +2421,79 @@ PHP_METHOD(Redis, move) {
2416
2421
redis_1_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock TSRMLS_CC );
2417
2422
}
2418
2423
/* }}} */
2424
+
2425
+ /* {{{ proto bool Redis::mset(array (key => value, ...))
2426
+ */
2427
+ PHP_METHOD (Redis , mset ) {
2428
+ zval * object ;
2429
+ RedisSock * redis_sock ;
2430
+
2431
+ char * cmd ;
2432
+ int cmd_len ;
2433
+ zval * z_array ;
2434
+
2435
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oa" ,
2436
+ & object , redis_ce , & z_array ) == FAILURE ) {
2437
+ RETURN_FALSE ;
2438
+ }
2439
+
2440
+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
2441
+ RETURN_FALSE ;
2442
+ }
2443
+
2444
+ if (zend_hash_num_elements (Z_ARRVAL_P (z_array )) == 0 ) {
2445
+ RETURN_FALSE ;
2446
+ }
2447
+
2448
+ cmd_len = redis_cmd_format (& cmd , "*%d\r\n" , 1 + 2 * zend_hash_num_elements (Z_ARRVAL_P (z_array )));
2449
+
2450
+ if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
2451
+ efree (cmd );
2452
+ RETURN_FALSE ;
2453
+ }
2454
+ efree (cmd );
2455
+
2456
+ if (redis_sock_write (redis_sock , "$4\r\nMSET\r\n" , 10 ) < 0 ) {
2457
+ RETURN_FALSE ;
2458
+ }
2459
+
2460
+ HashTable * keytable = Z_ARRVAL_P (z_array );
2461
+ for (zend_hash_internal_pointer_reset (keytable );
2462
+ zend_hash_has_more_elements (keytable ) == SUCCESS ;
2463
+ zend_hash_move_forward (keytable )) {
2464
+
2465
+ char * key , * val ;
2466
+ int key_len , val_len ;
2467
+ unsigned long idx ;
2468
+ int type ;
2469
+ zval * * z_value_pp ;
2470
+
2471
+ type = zend_hash_get_current_key_ex (keytable , & key , & key_len , & idx , 0 , NULL );
2472
+ if (zend_hash_get_current_data (keytable , (void * * )& z_value_pp ) == FAILURE ) {
2473
+ continue ; /* this should never happen, according to the PHP people. */
2474
+ }
2475
+
2476
+ if (type != HASH_KEY_IS_STRING ) { /* ignore non-string keys */
2477
+ continue ;
2478
+ }
2479
+
2480
+ val = Z_STRVAL_PP (z_value_pp );
2481
+ val_len = Z_STRLEN_PP (z_value_pp );
2482
+
2483
+ if (key_len > 0 ) {
2484
+ key_len -- ;
2485
+ }
2486
+
2487
+ cmd_len = redis_cmd_format (& cmd , "$%d\r\n%s\r\n$%d\r\n%s\r\n" ,
2488
+ key_len , key , key_len ,
2489
+ val_len , val , val_len );
2490
+
2491
+ redis_sock_write (redis_sock , cmd , cmd_len );
2492
+ efree (cmd );
2493
+ }
2494
+
2495
+ redis_boolean_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock TSRMLS_CC );
2496
+ }
2497
+ /* }}} */
2498
+
2419
2499
/* vim: set tabstop=4 expandtab: */
0 commit comments