Refactor a lot of updaters.inc into some classes in the installer code. Still need...
authorChad Horohoe <demon@users.mediawiki.org>
Thu, 8 Jul 2010 14:57:19 +0000 (14:57 +0000)
committerChad Horohoe <demon@users.mediawiki.org>
Thu, 8 Jul 2010 14:57:19 +0000 (14:57 +0000)
includes/AutoLoader.php
includes/installer/Update.php [new file with mode: 0644]
includes/installer/Updaters.php [new file with mode: 0644]
maintenance/updaters.inc

index edb3b97..7c37021 100644 (file)
@@ -421,9 +421,13 @@ $wgAutoloadLocalClasses = array(
        'WebInstaller' => 'includes/installer/WebInstaller.php',
        'WebInstallerOutput' => 'includes/installer/WebInstallerOutput.php',
        'MysqlInstaller' => 'includes/installer/MysqlInstaller.php',
+       'MysqlUpdaters' => 'includes/installer/Updaters.php',
        'PostgresInstaller' => 'includes/installer/PostgresInstaller.php',
        'SqliteInstaller' => 'includes/installer/SqliteInstaller.php',
+       'SqliteUpdaters' => 'includes/installer/Updaters.php',
        'OracleInstaller' => 'includes/installer/OracleInstaller.php',
+       'Update' => 'includes/installer/Update.php',
+       'Updaters' => 'includes/installer/Updaters.php',
 
        # includes/job
        'DoubleRedirectJob' => 'includes/job/DoubleRedirectJob.php',
diff --git a/includes/installer/Update.php b/includes/installer/Update.php
new file mode 100644 (file)
index 0000000..ce820ff
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/*
+ * Class for handling database updates. Roughly based off of updaters.inc, with
+ * a few improvements :)
+ */
+
+class Update {
+
+       // Array of updates to perform on the database
+       protected $updates = array();
+
+       // Thing we'll need
+       protected $db, $updater;
+
+       public function __construct( $db ) {
+               $this->db = $db;
+               switch( $this->db->getType() ) {
+                       case 'mysql':
+                               $this->updater = new MysqlUpdaters();
+                               break;
+                       case 'sqlite':
+                               $this->updater = new SqliteUpdaters();
+                               break;
+                       default:
+                               throw new MWException( __METHOD__ . ' called for unsupported $wgDBtype' );
+               }
+       }
+
+       public function doUpdates() {
+               global $IP;
+               require_once( "$IP/maintenance/updaters.inc" );
+               $this->loadUpdates();
+               foreach ( $this->updates as $version => $updates ) {
+                       foreach( $updates as $params ) {
+                               $func = array_shift( $params );
+                               call_user_func_array( $func, $params );
+                               flush();
+                       }
+                       $this->setAppliedUpdates( $version, $updates );
+               }
+       }
+
+       protected function loadUpdates() {
+               foreach( $this->updater->getUpdates() as $version => $updates ) {
+                       $appliedUpdates = $this->getAppliedUpdates( $version );
+                       if( !$appliedUpdates || count( $appliedUpdates ) != count( $updates ) ) {
+                               $this->updates[ $version ] = $updates;
+                       }
+               }
+       }
+
+       private function getAppliedUpdates( $version ) {
+               $key = "updatelist-$version";
+               $val = $this->db->selectField( 'updatelog', 'ul_value',
+                       array( 'ul_key' => $key ), __METHOD__ );
+               if( !$val ) {
+                       return null;
+               } else {
+                       return unserialize( $val );
+               }
+       }
+
+       private function setAppliedUpdates( $version, $updates = array() ) {
+               $key = "updatelist-$version";
+               $this->db->delete( 'updatelog', array( 'ul_key' => $key ), __METHOD__ );
+               $this->db->insert( 'updatelog',
+                       array( 'ul_key' => $key, 'ul_value' => serialize( $updates ) ),
+                        __METHOD__ );
+       }
+}
diff --git a/includes/installer/Updaters.php b/includes/installer/Updaters.php
new file mode 100644 (file)
index 0000000..93ff6df
--- /dev/null
@@ -0,0 +1,212 @@
+<?php
+/**
+ * All DBs supported by MediaWiki need to implement this. Base interface for
+ * Updaters, which is replacing updaters.inc
+ */
+interface Updaters {
+       /**
+        * Get an array of updates to perform on the database. Should return a
+        * mutli-dimensional array. The main key is the MediaWiki version (1.12,
+        * 1.13...) with the values being arrays of updates, identical to how
+        * updaters.inc did it (for now)
+        *
+        * @return Array
+        */
+       public function getUpdates();
+}
+
+/**
+ * Mysql implementation
+ */
+class MysqlUpdaters implements Updaters {
+
+       public function getUpdates() {
+               return array(
+                       '1.2' => array(
+                               array( 'add_field', 'ipblocks',      'ipb_id',           'patch-ipblocks.sql' ),
+                               array( 'add_field', 'ipblocks',      'ipb_expiry',       'patch-ipb_expiry.sql' ),
+                               array( 'do_interwiki_update' ),
+                               array( 'do_index_update' ),
+                               array( 'add_table', 'hitcounter',                        'patch-hitcounter.sql' ),
+                               array( 'add_field', 'recentchanges', 'rc_type',          'patch-rc_type.sql' ),
+                       ),
+                       '1.3' => array(
+                               array( 'add_field', 'user',          'user_real_name',   'patch-user-realname.sql' ),
+                               array( 'add_table', 'querycache',                        'patch-querycache.sql' ),
+                               array( 'add_table', 'objectcache',                       'patch-objectcache.sql' ),
+                               array( 'add_table', 'categorylinks',                     'patch-categorylinks.sql' ),
+                               array( 'do_old_links_update' ),
+                               array( 'fix_ancient_imagelinks' ),
+                               array( 'add_field', 'recentchanges', 'rc_ip',            'patch-rc_ip.sql' ),
+                       ),
+                       '1.4' => array(
+                               array( 'do_image_name_unique_update' ),
+                               array( 'add_field', 'recentchanges', 'rc_id',            'patch-rc_id.sql' ),
+                               array( 'add_field', 'recentchanges', 'rc_patrolled',     'patch-rc-patrol.sql' ),
+                               array( 'add_table', 'logging',                           'patch-logging.sql' ),
+                               array( 'add_field', 'user',          'user_token',       'patch-user_token.sql' ),
+                               array( 'do_watchlist_update' ),
+                               array( 'do_user_update' ),
+                       ),
+                       '1.5' => array(
+                               array( 'do_schema_restructuring' ),
+                               array( 'add_field', 'logging',       'log_params',       'patch-log_params.sql' ),
+                               array( 'check_bin', 'logging',       'log_title',        'patch-logging-title.sql', ),
+                               array( 'add_field', 'archive',       'ar_rev_id',        'patch-archive-rev_id.sql' ),
+                               array( 'add_field', 'page',          'page_len',         'patch-page_len.sql' ),
+                               array( 'do_inverse_timestamp' ),
+                               array( 'do_text_id' ),
+                               array( 'add_field', 'revision',      'rev_deleted',      'patch-rev_deleted.sql' ),
+                               array( 'add_field', 'image',         'img_width',        'patch-img_width.sql' ),
+                               array( 'add_field', 'image',         'img_metadata',     'patch-img_metadata.sql' ),
+                               array( 'add_field', 'user',          'user_email_token', 'patch-user_email_token.sql' ),
+                               array( 'add_field', 'archive',       'ar_text_id',       'patch-archive-text_id.sql' ),
+                               array( 'do_namespace_size' ),
+                               array( 'add_field', 'image',         'img_media_type',   'patch-img_media_type.sql' ),
+                               array( 'do_pagelinks_update' ),
+                               array( 'do_drop_img_type' ),
+                               array( 'do_user_unique_update' ),
+                               array( 'do_user_groups_update' ),
+                               array( 'add_field', 'site_stats',    'ss_total_pages',   'patch-ss_total_articles.sql' ),
+                               array( 'add_table', 'user_newtalk',                      'patch-usernewtalk2.sql' ),
+                               array( 'add_table', 'transcache',                        'patch-transcache.sql' ),
+                               array( 'add_field', 'interwiki',     'iw_trans',         'patch-interwiki-trans.sql' ),
+                               array( 'add_table', 'trackbacks',                        'patch-trackbacks.sql' ),
+                       ),
+                       '1.6' => array(
+                               array( 'do_watchlist_null' ),
+                               array( 'do_logging_timestamp_index' ),
+                               array( 'add_field', 'ipblocks',        'ipb_range_start',  'patch-ipb_range_start.sql' ),
+                               array( 'do_page_random_update' ),
+                               array( 'add_field', 'user',            'user_registration', 'patch-user_registration.sql' ),
+                               array( 'do_templatelinks_update' ),
+                               array( 'add_table', 'externallinks',                       'patch-externallinks.sql' ),
+                               array( 'add_table', 'job',                                 'patch-job.sql' ),
+                               array( 'add_field', 'site_stats',      'ss_images',        'patch-ss_images.sql' ),
+                               array( 'add_table', 'langlinks',                           'patch-langlinks.sql' ),
+                               array( 'add_table', 'querycache_info',                     'patch-querycacheinfo.sql' ),
+                               array( 'add_table', 'filearchive',                         'patch-filearchive.sql' ),
+                               array( 'add_field', 'ipblocks',        'ipb_anon_only',    'patch-ipb_anon_only.sql' ),
+                               array( 'do_rc_indices_update' ),
+                       ),
+                       '1.9' => array(
+                               array( 'add_field', 'user',          'user_newpass_time', 'patch-user_newpass_time.sql' ),
+                               array( 'add_table', 'redirect',                           'patch-redirect.sql' ),
+                               array( 'add_table', 'querycachetwo',                      'patch-querycachetwo.sql' ),
+                               array( 'add_field', 'ipblocks',      'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ),
+                               array( 'do_backlinking_indices_update' ),
+                               array( 'add_field', 'recentchanges', 'rc_old_len',        'patch-rc_len.sql' ),
+                               array( 'add_field', 'user',          'user_editcount',    'patch-user_editcount.sql' ),
+                       ),
+                       '1.10' => array(
+                               array( 'do_restrictions_update' ),
+                               array( 'add_field', 'logging',       'log_id',           'patch-log_id.sql' ),
+                               array( 'add_field', 'revision',      'rev_parent_id',    'patch-rev_parent_id.sql' ),
+                               array( 'add_field', 'page_restrictions', 'pr_id',        'patch-page_restrictions_sortkey.sql' ),
+                               array( 'add_field', 'revision',      'rev_len',          'patch-rev_len.sql' ),
+                               array( 'add_field', 'recentchanges', 'rc_deleted',       'patch-rc_deleted.sql' ),
+                               array( 'add_field', 'logging',       'log_deleted',      'patch-log_deleted.sql' ),
+                               array( 'add_field', 'archive',       'ar_deleted',       'patch-ar_deleted.sql' ),
+                               array( 'add_field', 'ipblocks',      'ipb_deleted',      'patch-ipb_deleted.sql' ),
+                               array( 'add_field', 'filearchive',   'fa_deleted',       'patch-fa_deleted.sql' ),
+                               array( 'add_field', 'archive',       'ar_len',           'patch-ar_len.sql' ),
+                       ),
+                       '1.11' => array(
+                               array( 'add_field', 'ipblocks',      'ipb_block_email',  'patch-ipb_emailban.sql' ),
+                               array( 'do_categorylinks_indices_update' ),
+                               array( 'add_field', 'oldimage',      'oi_metadata',      'patch-oi_metadata.sql' ),
+                               array( 'do_archive_user_index' ),
+                               array( 'do_image_user_index' ),
+                               array( 'do_oldimage_user_index' ),
+                               array( 'add_field', 'archive',       'ar_page_id',       'patch-archive-page_id.sql' ),
+                               array( 'add_field', 'image',         'img_sha1',         'patch-img_sha1.sql' ),
+                       ),
+                       '1.12' => array(
+                               array( 'add_table', 'protected_titles',                  'patch-protected_titles.sql' ),
+                       ),
+                       '1.13' => array(
+                               array( 'add_field', 'ipblocks',      'ipb_by_text',      'patch-ipb_by_text.sql' ),
+                               array( 'add_table', 'page_props',                        'patch-page_props.sql' ),
+                               array( 'add_table', 'updatelog',                         'patch-updatelog.sql' ),
+                               array( 'add_table', 'category',                          'patch-category.sql' ),
+                               array( 'do_category_population' ),
+                               array( 'add_field', 'archive',       'ar_parent_id',     'patch-ar_parent_id.sql' ),
+                               array( 'add_field', 'user_newtalk',  'user_last_timestamp', 'patch-user_last_timestamp.sql' ),
+                               array( 'do_populate_parent_id' ),
+                               array( 'check_bin', 'protected_titles', 'pt_title',      'patch-pt_title-encoding.sql', ),
+                               array( 'maybe_do_profiling_memory_update' ),
+                               array( 'do_filearchive_indices_update' ),
+                       ),
+                       '1.14' => array(
+                               array( 'add_field', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
+                               array( 'do_active_users_init' ),
+                               array( 'add_field', 'ipblocks',      'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
+                       ),
+                       '1.15' => array(
+                               array( 'do_unique_pl_tl_il' ),
+                               array( 'add_table', 'change_tag',                        'patch-change_tag.sql' ),
+                               array( 'add_table', 'tag_summary',                       'patch-change_tag.sql' ),
+                               array( 'add_table', 'valid_tag',                         'patch-change_tag.sql' ),
+                       ),
+                       '1.16' => array(
+                               array( 'add_table', 'user_properties',                   'patch-user_properties.sql' ),
+                               array( 'add_table', 'log_search',                        'patch-log_search.sql' ),
+                               array( 'do_log_search_population' ),
+                               array( 'add_field', 'logging',       'log_user_text',    'patch-log_user_text.sql' ),
+                               array( 'add_table', 'l10n_cache',                        'patch-l10n_cache.sql' ),
+                               array( 'add_table', 'external_user',                     'patch-external_user.sql' ),
+                               array( 'add_index', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
+                               array( 'add_index', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
+                               array( 'add_field', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
+                               array( 'do_update_transcache_field' ),
+                               array( 'rename_eu_wiki_id' ),
+                               array( 'do_update_mime_minor_field' ),
+                               array( 'do_populate_rev_len' ),
+                       ),
+                       '1.17' => array(
+                               array( 'add_table', 'iwlinks',                           'patch-iwlinks.sql' ),
+                               array( 'add_index', 'iwlinks', 'iwl_prefix_from_title',  'patch-rename-iwl_prefix.sql' ),
+                               array( 'add_field', 'updatelog', 'ul_value',              'patch-ul_value.sql' )
+                       ),
+               );
+       }
+}
+
+/**
+ * Sqlite
+ */
+class SqliteUpdaters implements Updaters {
+       public function getUpdates() {
+               return array(
+                       '1.14' => array(
+                               array( 'add_field', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
+                               array( 'do_active_users_init' ),
+                               array( 'add_field', 'ipblocks',      'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
+                               array( 'sqlite_initial_indexes' ),
+                       ),
+                       '1.15' => array(
+                               array( 'add_table', 'change_tag',                        'patch-change_tag.sql' ),
+                               array( 'add_table', 'tag_summary',                       'patch-change_tag.sql' ),
+                               array( 'add_table', 'valid_tag',                         'patch-change_tag.sql' ),
+                       ),
+                       '1.16' => array(
+                               array( 'add_table', 'user_properties',                   'patch-user_properties.sql' ),
+                               array( 'add_table', 'log_search',                        'patch-log_search.sql' ),
+                               array( 'do_log_search_population' ),
+                               array( 'add_field', 'logging',       'log_user_text',    'patch-log_user_text.sql' ),
+                               array( 'add_table', 'l10n_cache',                        'patch-l10n_cache.sql' ),
+                               array( 'add_table', 'external_user',                     'patch-external_user.sql' ),
+                               array( 'add_index', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
+                               array( 'add_index', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
+                               array( 'add_field', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
+                               array( 'do_update_transcache_field' ),
+                               array( 'sqlite_setup_searchindex' ),
+                       ),
+                       '1.17' => array(
+                               array( 'add_table', 'iwlinks',                            'patch-iwlinks.sql' ),
+                               array( 'add_index', 'iwlinks',   'iwl_prefix_from_title', 'patch-rename-iwl_prefix.sql' ),
+                               array( 'add_field', 'updatelog', 'ul_value',              'patch-ul_value.sql' ),
+                       ),
+               );
+       }
+}
index 9ea5057..33b0cd8 100644 (file)
@@ -15,202 +15,9 @@ require_once 'userDupes.inc';
 require_once( "$IP/includes/Hooks.php" );
 
 /**
- * List of update functions to call for each DB type, in sequence. First item
- * is function name, rest are parameters to pass.
+ * @deprecated. Do not use, ever.
  */
-$wgUpdates = array(
-       'mysql' => array(
-               // 1.2
-               // update_passwords obsolete
-               array( 'add_field', 'ipblocks',      'ipb_id',           'patch-ipblocks.sql' ),
-               array( 'add_field', 'ipblocks',      'ipb_expiry',       'patch-ipb_expiry.sql' ),
-               array( 'do_interwiki_update' ),
-               array( 'do_index_update' ),
-               // do_linkscc_update obsolete
-               array( 'add_table', 'hitcounter',                        'patch-hitcounter.sql' ),
-               array( 'add_field', 'recentchanges', 'rc_type',          'patch-rc_type.sql' ),
-
-               // 1.3
-               array( 'add_field', 'user',          'user_real_name',   'patch-user-realname.sql' ),
-               array( 'add_table', 'querycache',                        'patch-querycache.sql' ),
-               array( 'add_table', 'objectcache',                       'patch-objectcache.sql' ),
-               array( 'add_table', 'categorylinks',                     'patch-categorylinks.sql' ),
-               // do_linkscc_1_3_update obsolete
-               array( 'do_old_links_update' ),
-               array( 'fix_ancient_imagelinks' ),
-               array( 'add_field', 'recentchanges', 'rc_ip',            'patch-rc_ip.sql' ),
-
-               // 1.4
-               array( 'do_image_name_unique_update' ),
-               array( 'add_field', 'recentchanges', 'rc_id',            'patch-rc_id.sql' ),
-               array( 'add_field', 'recentchanges', 'rc_patrolled',     'patch-rc-patrol.sql' ),
-               array( 'add_table', 'logging',                           'patch-logging.sql' ),
-               // do_user_rights_update obsolete
-               array( 'add_field', 'user',          'user_token',       'patch-user_token.sql' ),
-               // old, old_articleid, patch-remove-old-title-namespace.sql obsolete
-               // user_groups, patch-userlevels.sql obsolete
-               // do_group_update() obsolete
-               array( 'do_watchlist_update' ),
-               array( 'do_user_update' ),
-               // do_copy_newtalk_to_watchlist obsolete
-
-               // 1.5
-               array( 'do_schema_restructuring' ),
-               array( 'add_field', 'logging',       'log_params',       'patch-log_params.sql' ),
-               array( 'check_bin', 'logging',       'log_title',        'patch-logging-title.sql', ),
-               array( 'add_field', 'archive',       'ar_rev_id',        'patch-archive-rev_id.sql' ),
-               array( 'add_field', 'page',          'page_len',         'patch-page_len.sql' ),
-               array( 'do_inverse_timestamp' ),
-               array( 'do_text_id' ),
-               array( 'add_field', 'revision',      'rev_deleted',      'patch-rev_deleted.sql' ),
-               array( 'add_field', 'image',         'img_width',        'patch-img_width.sql' ),
-               array( 'add_field', 'image',         'img_metadata',     'patch-img_metadata.sql' ),
-               array( 'add_field', 'user',          'user_email_token', 'patch-user_email_token.sql' ),
-               array( 'add_field', 'archive',       'ar_text_id',       'patch-archive-text_id.sql' ),
-               array( 'do_namespace_size' ),
-               array( 'add_field', 'image',         'img_media_type',   'patch-img_media_type.sql' ),
-               array( 'do_pagelinks_update' ),
-               array( 'do_drop_img_type' ),
-               array( 'do_user_unique_update' ),
-               array( 'do_user_groups_update' ),
-               array( 'add_field', 'site_stats',    'ss_total_pages',   'patch-ss_total_articles.sql' ),
-               array( 'add_table', 'user_newtalk',                      'patch-usernewtalk2.sql' ),
-               array( 'add_table', 'transcache',                        'patch-transcache.sql' ),
-               array( 'add_field', 'interwiki',     'iw_trans',         'patch-interwiki-trans.sql' ),
-               array( 'add_table', 'trackbacks',                        'patch-trackbacks.sql' ),
-
-               // 1.6
-               array( 'do_watchlist_null' ),
-               // do_image_index_update obsolete
-               array( 'do_logging_timestamp_index' ),
-               array( 'add_field', 'ipblocks',        'ipb_range_start',  'patch-ipb_range_start.sql' ),
-               array( 'do_page_random_update' ),
-               array( 'add_field', 'user',            'user_registration', 'patch-user_registration.sql' ),
-               array( 'do_templatelinks_update' ),
-               array( 'add_table', 'externallinks',                       'patch-externallinks.sql' ),
-               array( 'add_table', 'job',                                 'patch-job.sql' ),
-               array( 'add_field', 'site_stats',      'ss_images',        'patch-ss_images.sql' ),
-               array( 'add_table', 'langlinks',                           'patch-langlinks.sql' ),
-               array( 'add_table', 'querycache_info',                     'patch-querycacheinfo.sql' ),
-               array( 'add_table', 'filearchive',                         'patch-filearchive.sql' ),
-               array( 'add_field', 'ipblocks',        'ipb_anon_only',    'patch-ipb_anon_only.sql' ),
-               array( 'do_rc_indices_update' ),
-
-               // 1.9
-               array( 'add_field', 'user',          'user_newpass_time', 'patch-user_newpass_time.sql' ),
-               array( 'add_table', 'redirect',                           'patch-redirect.sql' ),
-               array( 'add_table', 'querycachetwo',                      'patch-querycachetwo.sql' ),
-               array( 'add_field', 'ipblocks',      'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ),
-               array( 'do_backlinking_indices_update' ),
-               array( 'add_field', 'recentchanges', 'rc_old_len',        'patch-rc_len.sql' ),
-               array( 'add_field', 'user',          'user_editcount',    'patch-user_editcount.sql' ),
-
-               // 1.10
-               array( 'do_restrictions_update' ),
-               array( 'add_field', 'logging',       'log_id',           'patch-log_id.sql' ),
-               array( 'add_field', 'revision',      'rev_parent_id',    'patch-rev_parent_id.sql' ),
-               array( 'add_field', 'page_restrictions', 'pr_id',        'patch-page_restrictions_sortkey.sql' ),
-               array( 'add_field', 'revision',      'rev_len',          'patch-rev_len.sql' ),
-               array( 'add_field', 'recentchanges', 'rc_deleted',       'patch-rc_deleted.sql' ),
-               array( 'add_field', 'logging',       'log_deleted',      'patch-log_deleted.sql' ),
-               array( 'add_field', 'archive',       'ar_deleted',       'patch-ar_deleted.sql' ),
-               array( 'add_field', 'ipblocks',      'ipb_deleted',      'patch-ipb_deleted.sql' ),
-               array( 'add_field', 'filearchive',   'fa_deleted',       'patch-fa_deleted.sql' ),
-               array( 'add_field', 'archive',       'ar_len',           'patch-ar_len.sql' ),
-
-               // 1.11
-               array( 'add_field', 'ipblocks',      'ipb_block_email',  'patch-ipb_emailban.sql' ),
-               array( 'do_categorylinks_indices_update' ),
-               array( 'add_field', 'oldimage',      'oi_metadata',      'patch-oi_metadata.sql' ),
-               array( 'do_archive_user_index' ),
-               array( 'do_image_user_index' ),
-               array( 'do_oldimage_user_index' ),
-               array( 'add_field', 'archive',       'ar_page_id',       'patch-archive-page_id.sql' ),
-               array( 'add_field', 'image',         'img_sha1',         'patch-img_sha1.sql' ),
-
-               // 1.12
-               array( 'add_table', 'protected_titles',                  'patch-protected_titles.sql' ),
-
-               // 1.13
-               array( 'add_field', 'ipblocks',      'ipb_by_text',      'patch-ipb_by_text.sql' ),
-               array( 'add_table', 'page_props',                        'patch-page_props.sql' ),
-               array( 'add_table', 'updatelog',                         'patch-updatelog.sql' ),
-               array( 'add_table', 'category',                          'patch-category.sql' ),
-               array( 'do_category_population' ),
-               array( 'add_field', 'archive',       'ar_parent_id',     'patch-ar_parent_id.sql' ),
-               array( 'add_field', 'user_newtalk',  'user_last_timestamp', 'patch-user_last_timestamp.sql' ),
-               array( 'do_populate_parent_id' ),
-               array( 'check_bin', 'protected_titles', 'pt_title',      'patch-pt_title-encoding.sql', ),
-               array( 'maybe_do_profiling_memory_update' ),
-               array( 'do_filearchive_indices_update' ),
-
-               // 1.14
-               array( 'add_field', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
-               array( 'do_active_users_init' ),
-               array( 'add_field', 'ipblocks',      'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
-
-               // 1.15
-               array( 'do_unique_pl_tl_il' ),
-               array( 'add_table', 'change_tag',                        'patch-change_tag.sql' ),
-               array( 'add_table', 'tag_summary',                       'patch-change_tag.sql' ),
-               array( 'add_table', 'valid_tag',                         'patch-change_tag.sql' ),
-
-               // 1.16
-               array( 'add_table', 'user_properties',                   'patch-user_properties.sql' ),
-               array( 'add_table', 'log_search',                        'patch-log_search.sql' ),
-               array( 'do_log_search_population' ),
-               array( 'add_field', 'logging',       'log_user_text',    'patch-log_user_text.sql' ),
-               array( 'add_table', 'l10n_cache',                        'patch-l10n_cache.sql' ),
-               array( 'add_table', 'external_user',                     'patch-external_user.sql' ),
-               array( 'add_index', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
-               array( 'add_index', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
-               array( 'add_field', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
-               array( 'do_update_transcache_field' ),
-               // A field changed name mid-release cycle, so fix it for anyone using
-               // trunk
-               array( 'rename_eu_wiki_id' ),
-               array( 'do_update_mime_minor_field' ),
-               // Should've done this back in 1.10, but better late than never:
-               array( 'do_populate_rev_len' ),
-
-               // 1.17
-               array( 'add_table', 'iwlinks',                           'patch-iwlinks.sql' ),
-               array( 'add_index', 'iwlinks', 'iwl_prefix_from_title',  'patch-rename-iwl_prefix.sql' ),
-               array( 'add_field', 'updatelog', 'ul_value',              'patch-ul_value.sql' ),
-       ),
-
-       'sqlite' => array(
-               // 1.14
-               array( 'add_field', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
-               array( 'do_active_users_init' ),
-               array( 'add_field', 'ipblocks',      'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
-               array( 'sqlite_initial_indexes' ),
-
-               // 1.15
-               array( 'add_table', 'change_tag',                        'patch-change_tag.sql' ),
-               array( 'add_table', 'tag_summary',                       'patch-change_tag.sql' ),
-               array( 'add_table', 'valid_tag',                         'patch-change_tag.sql' ),
-
-               // 1.16
-               array( 'add_table', 'user_properties',                   'patch-user_properties.sql' ),
-               array( 'add_table', 'log_search',                        'patch-log_search.sql' ),
-               array( 'do_log_search_population' ),
-               array( 'add_field', 'logging',       'log_user_text',    'patch-log_user_text.sql' ),
-               array( 'add_table', 'l10n_cache',                        'patch-l10n_cache.sql' ),
-               array( 'add_table', 'external_user',                     'patch-external_user.sql' ),
-               array( 'add_index', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
-               array( 'add_index', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
-               array( 'add_field', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
-               array( 'do_update_transcache_field' ),
-               // version-independent searchindex setup, added in 1.16
-               array( 'sqlite_setup_searchindex' ),
-
-               // 1.17
-               array( 'add_table', 'iwlinks',                            'patch-iwlinks.sql' ),
-               array( 'add_index', 'iwlinks',   'iwl_prefix_from_title', 'patch-rename-iwl_prefix.sql' ),
-               array( 'add_field', 'updatelog', 'ul_value',              'patch-ul_value.sql' ),
-       ),
-);
+$wgUpdates = array();
 
 
 # For extensions only, should be populated via hooks
@@ -1141,7 +948,11 @@ function do_all_updates( $shared = false, $purge = true ) {
                return;
        }
 
-       # Run core updates in sequence...
+       global $wgDatabase;
+       $up = new Update( $wgDatabase );
+       $up->doUpdates();
+
+       // OpenID is still using this stupid thing, or we could kill this too
        global $wgUpdates;
        if ( isset( $wgUpdates[$wgDBtype] ) ) {
                foreach ( $wgUpdates[$wgDBtype] as $params ) {