mirror of
https://github.com/phpredis/phpredis.git
synced 2026-06-19 07:35:31 +00:00
@@ -2511,6 +2511,50 @@ redis_mbulk_reply_raw(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval
|
||||
return 0;
|
||||
}
|
||||
|
||||
PHP_REDIS_API int
|
||||
redis_mbulk_reply_double(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx)
|
||||
{
|
||||
char inbuf[4096], *line;
|
||||
int i, numElems, len;
|
||||
size_t buf_len;
|
||||
zval z_multi_result;
|
||||
|
||||
if (redis_sock_gets(redis_sock, inbuf, sizeof(inbuf) - 1, &buf_len) < 0) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (*inbuf != TYPE_MULTIBULK) {
|
||||
if (IS_ATOMIC(redis_sock)) {
|
||||
if (*inbuf == TYPE_ERR) {
|
||||
redis_sock_set_err(redis_sock, inbuf + 1, buf_len);
|
||||
}
|
||||
RETVAL_FALSE;
|
||||
} else {
|
||||
add_next_index_bool(z_tab, 0);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
numElems = atoi(inbuf + 1);
|
||||
|
||||
array_init(&z_multi_result);
|
||||
for (i = 0; i < numElems; ++i) {
|
||||
if ((line = redis_sock_read(redis_sock, &len)) == NULL) {
|
||||
add_next_index_bool(&z_multi_result, 0);
|
||||
continue;
|
||||
}
|
||||
add_next_index_double(&z_multi_result, atof(line));
|
||||
efree(line);
|
||||
}
|
||||
|
||||
if (IS_ATOMIC(redis_sock)) {
|
||||
RETVAL_ZVAL(&z_multi_result, 0, 1);
|
||||
} else {
|
||||
add_next_index_zval(z_tab, &z_multi_result);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
PHP_REDIS_API void
|
||||
redis_mbulk_reply_loop(RedisSock *redis_sock, zval *z_tab, int count,
|
||||
int unserialize)
|
||||
|
||||
@@ -87,6 +87,7 @@ PHP_REDIS_API int redis_mbulk_reply_zipped_vals(INTERNAL_FUNCTION_PARAMETERS, Re
|
||||
PHP_REDIS_API int redis_mbulk_reply_zipped_keys_int(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
|
||||
PHP_REDIS_API int redis_mbulk_reply_zipped_keys_dbl(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
|
||||
PHP_REDIS_API int redis_mbulk_reply_assoc(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
|
||||
PHP_REDIS_API int redis_mbulk_reply_double(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab, void *ctx);
|
||||
|
||||
PHP_REDIS_API int redis_sock_read_scan_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, REDIS_SCAN_TYPE type, zend_long *iter);
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@ PHP_METHOD(Redis, zCard);
|
||||
PHP_METHOD(Redis, zCount);
|
||||
PHP_METHOD(Redis, zIncrBy);
|
||||
PHP_METHOD(Redis, zLexCount);
|
||||
PHP_METHOD(Redis, zMscore);
|
||||
PHP_METHOD(Redis, zPopMax);
|
||||
PHP_METHOD(Redis, zPopMin);
|
||||
PHP_METHOD(Redis, zRange);
|
||||
|
||||
@@ -441,6 +441,7 @@ static zend_function_entry redis_functions[] = {
|
||||
PHP_ME(Redis, zCount, arginfo_key_min_max, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zIncrBy, arginfo_zincrby, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zLexCount, arginfo_key_min_max, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zMscore, arginfo_key_members, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zPopMax, arginfo_key, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zPopMin, arginfo_key, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(Redis, zRange, arginfo_zrange, ZEND_ACC_PUBLIC)
|
||||
@@ -2250,6 +2251,13 @@ PHP_METHOD(Redis, zScore)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array Redis::zMscore(string key, string member0, ...memberN) */
|
||||
PHP_METHOD(Redis, zMscore)
|
||||
{
|
||||
REDIS_PROCESS_KW_CMD("ZMSCORE", redis_key_varval_cmd, redis_mbulk_reply_double);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto long Redis::zRank(string key, string member) */
|
||||
PHP_METHOD(Redis, zRank) {
|
||||
REDIS_PROCESS_KW_CMD("ZRANK", redis_kv_cmd, redis_long_response);
|
||||
|
||||
@@ -2506,6 +2506,26 @@ class Redis_Test extends TestSuite
|
||||
}
|
||||
}
|
||||
|
||||
public function testzMscore()
|
||||
{
|
||||
// Only available since 6.2.0
|
||||
if (version_compare($this->version, '6.2.0') < 0) {
|
||||
$this->markTestSkipped();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->redis->del('key');
|
||||
foreach (range('a', 'c') as $c) {
|
||||
$this->redis->zAdd('key', 1, $c);
|
||||
}
|
||||
|
||||
$scores = $this->redis->zMscore('key', 'a', 'notamember', 'c');
|
||||
$this->assertEquals([1.0, false, 1.0], $scores);
|
||||
|
||||
$scores = $this->redis->zMscore('wrongkey', 'a', 'b', 'c');
|
||||
$this->assertEquals([false, false, false], $scores);
|
||||
}
|
||||
|
||||
public function testZRemRangeByLex() {
|
||||
if (version_compare($this->version, "2.8.9") < 0) {
|
||||
$this->MarkTestSkipped();
|
||||
|
||||
Reference in New Issue
Block a user