diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-09-13 17:49:51 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-09-13 17:49:51 +0000 |
commit | e1ad90ba40b74ec103b9113e49b9792b2b422d22 (patch) | |
tree | 2a49dafa4b67c66d53fda4de19a38e0a321a9bb2 | |
parent | b5cee8fe4945c0ebdc621f82992aa9b4eb698b0c (diff) | |
download | drupal-e1ad90ba40b74ec103b9113e49b9792b2b422d22.tar.gz drupal-e1ad90ba40b74ec103b9113e49b9792b2b422d22.zip |
- Patch #575360 by dropcube: added API function to check if a cache bin is empty.
-rw-r--r-- | includes/cache-install.inc | 5 | ||||
-rw-r--r-- | includes/cache.inc | 36 | ||||
-rw-r--r-- | modules/simpletest/tests/cache.test | 37 |
3 files changed, 77 insertions, 1 deletions
diff --git a/includes/cache-install.inc b/includes/cache-install.inc index 3ab41410d16..3be7588eba7 100644 --- a/includes/cache-install.inc +++ b/includes/cache-install.inc @@ -28,5 +28,8 @@ class DrupalFakeCache implements DrupalCacheInterface { function clear($cid = NULL, $wildcard = FALSE) { } - + + function isEmpty() { + return TRUE; + } } diff --git a/includes/cache.inc b/includes/cache.inc index e87e2f889d9..6069ce00416 100644 --- a/includes/cache.inc +++ b/includes/cache.inc @@ -168,6 +168,21 @@ function cache_clear_all($cid = NULL, $bin = NULL, $wildcard = FALSE) { } /** + * Check if a cache bin is empty. + * + * A cache bin is considered empty if it does not contain any valid data for any + * cache ID. + * + * @param $bin + * The cache bin to check. + * @return + * TRUE if the cache bin specified is empty. + */ +function cache_is_empty($bin) { + return _cache_get_object($bin)->isEmpty(); +} + +/** * Interface for cache implementations. * * All cache implementations have to implement this interface. DrupalDatabaseCache @@ -260,6 +275,17 @@ interface DrupalCacheInterface { * match. If '*' is given as $cid, the bin $bin will be emptied. */ function clear($cid = NULL, $wildcard = FALSE); + + /** + * Check if a cache bin is empty. + * + * A cache bin is considered empty if it does not contain any valid data for + * any cache ID. + * + * @return + * TRUE if the cache bin specified is empty. + */ + function isEmpty(); } /** @@ -449,4 +475,14 @@ class DrupalDatabaseCache implements DrupalCacheInterface { } } } + + function isEmpty() { + $this->garbageCollection(); + $query = db_select($this->bin); + $query->addExpression('1'); + $result = $query->range(0, 1) + ->execute() + ->fetchField(); + return empty($result); + } } diff --git a/modules/simpletest/tests/cache.test b/modules/simpletest/tests/cache.test index 8de74b04e2f..0fc9fe298f2 100644 --- a/modules/simpletest/tests/cache.test +++ b/modules/simpletest/tests/cache.test @@ -312,3 +312,40 @@ class CacheClearCase extends CacheTestCase { t('All cache entries removed when the array exceeded the cache clear threshold.')); } } + +/** + * Test cache_is_empty() function. + */ +class CacheIsEmptyCase extends CacheTestCase { + public static function getInfo() { + return array( + 'name' => 'Cache emptiness test', + 'description' => 'Check if a cache bin is empty after performing clear operations.', + 'group' => 'Cache' + ); + } + + function setUp() { + $this->default_bin = 'cache_page'; + $this->default_value = $this->randomName(10); + + parent::setUp(); + } + + /** + * Test clearing using a cid. + */ + function testIsEmpty() { + // Clear the cache bin. + cache_clear_all('*', $this->default_bin); + $this->assertTrue(cache_is_empty($this->default_bin), t('The cache bin is empty')); + // Add some data to the cache bin. + cache_set($this->default_cid, $this->default_value, $this->default_bin); + $this->assertCacheExists(t('Cache was set.'), $this->default_value, $this->default_cid); + $this->assertFalse(cache_is_empty($this->default_bin), t('The cache bin is not empty')); + // Remove the cached data. + cache_clear_all($this->default_cid, $this->default_bin); + $this->assertCacheRemoved(t('Cache was removed.'), $this->default_cid); + $this->assertTrue(cache_is_empty($this->default_bin), t('The cache bin is empty')); + } +} |