]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add caching to AppConfig->getApps
authorRobin Appelman <icewind@owncloud.com>
Sun, 1 Jun 2014 12:04:17 +0000 (14:04 +0200)
committerRobin Appelman <icewind@owncloud.com>
Sun, 1 Jun 2014 12:04:17 +0000 (14:04 +0200)
lib/private/appconfig.php

index e2a961b1d6d90ce16e178793b193434e945cbe6e..d4ad20816eb0eb9ea2b2866769a88f58672eea06 100644 (file)
@@ -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;
        }
 
        /**