summaryrefslogtreecommitdiff
path: root/includes/cache.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/cache.inc')
-rw-r--r--includes/cache.inc36
1 files changed, 36 insertions, 0 deletions
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);
+ }
}