From 91180bfef487ae5e9fcf7890b9b28746c02839cd Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 1 Jun 2014 14:04:17 +0200 Subject: [PATCH] Add caching to AppConfig->getApps --- lib/private/appconfig.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index e2a961b1d6..d4ad20816e 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -51,6 +51,11 @@ class AppConfig implements \OCP\IAppConfig { private $appsLoaded = array(); + /** + * @var string[] + */ + private $apps = null; + /** * @param \OC\DB\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; } /**