From cd4cbf8f733714adf71ba6a35a34d1d25d02c6d6 Mon Sep 17 00:00:00 2001 From: dreamsxin Date: Sun, 20 Oct 2013 10:16:20 +0800 Subject: [PATCH 1/5] Fix bu: xcache only save the first key --- ext/cache/backend/xcache.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ext/cache/backend/xcache.c b/ext/cache/backend/xcache.c index 34f6603db34..7bb05766af0 100644 --- a/ext/cache/backend/xcache.c +++ b/ext/cache/backend/xcache.c @@ -275,13 +275,11 @@ PHP_METHOD(Phalcon_Cache_Backend_Xcache, save){ array_init(keys); } - if (!zend_is_true(keys)) { - phalcon_array_update_zval(&keys, last_key, &ttl, PH_COPY | PH_SEPARATE); - - PHALCON_INIT_VAR(zero); - ZVAL_LONG(zero, 0); - phalcon_call_func_p3_noret("xcache_set", special_key, keys, zero); - } + phalcon_array_update_zval(&keys, last_key, &ttl, PH_COPY | PH_SEPARATE); + + PHALCON_INIT_VAR(zero); + ZVAL_LONG(zero, 0); + phalcon_call_func_p3_noret("xcache_set", special_key, keys, zero); } PHALCON_MM_RESTORE(); From 443f1de04b84cd86353ad9f0acc945f840f5e5be Mon Sep 17 00:00:00 2001 From: dreamsxin Date: Sun, 20 Oct 2013 10:38:48 +0800 Subject: [PATCH 2/5] Updated CacheTest.php --- unit-tests/CacheTest.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/unit-tests/CacheTest.php b/unit-tests/CacheTest.php index 2a33be4d89c..ef635c3653a 100644 --- a/unit-tests/CacheTest.php +++ b/unit-tests/CacheTest.php @@ -682,4 +682,29 @@ public function testDataXcache() $this->assertTrue($cache->delete('test-data')); } + + public function testXcacheQueryKeys() + { + $ready = $this->_prepareXcache(); + if (!$ready) { + return false; + } + + $frontCache = new Phalcon\Cache\Frontend\None(array( + 'lifetime' => 2 + )); + + $cache = new Phalcon\Cache\Backend\Xcache($frontCache); + + + $cache->save('test-one', 'one'); + $cache->save('test-two', 'two'); + + //Query keys + $keys = $cache->queryKeys(); + $this->assertEquals($keys, array( + 0 => 'test-one', + 1 => 'test-two', + )); + } } From e4d4fa559fabd21de2fe9fbb23038a8976954c1e Mon Sep 17 00:00:00 2001 From: dreamsxin Date: Sun, 20 Oct 2013 10:55:29 +0800 Subject: [PATCH 3/5] Updated CacheTest.php --- unit-tests/CacheTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/unit-tests/CacheTest.php b/unit-tests/CacheTest.php index ef635c3653a..b75f489cf6f 100644 --- a/unit-tests/CacheTest.php +++ b/unit-tests/CacheTest.php @@ -690,6 +690,9 @@ public function testXcacheQueryKeys() return false; } + xcache_unset('_PHCXtest-output'); + xcache_unset('_PHCXtest-data'); + $frontCache = new Phalcon\Cache\Frontend\None(array( 'lifetime' => 2 )); From a2ba8ee563cea2606b963f9d43538e54d3a2a02a Mon Sep 17 00:00:00 2001 From: dreamsxin Date: Sun, 20 Oct 2013 11:58:13 +0800 Subject: [PATCH 4/5] Updated CacheTest.php --- unit-tests/CacheTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/unit-tests/CacheTest.php b/unit-tests/CacheTest.php index b75f489cf6f..3f67ec71986 100644 --- a/unit-tests/CacheTest.php +++ b/unit-tests/CacheTest.php @@ -690,9 +690,6 @@ public function testXcacheQueryKeys() return false; } - xcache_unset('_PHCXtest-output'); - xcache_unset('_PHCXtest-data'); - $frontCache = new Phalcon\Cache\Frontend\None(array( 'lifetime' => 2 )); @@ -700,6 +697,9 @@ public function testXcacheQueryKeys() $cache = new Phalcon\Cache\Backend\Xcache($frontCache); + $cache->delete('test-output'); + $cache->delete('test-data'); + $cache->save('test-one', 'one'); $cache->save('test-two', 'two'); From 2127e215f38352d019f4d4e9ad17af4c3b5910c6 Mon Sep 17 00:00:00 2001 From: dreamsxin Date: Sun, 20 Oct 2013 12:05:34 +0800 Subject: [PATCH 5/5] Fix bug: xcache delete not unset key --- ext/cache/backend/xcache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/cache/backend/xcache.c b/ext/cache/backend/xcache.c index 7bb05766af0..928eef91443 100644 --- a/ext/cache/backend/xcache.c +++ b/ext/cache/backend/xcache.c @@ -320,7 +320,7 @@ PHP_METHOD(Phalcon_Cache_Backend_Xcache, delete){ if (Z_TYPE_P(keys) == IS_ARRAY) { PHALCON_INIT_VAR(zero); ZVAL_LONG(zero, 0); - phalcon_array_unset(&keys, special_key, PH_SEPARATE); + phalcon_array_unset(&keys, prefixed_key, PH_SEPARATE); phalcon_call_func_p3_noret("xcache_set", special_key, keys, zero); }