]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/filerepo/ForeignDBViaLBRepo.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / filerepo / ForeignDBViaLBRepo.php
1 <?php
2 /**
3  * A foreign repository with a MediaWiki database accessible via the configured LBFactory.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup FileRepo
22  */
23
24 /**
25  * A foreign repository with a MediaWiki database accessible via the configured LBFactory
26  *
27  * @ingroup FileRepo
28  */
29 class ForeignDBViaLBRepo extends LocalRepo {
30         /** @var string */
31         protected $wiki;
32
33         /** @var string */
34         protected $dbName;
35
36         /** @var string */
37         protected $tablePrefix;
38
39         /** @var array */
40         protected $fileFactory = [ 'ForeignDBFile', 'newFromTitle' ];
41
42         /** @var array */
43         protected $fileFromRowFactory = [ 'ForeignDBFile', 'newFromRow' ];
44
45         /** @var bool */
46         protected $hasSharedCache;
47
48         /**
49          * @param array|null $info
50          */
51         function __construct( $info ) {
52                 parent::__construct( $info );
53                 $this->wiki = $info['wiki'];
54                 list( $this->dbName, $this->tablePrefix ) = wfSplitWikiID( $this->wiki );
55                 $this->hasSharedCache = $info['hasSharedCache'];
56         }
57
58         /**
59          * @return IDatabase
60          */
61         function getMasterDB() {
62                 return wfGetLB( $this->wiki )->getConnectionRef( DB_MASTER, [], $this->wiki );
63         }
64
65         /**
66          * @return IDatabase
67          */
68         function getReplicaDB() {
69                 return wfGetLB( $this->wiki )->getConnectionRef( DB_REPLICA, [], $this->wiki );
70         }
71
72         /**
73          * @return Closure
74          */
75         protected function getDBFactory() {
76                 return function ( $index ) {
77                         return wfGetLB( $this->wiki )->getConnectionRef( $index, [], $this->wiki );
78                 };
79         }
80
81         function hasSharedCache() {
82                 return $this->hasSharedCache;
83         }
84
85         /**
86          * Get a key on the primary cache for this repository.
87          * Returns false if the repository's cache is not accessible at this site.
88          * The parameters are the parts of the key, as for wfMemcKey().
89          * @return bool|string
90          */
91         function getSharedCacheKey( /*...*/ ) {
92                 if ( $this->hasSharedCache() ) {
93                         $args = func_get_args();
94                         array_unshift( $args, $this->wiki );
95
96                         return implode( ':', $args );
97                 } else {
98                         return false;
99                 }
100         }
101
102         protected function assertWritableRepo() {
103                 throw new MWException( static::class . ': write operations are not supported.' );
104         }
105
106         public function getInfo() {
107                 return FileRepo::getInfo();
108         }
109 }