Merge "Update limit/urlwidth param doc of prop=imageinfo"
[lhc/web/wiklou.git] / includes / site / SiteSQLStore.php
index 470fe26..4123805 100644 (file)
@@ -47,6 +47,11 @@ class SiteSQLStore implements SiteStore {
         */
        private $cacheKey = null;
 
+       /**
+        * @var int
+        */
+       private $cacheTimeout = 3600;
+
        /**
         * @since 1.21
         *
@@ -88,6 +93,8 @@ class SiteSQLStore implements SiteStore {
         * @return String The cache key.
         */
        protected function getCacheKey() {
+               wfProfileIn( __METHOD__ );
+
                if ( $this->cacheKey === null ) {
                        $type = 'SiteList#' . SiteList::getSerialVersionId();
                        $source = $this->sitesTable->getName();
@@ -99,6 +106,7 @@ class SiteSQLStore implements SiteStore {
                        $this->cacheKey = wfMemcKey( "$source/$type" );
                }
 
+               wfProfileOut( __METHOD__ );
                return $this->cacheKey;
        }
 
@@ -112,6 +120,8 @@ class SiteSQLStore implements SiteStore {
         * @return SiteList
         */
        public function getSites( $source = 'cache' ) {
+               wfProfileIn( __METHOD__ );
+
                if ( $source === 'cache' ) {
                        if ( $this->sites === null ) {
                                $cache = wfGetMainCache();
@@ -128,6 +138,7 @@ class SiteSQLStore implements SiteStore {
                        $this->loadSites();
                }
 
+               wfProfileOut( __METHOD__ );
                return $this->sites;
        }
 
@@ -141,10 +152,14 @@ class SiteSQLStore implements SiteStore {
         * @return Site
         */
        protected function siteFromRow( ORMRow $siteRow ) {
+               wfProfileIn( __METHOD__ );
+
                $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
 
                $site->setGlobalId( $siteRow->getField( 'global_key' ) );
 
+               $site->setInternalId( $siteRow->getField( 'id' ) );
+
                if ( $siteRow->hasField( 'forward' ) ) {
                        $site->setForward( $siteRow->getField( 'forward' ) );
                }
@@ -169,6 +184,7 @@ class SiteSQLStore implements SiteStore {
                        $site->setExtraConfig( $siteRow->getField( 'config' ) );
                }
 
+               wfProfileOut( __METHOD__ );
                return $site;
        }
 
@@ -178,6 +194,8 @@ class SiteSQLStore implements SiteStore {
         * @since 1.21
         */
        protected function loadSites() {
+               wfProfileIn( __METHOD__ );
+
                $this->sites = new SiteList();
 
                foreach ( $this->sitesTable->select() as $siteRow ) {
@@ -205,7 +223,9 @@ class SiteSQLStore implements SiteStore {
                }
 
                $cache = wfGetMainCache();
-               $cache->set( $this->getCacheKey(), $this->sites );
+               $cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -219,8 +239,11 @@ class SiteSQLStore implements SiteStore {
         * @return Site|null
         */
        public function getSite( $globalId, $source = 'cache' ) {
+               wfProfileIn( __METHOD__ );
+
                $sites = $this->getSites( $source );
 
+               wfProfileOut( __METHOD__ );
                return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
        }
 
@@ -247,7 +270,10 @@ class SiteSQLStore implements SiteStore {
         * @return boolean Success indicator
         */
        public function saveSites( array $sites ) {
+               wfProfileIn( __METHOD__ );
+
                if ( empty( $sites ) ) {
+                       wfProfileOut( __METHOD__ );
                        return true;
                }
 
@@ -323,6 +349,7 @@ class SiteSQLStore implements SiteStore {
                // purge cache
                $this->reset();
 
+               wfProfileOut( __METHOD__ );
                return $success;
        }
 
@@ -333,10 +360,13 @@ class SiteSQLStore implements SiteStore {
         * @since 1.21
         */
        public function reset() {
+               wfProfileIn( __METHOD__ );
                // purge cache
                $cache = wfGetMainCache();
                $cache->delete( $this->getCacheKey() );
                $this->sites = null;
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -347,6 +377,7 @@ class SiteSQLStore implements SiteStore {
         * @return bool success
         */
        public function clear() {
+               wfProfileIn( __METHOD__ );
                $dbw = $this->sitesTable->getWriteDbConnection();
 
                $trx = $dbw->trxLevel();
@@ -364,6 +395,7 @@ class SiteSQLStore implements SiteStore {
 
                $this->reset();
 
+               wfProfileOut( __METHOD__ );
                return $ok;
        }
 
@@ -439,7 +471,13 @@ class Sites extends SiteSQLStore {
         * @return SiteStore
         */
        public static function singleton() {
-               return new static();
+               static $singleton;
+
+               if ( $singleton === null ) {
+                       $singleton = new static();
+               }
+
+               return $singleton;
        }
 
        /**