@@ -356,7 +356,7 @@ redis_cmd_format(char **ret, char *format, ...) {
356
356
}
357
357
}
358
358
359
- PHPAPI void redis_bulk_double_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
359
+ PHPAPI void redis_bulk_double_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
360
360
361
361
char * response ;
362
362
int response_len ;
@@ -375,7 +375,7 @@ PHPAPI void redis_bulk_double_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *
375
375
}
376
376
}
377
377
378
- PHPAPI void redis_type_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
378
+ PHPAPI void redis_type_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
379
379
char * response ;
380
380
int response_len ;
381
381
char ret ;
@@ -405,7 +405,7 @@ PHPAPI void redis_type_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_s
405
405
}
406
406
}
407
407
408
- PHPAPI void redis_info_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
408
+ PHPAPI void redis_info_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
409
409
char * response ;
410
410
int response_len ;
411
411
char ret ;
@@ -475,7 +475,7 @@ PHPAPI void redis_info_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_s
475
475
}
476
476
}
477
477
478
- PHPAPI void redis_boolean_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
478
+ PHPAPI void redis_boolean_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
479
479
480
480
char * response ;
481
481
int response_len ;
@@ -507,7 +507,7 @@ PHPAPI void redis_boolean_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redi
507
507
}
508
508
}
509
509
510
- PHPAPI void redis_long_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
510
+ PHPAPI void redis_long_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
511
511
512
512
char * response ;
513
513
int response_len ;
@@ -575,16 +575,16 @@ PHPAPI int redis_sock_read_multibulk_reply_zipped_with_flag(INTERNAL_FUNCTION_PA
575
575
return 0 ;
576
576
}
577
577
578
- PHPAPI int redis_sock_read_multibulk_reply_zipped (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
578
+ PHPAPI int redis_sock_read_multibulk_reply_zipped (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
579
579
580
580
return redis_sock_read_multibulk_reply_zipped_with_flag (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , z_tab , 1 );
581
581
}
582
582
583
- PHPAPI int redis_sock_read_multibulk_reply_zipped_strings (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
583
+ PHPAPI int redis_sock_read_multibulk_reply_zipped_strings (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
584
584
return redis_sock_read_multibulk_reply_zipped_with_flag (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , z_tab , 0 );
585
585
}
586
586
587
- PHPAPI void redis_1_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
587
+ PHPAPI void redis_1_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
588
588
589
589
char * response ;
590
590
int response_len ;
@@ -616,7 +616,7 @@ PHPAPI void redis_1_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock
616
616
}
617
617
}
618
618
619
- PHPAPI void redis_string_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab ) {
619
+ PHPAPI void redis_string_response (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx ) {
620
620
621
621
char * response ;
622
622
int response_len ;
@@ -771,7 +771,7 @@ PHPAPI int redis_sock_disconnect(RedisSock *redis_sock TSRMLS_DC)
771
771
/**
772
772
* redis_sock_read_multibulk_reply
773
773
*/
774
- PHPAPI int redis_sock_read_multibulk_reply (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab )
774
+ PHPAPI int redis_sock_read_multibulk_reply (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx )
775
775
{
776
776
char inbuf [1024 ], * response ;
777
777
int response_len ;
@@ -821,6 +821,50 @@ redis_sock_read_multibulk_reply_loop(INTERNAL_FUNCTION_PARAMETERS, RedisSock *re
821
821
return 0 ;
822
822
}
823
823
824
+ /**
825
+ * redis_sock_read_multibulk_reply_assoc
826
+ */
827
+ PHPAPI int redis_sock_read_multibulk_reply_assoc (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock , zval * z_tab , void * ctx )
828
+ {
829
+ char inbuf [1024 ], * response ;
830
+ int response_len ;
831
+
832
+ zval * * z_keys = ctx ;
833
+
834
+ redis_check_eof (redis_sock TSRMLS_CC );
835
+ php_stream_gets (redis_sock -> stream , inbuf , 1024 );
836
+
837
+ if (inbuf [0 ] != '*' ) {
838
+ return -1 ;
839
+ }
840
+ int i , numElems = atoi (inbuf + 1 );
841
+ zval * z_multi_result ;
842
+ MAKE_STD_ZVAL (z_multi_result );
843
+ array_init (z_multi_result ); /* pre-allocate array for multi's results. */
844
+
845
+ for (i = 0 ; i < numElems ; ++ i ) {
846
+ response = redis_sock_read (redis_sock , & response_len TSRMLS_CC );
847
+ if (response != NULL ) {
848
+ add_assoc_stringl_ex (z_multi_result , Z_STRVAL_P (z_keys [i ]), 1 + Z_STRLEN_P (z_keys [i ]), response , response_len , 1 );
849
+ } else {
850
+ add_assoc_bool_ex (z_multi_result , Z_STRVAL_P (z_keys [i ]), 1 + Z_STRLEN_P (z_keys [i ]), 0 );
851
+ }
852
+ zval_dtor (z_keys [i ]);
853
+ efree (z_keys [i ]);
854
+ }
855
+ efree (z_keys );
856
+
857
+ zval * object = getThis ();
858
+ IF_MULTI_OR_PIPELINE () {
859
+ add_next_index_zval (z_tab , z_multi_result );
860
+ }
861
+
862
+ * return_value = * z_multi_result ;
863
+ //zval_copy_ctor(return_value);
864
+ // efree(z_multi_result);
865
+ return 0 ;
866
+ }
867
+
824
868
/**
825
869
* redis_sock_write
826
870
*/
0 commit comments