Commit e1ad90ba authored by Dries's avatar Dries

- Patch #575360 by dropcube: added API function to check if a cache bin is empty.

parent b5cee8fe
......@@ -28,5 +28,8 @@ function set($cid, $data, $expire = CACHE_PERMANENT, array $headers = NULL) {
function clear($cid = NULL, $wildcard = FALSE) {
}
function isEmpty() {
return TRUE;
}
}
......@@ -167,6 +167,21 @@ function cache_clear_all($cid = NULL, $bin = NULL, $wildcard = FALSE) {
return _cache_get_object($bin)->clear($cid, $wildcard);
}
/**
* 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.
*
......@@ -260,6 +275,17 @@ function set($cid, $data, $expire = CACHE_PERMANENT, array $headers = NULL);
* 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 @@ function clear($cid = NULL, $wildcard = FALSE) {
}
}
}
function isEmpty() {
$this->garbageCollection();
$query = db_select($this->bin);
$query->addExpression('1');
$result = $query->range(0, 1)
->execute()
->fetchField();
return empty($result);
}
}
......@@ -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'));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment