* LoadExtensionSchemaUpdates hook.
*/
private function loadExtensions() {
- if ( !defined( 'MEDIAWIKI_INSTALL' ) ) {
+ if ( !defined( 'MEDIAWIKI_INSTALL' ) || defined( 'MW_EXTENSIONS_LOADED' ) ) {
return; // already loaded
}
$vars = Installer::getExistingLocalSettings();
// This will automatically add "AutoloadClasses" to $wgAutoloadClasses
$data = $registry->readFromQueue( $queue );
- $hooks = [ 'wgHooks' => [ 'LoadExtensionSchemaUpdates' => [] ] ];
+ $hooks = [];
if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
$hooks = $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'];
}
* Sets the number of active users in the site_stats table
*/
protected function doActiveUsersInit() {
- $activeUsers = $this->db->selectField( 'site_stats', 'ss_active_users', false, __METHOD__ );
+ $activeUsers = $this->db->selectField( 'site_stats', 'ss_active_users', '', __METHOD__ );
if ( $activeUsers == -1 ) {
$activeUsers = $this->db->selectField( 'recentchanges',
'COUNT( DISTINCT rc_user_text )',
"maintenance/migrateComments.php.\n"
);
$task = $this->maintenance->runChild( MigrateComments::class, 'migrateComments.php' );
- $task->execute();
- $this->output( "done.\n" );
+ $ok = $task->execute();
+ $this->output( $ok ? "done.\n" : "errors were encountered.\n" );
+ }
+ }
+
+ /**
+ * Migrate actors to the new 'actor' table
+ * @since 1.31
+ */
+ protected function migrateActors() {
+ global $wgActorTableSchemaMigrationStage;
+ if ( $wgActorTableSchemaMigrationStage >= MIGRATION_WRITE_NEW &&
+ !$this->updateRowExists( 'MigrateActors' )
+ ) {
+ $this->output(
+ "Migrating actors to the 'actor' table, printing progress markers. For large\n" .
+ "databases, you may want to hit Ctrl-C and do this manually with\n" .
+ "maintenance/migrateActors.php.\n"
+ );
+ $task = $this->maintenance->runChild( 'MigrateActors', 'migrateActors.php' );
+ $ok = $task->execute();
+ $this->output( $ok ? "done.\n" : "errors were encountered.\n" );
}
}
* @since 1.31
*/
protected function migrateArchiveText() {
- $this->output( "Migrating archive ar_text to modern storage.\n" );
- $task = $this->maintenance->runChild( MigrateArchiveText::class, 'migrateArchiveText.php' );
- $task->execute();
- $this->output( "done.\n" );
+ if ( $this->db->fieldExists( 'archive', 'ar_text', __METHOD__ ) ) {
+ $this->output( "Migrating archive ar_text to modern storage.\n" );
+ $task = $this->maintenance->runChild( MigrateArchiveText::class, 'migrateArchiveText.php' );
+ $task->setForce();
+ if ( $task->execute() ) {
+ $this->applyPatch( 'patch-drop-ar_text.sql', false,
+ 'Dropping ar_text and ar_flags columns' );
+ }
+ }
}
+ /**
+ * Populate ar_rev_id, then make it not nullable
+ * @since 1.31
+ */
+ protected function populateArchiveRevId() {
+ $info = $this->db->fieldInfo( 'archive', 'ar_rev_id', __METHOD__ );
+ if ( !$info ) {
+ throw new MWException( 'Missing ar_rev_id field of archive table. Should not happen.' );
+ }
+ if ( $info->isNullable() ) {
+ $this->output( "Populating ar_rev_id.\n" );
+ $task = $this->maintenance->runChild( 'PopulateArchiveRevId', 'populateArchiveRevId.php' );
+ if ( $task->execute() ) {
+ $this->applyPatch( 'patch-ar_rev_id-not-null.sql', false,
+ 'Making ar_rev_id not nullable' );
+ }
+ }
+ }
+
}