@@ -113,6 +113,7 @@ static zend_function_entry redis_functions[] = {
113113 PHP_ME (Redis , zRange , NULL , ZEND_ACC_PUBLIC )
114114 PHP_ME (Redis , zReverseRange , NULL , ZEND_ACC_PUBLIC )
115115 PHP_ME (Redis , zRangeByScore , NULL , ZEND_ACC_PUBLIC )
116+ PHP_ME (Redis , zCount , NULL , ZEND_ACC_PUBLIC )
116117 PHP_ME (Redis , zDeleteRangeByScore , NULL , ZEND_ACC_PUBLIC )
117118 PHP_ME (Redis , zCard , NULL , ZEND_ACC_PUBLIC )
118119 PHP_ME (Redis , zScore , NULL , ZEND_ACC_PUBLIC )
@@ -3081,6 +3082,54 @@ PHP_METHOD(Redis, zRangeByScore)
30813082}
30823083/* }}} */
30833084
3085+ /* {{{ proto array Redis::zCount(string key, int start , int end)
3086+ */
3087+ PHP_METHOD (Redis , zCount )
3088+ {
3089+ zval * object ;
3090+
3091+ RedisSock * redis_sock ;
3092+ char * key = NULL , * cmd ;
3093+ int key_len , cmd_len , response_len ;
3094+ double start , end ;
3095+
3096+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osdd" ,
3097+ & object , redis_ce ,
3098+ & key , & key_len , & start , & end ) == FAILURE ) {
3099+ RETURN_FALSE ;
3100+ }
3101+
3102+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
3103+ RETURN_FALSE ;
3104+ }
3105+
3106+ cmd_len = redis_cmd_format (& cmd ,
3107+ "*4" _NL
3108+
3109+ "$6" _NL
3110+ "ZCOUNT" _NL
3111+
3112+ "$%d" _NL /* key_len */
3113+ "%s" _NL /* key */
3114+
3115+ "$%d" _NL /* start_len */
3116+ "%F" _NL /* start */
3117+
3118+ "$%d" _NL /* end_len */
3119+ "%F" _NL /* end */
3120+
3121+ , key_len , key , key_len
3122+ , double_length (start ), start
3123+ , double_length (end ), end );
3124+
3125+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
3126+ IF_ATOMIC () {
3127+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL TSRMLS_CC );
3128+ }
3129+ REDIS_PROCESS_RESPONSE (redis_long_response );
3130+ }
3131+ /* }}} */
3132+
30843133/* {{{ proto long Redis::zCard(string key)
30853134 */
30863135PHP_METHOD (Redis , zCard )
0 commit comments