summaryrefslogtreecommitdiffstats
path: root/lib/private/appconfig.php
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2014-06-01 14:04:17 +0200
committerRobin Appelman <icewind@owncloud.com>2014-06-01 14:04:17 +0200
commit91180bfef487ae5e9fcf7890b9b28746c02839cd (patch)
tree7908f0be2075fe5054a408bb6f2a0f1e20ca9d25 /lib/private/appconfig.php
parent2ba5701b1af3ba37061fa0e5fa85aac7abaabea4 (diff)
downloadnextcloud-server-91180bfef487ae5e9fcf7890b9b28746c02839cd.tar.gz
nextcloud-server-91180bfef487ae5e9fcf7890b9b28746c02839cd.zip
Add caching to AppConfig->getApps
Diffstat (limited to 'lib/private/appconfig.php')
-rw-r--r--lib/private/appconfig.php23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php
index e2a961b1d6d..d4ad20816eb 100644
--- a/lib/private/appconfig.php
+++ b/lib/private/appconfig.php
@@ -52,6 +52,11 @@ class AppConfig implements \OCP\IAppConfig {
private $appsLoaded = array();
/**
+ * @var string[]
+ */
+ private $apps = null;
+
+ /**
* @param \OC\DB\Connection $conn
*/
public function __construct(Connection $conn) {
@@ -90,12 +95,16 @@ class AppConfig implements \OCP\IAppConfig {
/**
* Get all apps using the config
+ *
* @return array an array of app ids
*
* This function returns a list of all apps that have at least one
* entry in the appconfig table.
*/
public function getApps() {
+ if (is_array($this->apps)) {
+ return $this->apps;
+ }
$query = 'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`';
$result = $this->conn->executeQuery($query);
@@ -103,11 +112,13 @@ class AppConfig implements \OCP\IAppConfig {
while ($appid = $result->fetchColumn()) {
$apps[] = $appid;
}
+ $this->apps = $apps;
return $apps;
}
/**
* Get the available keys for an app
+ *
* @param string $app the app we are looking for
* @return array an array of key names
*
@@ -123,6 +134,7 @@ class AppConfig implements \OCP\IAppConfig {
/**
* Gets the config value
+ *
* @param string $app app
* @param string $key key
* @param string $default = null, default value if the key does not exist
@@ -142,6 +154,7 @@ class AppConfig implements \OCP\IAppConfig {
/**
* check if a key is set in the appconfig
+ *
* @param string $app
* @param string $key
* @return bool
@@ -153,6 +166,7 @@ class AppConfig implements \OCP\IAppConfig {
/**
* sets a value in the appconfig
+ *
* @param string $app app
* @param string $key key
* @param string $value value
@@ -181,11 +195,15 @@ class AppConfig implements \OCP\IAppConfig {
if (!isset($this->cache[$app])) {
$this->cache[$app] = array();
}
+ if (is_array($this->apps) and array_search($app, $this->apps) === false) {
+ $this->apps[] = $app;
+ }
$this->cache[$app][$key] = $value;
}
/**
* Deletes a key
+ *
* @param string $app app
* @param string $key key
* @return boolean|null
@@ -203,6 +221,7 @@ class AppConfig implements \OCP\IAppConfig {
/**
* Remove app from appconfig
+ *
* @param string $app app
* @return boolean|null
*
@@ -214,6 +233,10 @@ class AppConfig implements \OCP\IAppConfig {
);
$this->conn->delete('*PREFIX*appconfig', $where);
unset($this->cache[$app]);
+ if (is_array($this->apps) and $i = array_search($app, $this->apps) !== false) {
+ unset($this->apps[$i]);
+ }
+ $this->apps = null;
}
/**