summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-09-13 17:49:51 +0000
committerDries Buytaert <dries@buytaert.net>2009-09-13 17:49:51 +0000
commite1ad90ba40b74ec103b9113e49b9792b2b422d22 (patch)
tree2a49dafa4b67c66d53fda4de19a38e0a321a9bb2
parentb5cee8fe4945c0ebdc621f82992aa9b4eb698b0c (diff)
downloadbrdo-e1ad90ba40b74ec103b9113e49b9792b2b422d22.tar.gz
brdo-e1ad90ba40b74ec103b9113e49b9792b2b422d22.tar.bz2
- Patch #575360 by dropcube: added API function to check if a cache bin is empty.
-rw-r--r--includes/cache-install.inc5
-rw-r--r--includes/cache.inc36
-rw-r--r--modules/simpletest/tests/cache.test37
3 files changed, 77 insertions, 1 deletions
diff --git a/includes/cache-install.inc b/includes/cache-install.inc
index 3ab41410d..3be7588eb 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 e87e2f889..6069ce004 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 8de74b04e..0fc9fe298 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'));
+ }
+}