Skip to content
Snippets Groups Projects
Commit 91180bfe authored by Robin Appelman's avatar Robin Appelman
Browse files

Add caching to AppConfig->getApps

parent 2ba5701b
No related branches found
No related tags found
No related merge requests found
...@@ -51,6 +51,11 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -51,6 +51,11 @@ class AppConfig implements \OCP\IAppConfig {
private $appsLoaded = array(); private $appsLoaded = array();
/**
* @var string[]
*/
private $apps = null;
/** /**
* @param \OC\DB\Connection $conn * @param \OC\DB\Connection $conn
*/ */
...@@ -90,12 +95,16 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -90,12 +95,16 @@ class AppConfig implements \OCP\IAppConfig {
/** /**
* Get all apps using the config * Get all apps using the config
*
* @return array an array of app ids * @return array an array of app ids
* *
* This function returns a list of all apps that have at least one * This function returns a list of all apps that have at least one
* entry in the appconfig table. * entry in the appconfig table.
*/ */
public function getApps() { public function getApps() {
if (is_array($this->apps)) {
return $this->apps;
}
$query = 'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`'; $query = 'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`';
$result = $this->conn->executeQuery($query); $result = $this->conn->executeQuery($query);
...@@ -103,11 +112,13 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -103,11 +112,13 @@ class AppConfig implements \OCP\IAppConfig {
while ($appid = $result->fetchColumn()) { while ($appid = $result->fetchColumn()) {
$apps[] = $appid; $apps[] = $appid;
} }
$this->apps = $apps;
return $apps; return $apps;
} }
/** /**
* Get the available keys for an app * Get the available keys for an app
*
* @param string $app the app we are looking for * @param string $app the app we are looking for
* @return array an array of key names * @return array an array of key names
* *
...@@ -123,6 +134,7 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -123,6 +134,7 @@ class AppConfig implements \OCP\IAppConfig {
/** /**
* Gets the config value * Gets the config value
*
* @param string $app app * @param string $app app
* @param string $key key * @param string $key key
* @param string $default = null, default value if the key does not exist * @param string $default = null, default value if the key does not exist
...@@ -142,6 +154,7 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -142,6 +154,7 @@ class AppConfig implements \OCP\IAppConfig {
/** /**
* check if a key is set in the appconfig * check if a key is set in the appconfig
*
* @param string $app * @param string $app
* @param string $key * @param string $key
* @return bool * @return bool
...@@ -153,6 +166,7 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -153,6 +166,7 @@ class AppConfig implements \OCP\IAppConfig {
/** /**
* sets a value in the appconfig * sets a value in the appconfig
*
* @param string $app app * @param string $app app
* @param string $key key * @param string $key key
* @param string $value value * @param string $value value
...@@ -181,11 +195,15 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -181,11 +195,15 @@ class AppConfig implements \OCP\IAppConfig {
if (!isset($this->cache[$app])) { if (!isset($this->cache[$app])) {
$this->cache[$app] = array(); $this->cache[$app] = array();
} }
if (is_array($this->apps) and array_search($app, $this->apps) === false) {
$this->apps[] = $app;
}
$this->cache[$app][$key] = $value; $this->cache[$app][$key] = $value;
} }
/** /**
* Deletes a key * Deletes a key
*
* @param string $app app * @param string $app app
* @param string $key key * @param string $key key
* @return boolean|null * @return boolean|null
...@@ -203,6 +221,7 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -203,6 +221,7 @@ class AppConfig implements \OCP\IAppConfig {
/** /**
* Remove app from appconfig * Remove app from appconfig
*
* @param string $app app * @param string $app app
* @return boolean|null * @return boolean|null
* *
...@@ -214,6 +233,10 @@ class AppConfig implements \OCP\IAppConfig { ...@@ -214,6 +233,10 @@ class AppConfig implements \OCP\IAppConfig {
); );
$this->conn->delete('*PREFIX*appconfig', $where); $this->conn->delete('*PREFIX*appconfig', $where);
unset($this->cache[$app]); unset($this->cache[$app]);
if (is_array($this->apps) and $i = array_search($app, $this->apps) !== false) {
unset($this->apps[$i]);
}
$this->apps = null;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment