<?php
/**
- * @addtogroup Maintenance
+ * @file
+ * @ingroup Maintenance
*/
- /** */
-
if ( !defined( 'MEDIAWIKI' ) ) {
echo "This file is not a valid entry point\n";
exit( 1 );
// 1.5
array( 'do_schema_restructuring' ),
array( 'add_field', 'logging', 'log_params', 'patch-log_params.sql' ),
- array( 'do_logging_encoding' ),
+ 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( '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_timestamp', 'patch-user_timestamp.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.4 betas were missing the 'binary' marker from logging.log_title,
* which causes a collation mismatch error on joins in MySQL 4.1.
*/
-function do_logging_encoding() {
+function check_bin( $table, $field, $patchFile ) {
global $wgDatabase, $wgDBtype;
if ($wgDBtype != 'mysql')
return;
- $logging = $wgDatabase->tableName( 'logging' );
- $res = $wgDatabase->query( "SELECT log_title FROM $logging LIMIT 0" );
+ $tableName = $wgDatabase->tableName( $table );
+ $res = $wgDatabase->query( "SELECT $field FROM $tableName LIMIT 0" );
$flags = explode( ' ', mysql_field_flags( $res->result, 0 ) );
$wgDatabase->freeResult( $res );
if( in_array( 'binary', $flags ) ) {
- echo "Logging table has correct title encoding.\n";
+ echo "$table table has correct $field encoding.\n";
} else {
- echo "Fixing title encoding on logging table... ";
- dbsource( archive( 'patch-logging-title.sql' ), $wgDatabase );
+ echo "Fixing $field encoding on $table table... ";
+ dbsource( archive( $patchFile ), $wgDatabase );
echo "ok\n";
}
}
!index_has_field('imagelinks', 'il_to', 'il_from'))
{
dbsource( archive( 'patch-backlinkindexes.sql' ) );
+ echo( "...backlinking indices updated\n" );
}
}
if (!index_has_field('categorylinks', 'cl_sortkey', 'cl_from'))
{
dbsource( archive( 'patch-categorylinksindex.sql' ) );
+ echo( "...categorylinks indices updated\n" );
+ }
+}
+
+function do_filearchive_indices_update() {
+ global $wgDatabase;
+ echo( "Checking filearchive indices...\n" );
+ $info = $wgDatabase->indexInfo( 'filearchive', 'fa_user_timestamp', __METHOD__ );
+ if ( !$info )
+ {
+ dbsource( archive( 'patch-filearhive-user-index.sql' ) );
+ echo( "...filearchive indices updated\n" );
+ }
+}
+
+function maybe_do_profiling_memory_update() {
+ global $wgDatabase;
+ if ( !$wgDatabase->tableExists( 'profiling' ) ) {
+ // Simply ignore
+ } elseif ( $wgDatabase->fieldExists( 'profiling', 'pf_memory' ) ) {
+ echo "profiling table has pf_memory field.\n";
+ } else {
+ echo "Adding pf_memory field to table profiling...";
+ dbsource( archive( 'patch-profiling-memory.sql' ), $wgDatabase );
+ echo "ok\n";
}
}
echo "...rev_parent_id column already populated.\n";
return;
}
- require_once( 'populateParentId.php' );
+ require_once( 'populateParentId.inc' );
+
+ global $wgDatabase;
+ populate_rev_parent_id( $wgDatabase );
}
function
array("oldimage", "oi_minor_mime", "TEXT NOT NULL DEFAULT 'unknown'"),
array("oldimage", "oi_sha1", "TEXT NOT NULL DEFAULT ''"),
array("page_restrictions", "pr_id", "INTEGER NOT NULL UNIQUE DEFAULT nextval('pr_id_val')"),
+ array("profiling", "pf_memory", "NUMERIC(18,10) NOT NULL DEFAULT 0"),
array("recentchanges", "rc_deleted", "SMALLINT NOT NULL DEFAULT 0"),
array("recentchanges", "rc_log_action", "TEXT"),
array("recentchanges", "rc_log_type", "TEXT"),
array("recentchanges", "rc_params", "TEXT"),
array("revision", "rev_len", "INTEGER"),
array("revision", "rev_deleted", "SMALLINT NOT NULL DEFAULT 0"),
+ array("user_newtalk", "user_last_timestamp", "TIMESTAMPTZ"),
);
array("recentchanges","rc_new", "smallint", "rc_new::smallint DEFAULT 0"),
array("recentchanges","rc_type", "smallint", "rc_type::smallint DEFAULT 0"),
array("recentchanges","rc_patrolled", "smallint", "rc_patrolled::smallint DEFAULT 0"),
+ array("revision", "rev_deleted", "smallint", "rev_deleted::smallint DEFAULT 0"),
array("revision", "rev_minor_edit", "smallint", "rev_minor_edit::smallint DEFAULT 0"),
array("templatelinks","tl_namespace", "smallint", "tl_namespace::smallint"),
array("user_newtalk", "user_ip", "text", "host(user_ip)"),