54 $dbr = $this->dbProvider->getReplicaDatabase();
56 $res = $dbr->newSelectQueryBuilder()
71 ->orderBy(
'site_global_key' )
72 ->caller( __METHOD__ )->fetchResultSet();
74 foreach ( $res as $row ) {
76 $site->setGlobalId( $row->site_global_key );
77 $site->setInternalId( (
int)$row->site_id );
78 $site->setForward( (
bool)$row->site_forward );
79 $site->setGroup( $row->site_group );
80 $site->setLanguageCode( $row->site_language ===
''
84 $site->setSource( $row->site_source );
85 $site->setExtraData( unserialize( $row->site_data ) );
86 $site->setExtraConfig( unserialize( $row->site_config ) );
87 $this->sites[] = $site;
91 $ids = $dbr->newSelectQueryBuilder()
92 ->select( [
'si_site',
'si_type',
'si_key', ] )
93 ->from(
'site_identifiers' )
94 ->caller( __METHOD__ )->fetchResultSet();
96 foreach ( $ids as $id ) {
97 if ( $this->sites->hasInternalId( $id->si_site ) ) {
98 $site = $this->sites->getSiteByInternalId( $id->si_site );
99 $site->addLocalId( $id->si_type, $id->si_key );
100 $this->sites->setSite( $site );
143 $dbw = $this->dbProvider->getPrimaryDatabase();
145 $dbw->startAtomic( __METHOD__ );
150 foreach (
$sites as $site ) {
151 if ( $site->getInternalId() !==
null ) {
152 $internalIds[] = $site->getInternalId();
157 'site_global_key' => $site->getGlobalId(),
158 'site_type' => $site->getType(),
159 'site_group' => $site->getGroup(),
160 'site_source' => $site->getSource(),
161 'site_language' => $site->getLanguageCode() ??
'',
162 'site_protocol' => $site->getProtocol(),
163 'site_domain' => strrev( $site->getDomain() ??
'' ) .
'.',
164 'site_data' => serialize( $site->getExtraData() ),
167 'site_forward' => $site->shouldForward() ? 1 : 0,
168 'site_config' => serialize( $site->getExtraConfig() ),
171 $rowId = $site->getInternalId();
172 if ( $rowId !==
null ) {
173 $dbw->newUpdateQueryBuilder()
176 ->where( [
'site_id' => $rowId ] )
177 ->caller( __METHOD__ )->execute();
179 $dbw->newInsertQueryBuilder()
180 ->insertInto(
'sites' )
182 ->caller( __METHOD__ )->execute();
183 $rowId = $dbw->insertId();
186 foreach ( $site->getLocalIds() as $idType => $ids ) {
187 foreach ( $ids as $id ) {
188 $localIds[] = [ $rowId, $idType, $id ];
193 if ( $internalIds !== [] ) {
194 $dbw->newDeleteQueryBuilder()
195 ->deleteFrom(
'site_identifiers' )
196 ->where( [
'si_site' => $internalIds ] )
197 ->caller( __METHOD__ )->execute();
200 foreach ( $localIds as $localId ) {
201 $dbw->newInsertQueryBuilder()
202 ->insertInto(
'site_identifiers' )
203 ->row( [
'si_site' => $localId[0],
'si_type' => $localId[1],
'si_key' => $localId[2] ] )
204 ->caller( __METHOD__ )->execute();
207 $dbw->endAtomic( __METHOD__ );
229 $dbw = $this->dbProvider->getPrimaryDatabase();
231 $dbw->startAtomic( __METHOD__ );
232 $dbw->newDeleteQueryBuilder()
233 ->deleteFrom(
'sites' )
234 ->where( IDatabase::ALL_ROWS )
235 ->caller( __METHOD__ )->execute();
236 $dbw->newDeleteQueryBuilder()
237 ->deleteFrom(
'site_identifiers' )
238 ->where( IDatabase::ALL_ROWS )
239 ->caller( __METHOD__ )->execute();
240 $dbw->endAtomic( __METHOD__ );