mirror of
https://github.com/php-win-ext/php-memcached.git
synced 2026-03-24 00:52:18 +01:00
Added preserve_order (boolean) to getMulti. This will return an assoc array back in same order as the keys were requested. If the value is not found, a NULL is set for that key.
Signed-off-by: Andrei Zmievski <andrei@gravitonic.com>
This commit is contained in:
committed by
Andrei Zmievski
parent
7edcdf94dd
commit
6ea7695d08
@@ -79,9 +79,9 @@ class Memcached {
|
||||
|
||||
public function getByKey( $server_key, $key, $cache_cb = null ) {}
|
||||
|
||||
public function getMulti( array $keys, &$cas_tokens = null ) {}
|
||||
public function getMulti( array $keys, &$cas_tokens = null, $preserve_order = false ) {}
|
||||
|
||||
public function getMultiByKey( $server_key, array $keys, &$cas_tokens = null ) {}
|
||||
public function getMultiByKey( $server_key, array $keys, &$cas_tokens = null, $preserve_order = false ) {}
|
||||
|
||||
public function getDelayed( array $keys, $with_cas = null, $value_cb = null ) {}
|
||||
|
||||
|
||||
@@ -488,28 +488,30 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
|
||||
zval *cas_tokens = NULL;
|
||||
uint64_t orig_cas_flag;
|
||||
zval *value;
|
||||
zend_bool preserve_order = 0;
|
||||
int i = 0;
|
||||
memcached_result_st result;
|
||||
memcached_return status = MEMCACHED_SUCCESS;
|
||||
MEMC_METHOD_INIT_VARS;
|
||||
|
||||
if (by_key) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|z", &server_key,
|
||||
&server_key_len, &keys, &cas_tokens) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|zb", &server_key,
|
||||
&server_key_len, &keys, &cas_tokens,&preserve_order) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|z", &keys, &cas_tokens) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|zb", &keys, &cas_tokens, &preserve_order) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MEMC_METHOD_FETCH_OBJECT;
|
||||
MEMC_G(rescode) = MEMCACHED_SUCCESS;
|
||||
|
||||
num_keys = zend_hash_num_elements(Z_ARRVAL_P(keys));
|
||||
mkeys = safe_emalloc(num_keys, sizeof(char *), 0);
|
||||
mkeys_len = safe_emalloc(num_keys, sizeof(size_t), 0);
|
||||
array_init(return_value);
|
||||
|
||||
/*
|
||||
* Create the array of keys for libmemcached. If none of the keys were valid
|
||||
@@ -522,6 +524,9 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
|
||||
if (Z_TYPE_PP(entry) == IS_STRING && Z_STRLEN_PP(entry) > 0) {
|
||||
mkeys[i] = Z_STRVAL_PP(entry);
|
||||
mkeys_len[i] = Z_STRLEN_PP(entry);
|
||||
if(preserve_order) {
|
||||
add_assoc_null_ex(return_value, mkeys[i], mkeys_len[i]+1);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@@ -568,7 +573,7 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
|
||||
zval_dtor(cas_tokens);
|
||||
array_init(cas_tokens);
|
||||
}
|
||||
array_init(return_value);
|
||||
|
||||
status = MEMCACHED_SUCCESS;
|
||||
memcached_result_create(i_obj->memc, &result);
|
||||
while ((memcached_fetch_result(i_obj->memc, &result, &status)) != NULL) {
|
||||
@@ -2443,12 +2448,14 @@ ZEND_END_ARG_INFO()
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_getMulti, 0, 0, 1)
|
||||
ZEND_ARG_ARRAY_INFO(0, keys, 0)
|
||||
ZEND_ARG_INFO(1, cas_tokens)
|
||||
ZEND_ARG_INFO(0, preserve_order)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_getMultiByKey, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, server_key)
|
||||
ZEND_ARG_ARRAY_INFO(0, keys, 0)
|
||||
ZEND_ARG_INFO(1, cas_tokens)
|
||||
ZEND_ARG_INFO(0, preserve_order)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_getDelayed, 0, 0, 1)
|
||||
|
||||
Reference in New Issue
Block a user