Skip to content

Commit

Permalink
Merge branch 'master' of git@github.com:andreiz/php-memcached
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrei Zmievski committed Jun 1, 2009
2 parents 3b228f9 + f627ca6 commit fca2cd4
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 7 deletions.
4 changes: 2 additions & 2 deletions memcached-api.php
Expand Up @@ -79,9 +79,9 @@ public function get( $key, &$cas_token = null, $cache_cb = null ) {}

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 ) {}

Expand Down
17 changes: 12 additions & 5 deletions php_memcached.c
Expand Up @@ -490,28 +490,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
Expand All @@ -524,6 +526,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++;
}
}
Expand Down Expand Up @@ -570,7 +575,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) {
Expand Down Expand Up @@ -2445,12 +2450,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)
Expand Down
37 changes: 37 additions & 0 deletions tests/multi_order.phpt
@@ -0,0 +1,37 @@
--TEST--
Memcached check preserve_order in getMulti
--SKIPIF--
<?php if (!extension_loaded("memcached")) print "skip"; ?>
--FILE--
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211, 1);
$m->addServer('localhost', 11211, 1);

$data = array(
'foo' => 'foo-data',
'bar' => 'bar-data',
'baz' => 'baz-data',
'lol' => 'lol-data',
'kek' => 'kek-data',
);

//$m->setMulti($data, 3600);
foreach ($data as $k => $v) {
$m->set($k, $v, 3600);
}

$null = null;
$got = $m->getMulti(array_keys($data), $null, true);

foreach ($got as $k => $v) {
echo "$k $v\n";
}

?>
--EXPECT--
foo foo-data
bar bar-data
baz baz-data
lol lol-data
kek kek-data

0 comments on commit fca2cd4

Please sign in to comment.