From 08d3afc9710d68de4f0c9a0fc853813f105afa31 Mon Sep 17 00:00:00 2001 From: "Mark A. Hershberger" Date: Fri, 1 Nov 2013 14:24:18 -0400 Subject: [PATCH] Disable $wgContentHandlerUseDB during upgrade where fields don't exist. They can cause problems if, for example, the installation has hooks for UserSaveSettings or UserSaveOptions that try to update a user page. Change-Id: I31078678e8939c897b1357bcb77eb2d26f806f29 Bug: 47271 --- includes/installer/DatabaseUpdater.php | 31 ++++++++++++++++++++++++++ includes/installer/MysqlUpdater.php | 19 +++++++++------- includes/installer/OracleUpdater.php | 3 +++ includes/installer/SqliteUpdater.php | 14 +++++++----- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php index 267b6c5a2c..e56c7a94ee 100644 --- a/includes/installer/DatabaseUpdater.php +++ b/includes/installer/DatabaseUpdater.php @@ -88,6 +88,11 @@ abstract class DatabaseUpdater { */ protected $skipSchema = false; + /** + * Hold the value of $wgContentHandlerUseDB during the upgrade. + */ + protected $holdContentHandlerUseDB = true; + /** * Constructor * @@ -1033,4 +1038,30 @@ abstract class DatabaseUpdater { $cl->execute(); $this->output( "done.\n" ); } + + /** + * Turns off content handler fields during parts of the upgrade + * where they aren't available. + */ + protected function disableContentHandlerUseDB() { + global $wgContentHandlerUseDB; + + if( $wgContentHandlerUseDB ) { + $this->output( "Turning off Content Handler DB fields for this part of upgrade.\n" ); + $this->holdContentHandlerUseDB = $wgContentHandlerUseDB; + $wgContentHandlerUseDB = false; + } + } + + /** + * Turns content handler fields back on. + */ + protected function enableContentHandlerUseDB() { + global $wgContentHandlerUseDB; + + if( $this->holdContentHandlerUseDB ) { + $this->output( "Content Handler DB fields should be usable now.\n" ); + $wgContentHandlerUseDB = $this->holdContentHandlerUseDB; + } + } } diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php index 059407348c..fb675d7323 100644 --- a/includes/installer/MysqlUpdater.php +++ b/includes/installer/MysqlUpdater.php @@ -31,9 +31,11 @@ class MysqlUpdater extends DatabaseUpdater { protected function getCoreUpdateList() { return array( + array( 'disableContentHandlerUseDB' ), + // 1.2 - array( 'addField', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ), - array( 'addField', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ), + array( 'addField', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ), + array( 'addField', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ), array( 'doInterwikiUpdate' ), array( 'doIndexUpdate' ), array( 'addTable', 'hitcounter', 'patch-hitcounter.sql' ), @@ -215,12 +217,13 @@ class MysqlUpdater extends DatabaseUpdater { // 1.21 array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ), array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ), - array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ), - array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ), - array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), - array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ), - array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ), - array( 'addTable', 'sites', 'patch-sites.sql' ), + array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ), + array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ), + array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), + array( 'enableContentHandlerUseDB' ), + array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ), + array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ), + array( 'addTable', 'sites', 'patch-sites.sql' ), array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ), array( 'addField', 'job', 'job_token', 'patch-job_token.sql' ), array( 'addField', 'job', 'job_attempts', 'patch-job_attempts.sql' ), diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php index ec91e57b2f..7b6f49c658 100644 --- a/includes/installer/OracleUpdater.php +++ b/includes/installer/OracleUpdater.php @@ -38,6 +38,8 @@ class OracleUpdater extends DatabaseUpdater { protected function getCoreUpdateList() { return array( + array( 'disableContentHandlerUseDB' ), + // 1.17 array( 'doNamespaceDefaults' ), array( 'doFKRenameDeferr' ), @@ -79,6 +81,7 @@ class OracleUpdater extends DatabaseUpdater { array( 'addField', 'archive', 'ar_id', 'patch-archive-ar_id.sql' ), array( 'addField', 'externallinks', 'el_id', 'patch-externallinks-el_id.sql' ), array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), + array( 'enableContentHandlerUseDB' ), array( 'dropField', 'site_stats', 'ss_admins', 'patch-ss_admins.sql' ), array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ), array( 'addTable', 'sites', 'patch-sites.sql' ), diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php index 020993a2a2..6fa22bc924 100644 --- a/includes/installer/SqliteUpdater.php +++ b/includes/installer/SqliteUpdater.php @@ -31,8 +31,10 @@ class SqliteUpdater extends DatabaseUpdater { protected function getCoreUpdateList() { return array( + array( 'disableContentHandlerUseDB' ), + // 1.14 - array( 'addField', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ), + array( 'addField', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ), array( 'doActiveUsersInit' ), array( 'addField', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ), array( 'sqliteInitialIndexes' ), @@ -94,10 +96,12 @@ class SqliteUpdater extends DatabaseUpdater { // 1.21 array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ), array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ), - array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ), - array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ), - array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), - array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ), + array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ), + array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ), + array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ), + array( 'enableContentHandlerUseDB' ), + + array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ), array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ), array( 'addTable', 'sites', 'patch-sites.sql' ), array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ), -- 2.20.1