diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-03 18:59:37 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-03 18:59:37 +0200 |
commit | e4c3ff03d60d5b541e483050174b1b7456e4babd (patch) | |
tree | 610434e4b8db7c990f07f5016ec6ba96b5a40364 | |
parent | f87a91fa00ee5e5731792c047029e5f15eb6a609 (diff) | |
parent | 6ed319486387e6b7a80c64409527c7d454d3509d (diff) | |
download | nextcloud-server-e4c3ff03d60d5b541e483050174b1b7456e4babd.tar.gz nextcloud-server-e4c3ff03d60d5b541e483050174b1b7456e4babd.zip |
Merge pull request #8809 from owncloud/appconfig-caching
Improve caching in AppConfig
-rw-r--r-- | lib/private/appconfig.php | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index e2a961b1d6d..f20c4a08426 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] = $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,7 @@ class AppConfig implements \OCP\IAppConfig { ); $this->conn->delete('*PREFIX*appconfig', $where); unset($this->cache[$app]); + unset($this->apps[$app]); } /** @@ -228,28 +248,18 @@ class AppConfig implements \OCP\IAppConfig { return false; } - $fields = '`configvalue`'; - $where = 'WHERE'; - $params = array(); if ($app !== false) { - $fields .= ', `configkey`'; - $where .= ' `appid` = ?'; - $params[] = $app; - $key = 'configkey'; + return $this->getAppValues($app); } else { - $fields .= ', `appid`'; - $where .= ' `configkey` = ?'; - $params[] = $key; - $key = 'appid'; - } - $query = 'SELECT ' . $fields . ' FROM `*PREFIX*appconfig` ' . $where; - $result = $this->conn->executeQuery($query, $params); + $query = 'SELECT `configvalue`, `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = ?'; + $result = $this->conn->executeQuery($query, array($key)); - $values = array(); - while ($row = $result->fetch((\PDO::FETCH_ASSOC))) { - $values[$row[$key]] = $row['configvalue']; - } + $values = array(); + while ($row = $result->fetch((\PDO::FETCH_ASSOC))) { + $values[$row['appid']] = $row['configvalue']; + } - return $values; + return $values; + } } } |