(bug 8031) Update to Japanese localisation (ja)
[lhc/web/wiklou.git] / maintenance / updaters.inc
index 0174168..f319cb4 100644 (file)
@@ -30,12 +30,15 @@ $wgNewTables = array(
        array( 'langlinks',     'patch-langlinks.sql' ),
        array( 'querycache_info', 'patch-querycacheinfo.sql' ),
        array( 'filearchive',   'patch-filearchive.sql' ),
+       array( 'redirect',      'patch-redirect.sql' ),
+       array( 'querycachetwo', 'patch-querycachetwo.sql' ),
 );
 
 $wgNewFields = array(
 #           table            field             patch file (in maintenance/archives)
        array( 'ipblocks',      'ipb_id',           'patch-ipblocks.sql' ),
        array( 'ipblocks',      'ipb_expiry',       'patch-ipb_expiry.sql' ),
+       array( 'ipblocks',      'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ),
        array( 'recentchanges', 'rc_type',          'patch-rc_type.sql' ),
        array( 'recentchanges', 'rc_ip',            'patch-rc_ip.sql' ),
        array( 'recentchanges', 'rc_id',            'patch-rc_id.sql' ),
@@ -57,6 +60,7 @@ $wgNewFields = array(
        array( 'ipblocks',      'ipb_range_start',  'patch-ipb_range_start.sql' ),
        array( 'site_stats',    'ss_images',        'patch-ss_images.sql' ),
        array( 'ipblocks',      'ipb_anon_only',    'patch-ipb_anon_only.sql' ),
+       array( 'user',          'user_newpass_time','patch-user_newpass_time.sql' ),
 );
 
 function rename_table( $from, $to, $patch ) {
@@ -762,11 +766,71 @@ function do_templatelinks_update() {
        echo "Done. Please run maintenance/refreshLinks.php for a more thorough templatelinks update.\n";
 }
 
+# July 2006
+# Add ( rc_namespace, rc_user_text ) index [R. Church]
+function do_rc_indices_update() {
+       global $wgDatabase;
+       echo( "Checking for additional recent changes indices...\n" );
+       # See if we can find the index we want
+       $info = $wgDatabase->indexInfo( 'recentchanges', 'rc_ns_usertext', __METHOD__ );
+       if( !$info ) {
+               # None, so create
+               echo( "...index on ( rc_namespace, rc_user_text ) not found; creating\n" );
+               dbsource( archive( 'patch-recentchanges-utindex.sql' ) );
+       } else {
+               # Index seems to exist
+               echo( "...index on ( rc_namespace, rc_user_text ) seems to be ok\n" );
+       }
+
+       #Add (rc_user_text, rc_timestamp) index [A. Garrett], November 2006
+       # See if we can find the index we want
+       $info = $wgDatabase->indexInfo( 'recentchanges', 'rc_user_text', __METHOD__ );
+       if( !$info ) {
+               # None, so create
+               echo( "...index on ( rc_user_text, rc_timestamp ) not found; creating\n" );
+               dbsource( archive( 'patch-rc_user_text-index.sql' ) );
+       } else {
+               # Index seems to exist
+               echo( "...index on ( rc_user_text, rc_timestamp ) seems to be ok\n" );
+       }
+}
+
+function index_has_field($table, $index, $field) {
+       global $wgDatabase;
+       echo( "Checking if $table index $index includes field $field...\n" );
+       $info = $wgDatabase->indexInfo( $table, $index, __METHOD__ );
+       if( $info ) {
+               foreach($info as $row) {
+                       if($row->Column_name == $field) {
+                               echo( "...index $index on table $table seems to be ok\n" );
+                               return true;
+                       }
+               }
+       }
+       echo( "...index $index on table $table has no field $field; adding\n" );
+       return false;
+}
+
+function do_backlinking_indices_update() {
+       echo( "Checking for backlinking indices...\n" );
+       if (!index_has_field('pagelinks', 'pl_namespace', 'pl_from') ||
+               !index_has_field('templatelinks', 'tl_namespace', 'tl_from') ||
+               !index_has_field('imagelinks', 'il_to', 'il_from'))
+       {       
+               dbsource( archive( 'patch-backlinkindexes.sql' ) );
+       }
+}
+
 function do_all_updates( $doShared = false ) {
-       global $wgNewTables, $wgNewFields, $wgRenamedTables, $wgSharedDB, $wgDatabase;
+       global $wgNewTables, $wgNewFields, $wgRenamedTables, $wgSharedDB, $wgDatabase, $wgDBtype;
 
        $doUser = !$wgSharedDB || $doShared;
 
+       if ($wgDBtype === 'postgres') {
+               do_postgres_updates();
+               return;
+       }
+
        # Rename tables
        foreach ( $wgRenamedTables as $tableRecord ) {
                rename_table( $tableRecord[0], $tableRecord[1], $tableRecord[2] );
@@ -820,6 +884,10 @@ function do_all_updates( $doShared = false ) {
        do_logging_timestamp_index(); flush();
 
        do_page_random_update(); flush();
+       
+       do_rc_indices_update(); flush();
+       
+       do_backlinking_indices_update(); flush();
 
        initialiseMessages(); flush();
 }
@@ -833,4 +901,170 @@ function archive($name) {
                return "$IP/maintenance/archives/$name";
        }
 }
+
+function do_postgres_updates() {
+       global $wgDatabase, $wgVersion, $wgDBmwschema;
+
+       $version = "1.7.1";
+
+       # Just in case their LocalSetings.php does not have this:
+       if ( !isset( $wgDBmwschema ))
+               $wgDBmwschema = 'mediawiki';
+
+       if ($wgDatabase->tableExists("mediawiki_version")) {
+               $version = "1.8";
+       }
+
+       if ($version == '1.7.1') {
+               $upgrade = <<<PGEND
+
+BEGIN;
+
+-- Type tweaking:
+ALTER TABLE oldimage ALTER oi_size TYPE INTEGER;
+ALTER TABLE oldimage ALTER oi_width TYPE INTEGER;
+ALTER TABLE oldimage ALTER oi_height TYPE INTEGER;
+
+ALTER TABLE image ALTER img_size TYPE INTEGER;
+ALTER TABLE image ALTER img_width TYPE INTEGER;
+ALTER TABLE image ALTER img_height TYPE INTEGER;
+
+-- Constraint tweaking:
+ALTER TABLE recentchanges ALTER rc_cur_id DROP NOT NULL;
+
+-- New columns:
+ALTER TABLE ipblocks ADD ipb_anon_only CHAR NOT NULL DEFAULT '0';
+ALTER TABLE ipblocks ADD ipb_create_account CHAR NOT NULL DEFAULT '1';
+
+-- Index order rearrangements:
+DROP INDEX pagelink_unique;
+CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title);
+
+-- Rename tables
+ALTER TABLE "user" RENAME TO mwuser;
+ALTER TABLE "text" RENAME to pagecontent;
+
+-- New tables:
+CREATE TABLE profiling (
+  pf_count   INTEGER         NOT NULL DEFAULT 0,
+  pf_time    NUMERIC(18,10)  NOT NULL DEFAULT 0,
+  pf_name    TEXT            NOT NULL,
+  pf_server  TEXT            NULL
+);
+CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
+
+CREATE TABLE mediawiki_version (
+  type         TEXT         NOT NULL,
+  mw_version   TEXT         NOT NULL,
+  notes        TEXT             NULL,
+
+  pg_version   TEXT             NULL,
+  pg_dbname    TEXT             NULL,
+  pg_user      TEXT             NULL,
+  pg_port      TEXT             NULL,
+  mw_schema    TEXT             NULL,
+  ts2_schema   TEXT             NULL,
+  ctype        TEXT             NULL,
+
+  sql_version  TEXT             NULL,
+  sql_date     TEXT             NULL,
+  cdate        TIMESTAMPTZ  NOT NULL DEFAULT now()
+);
+
+INSERT INTO mediawiki_version (type,mw_version,notes)
+VALUES ('Upgrade','MWVERSION','Upgrade from older version 1.7.1');
+
+-- Special modifications
+ALTER TABLE archive RENAME to archive2;
+CREATE VIEW archive AS 
+SELECT 
+  ar_namespace, ar_title, ar_text, ar_comment, ar_user, ar_user_text, 
+  ar_minor_edit, ar_flags, ar_rev_id, ar_text_id,
+       TO_CHAR(ar_timestamp, 'YYYYMMDDHH24MISS') AS ar_timestamp
+FROM archive2;
+
+CREATE RULE archive_insert AS ON INSERT TO archive
+DO INSTEAD INSERT INTO archive2 VALUES (
+  NEW.ar_namespace, NEW.ar_title, NEW.ar_text, NEW.ar_comment, NEW.ar_user, NEW.ar_user_text, 
+  TO_DATE(NEW.ar_timestamp, 'YYYYMMDDHH24MISS'),
+  NEW.ar_minor_edit, NEW.ar_flags, NEW.ar_rev_id, NEW.ar_text_id
+);
+
+CREATE FUNCTION page_deleted() RETURNS TRIGGER LANGUAGE plpgsql AS
+\$mw\$
+BEGIN
+DELETE FROM recentchanges WHERE rc_namespace = OLD.page_namespace AND rc_title = OLD.page_title;
+RETURN NULL;
+END;
+\$mw\$;
+
+CREATE TRIGGER page_deleted AFTER DELETE ON page
+  FOR EACH ROW EXECUTE PROCEDURE page_deleted();
+
+COMMIT;
+
+PGEND;
+
+       } ## end version 1.7.1 upgrade
+       else if ($version == '1.8') {
+               $upgrade = <<<PGEND
+
+BEGIN;
+
+-- Tighten up restrictions on the revision table so we don't lose data:
+ALTER TABLE revision DROP CONSTRAINT revision_rev_user_fkey;
+ALTER TABLE revision ADD CONSTRAINT revision_rev_user_fkey
+  FOREIGN KEY (rev_user) REFERENCES mwuser(user_id) ON DELETE RESTRICT;
+
+-- New column for better password tracking:
+ALTER TABLE mwuser ADD user_newpass_time TIMESTAMPTZ;
+
+-- New column for autoblocking problem users
+ALTER TABLE ipblocks ADD ipb_enable_autoblock CHAR NOT NULL DEFAULT '1';
+
+-- Despite it's name, ipb_address does not necessarily contain IP addresses :)
+ALTER TABLE ipblocks ALTER ipb_address TYPE TEXT USING ipb_address::TEXT;
+
+-- New tables:
+CREATE TABLE redirect (
+  rd_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  rd_namespace  SMALLINT NOT NULL,
+  rd_title      TEXT     NOT NULL
+);
+CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from);
+
+CREATE TABLE querycachetwo (
+  qcc_type          TEXT     NOT NULL,
+  qcc_value         SMALLINT NOT NULL  DEFAULT 0,
+  qcc_namespace     INTEGER  NOT NULL  DEFAULT 0,
+  qcc_title         TEXT     NOT NULL  DEFAULT '',
+  qcc_namespacetwo  INTEGER  NOT NULL  DEFAULT 0,
+  qcc_titletwo      TEXT     NOT NULL  DEFAULT ''
+);
+CREATE INDEX querycachetwo_type_value ON querycachetwo (qcc_type, qcc_value);
+CREATE INDEX querycachetwo_title      ON querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX querycachetwo_titletwo   ON querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+
+-- Note this upgrade
+INSERT INTO mediawiki_version (type,mw_version,notes)
+VALUES ('Upgrade','MWVERSION','Upgrade from older version 1.8');
+
+COMMIT;
+
+PGEND;
+
+       }
+
+       else {
+               print "No updates needed for version $version\n";
+               return;
+       }
+
+       $upgrade = str_replace( 'MWVERSION', $wgVersion, $upgrade );
+       $res = $wgDatabase->query($upgrade);
+
+
+       return;
+}
+
 ?>