@@ -110,6 +110,11 @@ static zend_function_entry redis_functions[] = {
110110 PHP_ME (Redis , zIncrBy , NULL , ZEND_ACC_PUBLIC )
111111 PHP_ME (Redis , expireAt , NULL , ZEND_ACC_PUBLIC )
112112
113+ /* 1.2 */
114+ PHP_ME (Redis , hGet , NULL , ZEND_ACC_PUBLIC )
115+ PHP_ME (Redis , hSet , NULL , ZEND_ACC_PUBLIC )
116+
117+
113118 /* aliases */
114119 PHP_MALIAS (Redis , open , connect , NULL , ZEND_ACC_PUBLIC )
115120 PHP_MALIAS (Redis , lLen , lSize , NULL , ZEND_ACC_PUBLIC )
@@ -2955,4 +2960,96 @@ PHP_METHOD(Redis, zIncrBy)
29552960}
29562961/* }}} */
29572962
2963+ /* hashes */
2964+
2965+ /* hGet */
2966+ PHP_METHOD (Redis , hSet )
2967+ {
2968+ zval * object ;
2969+ RedisSock * redis_sock ;
2970+ char * key = NULL , * cmd , * member , * val ;
2971+ int key_len , member_len , cmd_len , val_len ;
2972+
2973+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osss" ,
2974+ & object , redis_ce ,
2975+ & key , & key_len , & member , & member_len , & val , & val_len ) == FAILURE ) {
2976+ RETURN_FALSE ;
2977+ }
2978+
2979+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
2980+ RETURN_FALSE ;
2981+ }
2982+ cmd_len = redis_cmd_format (& cmd ,
2983+ "*4\r\n"
2984+ "$4\r\n"
2985+ "HSET\r\n"
2986+
2987+ "$%d\r\n" /* key */
2988+ "%s\r\n"
2989+
2990+ "$%d\r\n" /* field */
2991+ "%s\r\n"
2992+
2993+ "$%d\r\n" /* value */
2994+ "%s\r\n"
2995+ ,
2996+ key_len , key , key_len ,
2997+ member_len , member , member_len ,
2998+ val_len , val , val_len );
2999+
3000+ if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
3001+ efree (cmd );
3002+ RETURN_FALSE ;
3003+ }
3004+ efree (cmd );
3005+
3006+ redis_1_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock TSRMLS_CC );
3007+ }
3008+ /* }}} */
3009+
3010+ /* hSet */
3011+ PHP_METHOD (Redis , hGet )
3012+ {
3013+ zval * object ;
3014+ RedisSock * redis_sock ;
3015+ char * key = NULL , * cmd , * member , * response ;
3016+ int key_len , member_len , cmd_len , response_len ;
3017+
3018+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oss" ,
3019+ & object , redis_ce ,
3020+ & key , & key_len , & member , & member_len ) == FAILURE ) {
3021+ RETURN_FALSE ;
3022+ }
3023+
3024+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
3025+ RETURN_FALSE ;
3026+ }
3027+ cmd_len = redis_cmd_format (& cmd ,
3028+ "*3\r\n"
3029+ "$4\r\n"
3030+ "HGET\r\n"
3031+
3032+ "$%d\r\n" /* key */
3033+ "%s\r\n"
3034+
3035+ "$%d\r\n" /* field */
3036+ "%s\r\n"
3037+ ,
3038+ key_len , key , key_len ,
3039+ member_len , member , member_len );
3040+
3041+ if (redis_sock_write (redis_sock , cmd , cmd_len ) < 0 ) {
3042+ efree (cmd );
3043+ RETURN_FALSE ;
3044+ }
3045+ efree (cmd );
3046+
3047+ if ((response = redis_sock_read (redis_sock , & response_len TSRMLS_CC )) == NULL ) {
3048+ RETURN_FALSE ;
3049+ }
3050+
3051+ RETURN_STRINGL (response , response_len , 0 );
3052+ }
3053+ /* }}} */
3054+
29583055/* vim: set tabstop=4 expandtab: */
0 commit comments