Browse Source

Prefixing group names in WincacheEngine

Jose Lorenzo Rodriguez 14 years ago
parent
commit
ffdd98be1b

+ 18 - 3
lib/Cake/Cache/Engine/WincacheEngine.php

@@ -27,6 +27,14 @@
 class WincacheEngine extends CacheEngine {
 
 /**
+ * Contains the compiled group names
+ * (prefixed witht the global configuration prefix)
+ *
+ * @var array
+ **/
+	protected $_compiledGroupNames = array();
+
+/**
  * Initialize the Cache Engine
  *
  * Called automatically by the cache frontend
@@ -142,10 +150,17 @@ class WincacheEngine extends CacheEngine {
  * @return array
  **/
 	public function groups() {
-		$groups = wincache_ucache_get($this->settings['groups']);
+		$groups = $this->_compiledGroupNames;
+		if (empty($groups)) {
+			foreach ($this->settings['groups'] as $group) {
+				$groups[] = $this->settings['prefix'] . $group;
+			}
+			$this->_compiledGroupNames = $groups;
+		}
+		$groups = wincache_ucache_get($groups);
 
 		if (count($groups) !== count($this->settings['groups'])) {
-			foreach ($this->settings['groups'] as $group) {
+			foreach ($this->_compiledGroupNames as $group) {
 				if (!isset($groups[$group])) {
 					wincache_ucache_set($group, 1);
 					$groups[$group] = 1;
@@ -168,7 +183,7 @@ class WincacheEngine extends CacheEngine {
  * @return boolean success
  **/
 	public function clearGroup($group) {
-		wincache_ucache_inc($group, 1, $success);
+		wincache_ucache_inc($this->settings['prefix'] . $group, 1, $success);
 		return $success;
 	}
 

+ 20 - 5
lib/Cake/Test/Case/Cache/Engine/WincacheEngineTest.php

@@ -198,16 +198,21 @@ class WincacheEngineTest extends CakeTestCase {
  * @return void
  */
 	public function testGroupsReadWrite() {
-		Cache::config('wincache_groups', array('engine' => 'Wincache', 'duration' => 0, 'groups' => array('group_a', 'group_b')));
+		Cache::config('wincache_groups', array(
+			'engine' => 'Wincache',
+			'duration' => 0,
+			'groups' => array('group_a', 'group_b'),
+			'prefix' => 'test_'
+		));
 		$this->assertTrue(Cache::write('test_groups', 'value', 'wincache_groups'));
 		$this->assertEquals('value', Cache::read('test_groups', 'wincache_groups'));
 
-		wincache_ucache_inc('group_a');
+		wincache_ucache_inc('test_group_a');
 		$this->assertFalse(Cache::read('test_groups', 'wincache_groups'));
 		$this->assertTrue(Cache::write('test_groups', 'value2', 'wincache_groups'));
 		$this->assertEquals('value2', Cache::read('test_groups', 'wincache_groups'));
 
-		wincache_ucache_inc('group_b');
+		wincache_ucache_inc('test_group_b');
 		$this->assertFalse(Cache::read('test_groups', 'wincache_groups'));
 		$this->assertTrue(Cache::write('test_groups', 'value3', 'wincache_groups'));
 		$this->assertEquals('value3', Cache::read('test_groups', 'wincache_groups'));
@@ -219,7 +224,12 @@ class WincacheEngineTest extends CakeTestCase {
  * @return void
  */
 	public function testGroupDelete() {
-		Cache::config('wincache_groups', array('engine' => 'Wincache', 'duration' => 0, 'groups' => array('group_a', 'group_b')));
+		Cache::config('wincache_groups', array(
+			'engine' => 'Wincache',
+			'duration' => 0,
+			'groups' => array('group_a', 'group_b'),
+			'prefix' => 'test_'
+		));
 		$this->assertTrue(Cache::write('test_groups', 'value', 'wincache_groups'));
 		$this->assertEquals('value', Cache::read('test_groups', 'wincache_groups'));
 		$this->assertTrue(Cache::delete('test_groups', 'wincache_groups'));
@@ -233,7 +243,12 @@ class WincacheEngineTest extends CakeTestCase {
  * @return void
  **/
 	public function testGroupClear() {
-		Cache::config('wincache_groups', array('engine' => 'Wincache', 'duration' => 0, 'groups' => array('group_a', 'group_b')));
+		Cache::config('wincache_groups', array(
+			'engine' => 'Wincache',
+			'duration' => 0,
+			'groups' => array('group_a', 'group_b'),
+			'prefix' => 'test_'
+		));
 
 		$this->assertTrue(Cache::write('test_groups', 'value', 'wincache_groups'));
 		$this->assertTrue(Cache::clearGroup('group_a', 'wincache_groups'));