diff options
Diffstat (limited to 'maintenance/archives')
82 files changed, 1712 insertions, 0 deletions
diff --git a/maintenance/archives/.htaccess b/maintenance/archives/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/maintenance/archives/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/maintenance/archives/patch-archive-rev_id.sql b/maintenance/archives/patch-archive-rev_id.sql new file mode 100644 index 00000000..375001b8 --- /dev/null +++ b/maintenance/archives/patch-archive-rev_id.sql @@ -0,0 +1,6 @@ +-- New field in archive table to preserve revision IDs across undeletion. +-- Added 2005-03-10 + +ALTER TABLE /*$wgDBprefix*/archive + ADD + ar_rev_id int(8) unsigned; diff --git a/maintenance/archives/patch-archive-text_id.sql b/maintenance/archives/patch-archive-text_id.sql new file mode 100644 index 00000000..f59715ff --- /dev/null +++ b/maintenance/archives/patch-archive-text_id.sql @@ -0,0 +1,14 @@ +-- New field in archive table to preserve text source IDs across undeletion. +-- +-- Older entries containing NULL in this field will contain text in the +-- ar_text and ar_flags fields, and will cause the (re)creation of a new +-- text record upon undeletion. +-- +-- Newer ones will reference a text.old_id with this field, and the existing +-- entries will be used as-is; only a revision record need be created. +-- +-- Added 2005-05-01 + +ALTER TABLE /*$wgDBprefix*/archive + ADD + ar_text_id int(8) unsigned; diff --git a/maintenance/archives/patch-bot.sql b/maintenance/archives/patch-bot.sql new file mode 100644 index 00000000..ce61884c --- /dev/null +++ b/maintenance/archives/patch-bot.sql @@ -0,0 +1,11 @@ +-- Add field to recentchanges for easy filtering of bot entries +-- edits by a user with 'bot' in user.user_rights should be +-- marked 1 in rc_bot. + +-- Change made 2002-12-15 by Brion VIBBER <brion@pobox.com> +-- this affects code in Article.php, User.php SpecialRecentchanges.php +-- column also added to buildTables.inc + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD COLUMN rc_bot tinyint(3) unsigned NOT NULL default '0' + AFTER rc_minor; diff --git a/maintenance/archives/patch-cache.sql b/maintenance/archives/patch-cache.sql new file mode 100644 index 00000000..5651c3ce --- /dev/null +++ b/maintenance/archives/patch-cache.sql @@ -0,0 +1,41 @@ +-- patch-cache.sql +-- 2003-03-22 <brion@pobox.com> +-- +-- Add 'last touched' fields to cur and user tables. +-- These are useful for maintaining cache consistency. +-- (Updates to OutputPage.php and elsewhere.) +-- +-- cur_touched should be set to the current time whenever: +-- * the page is updated +-- * a linked page is created +-- * a linked page is destroyed +-- +-- The cur_touched time will then be compared against the +-- timestamps of cached pages to ensure consistency; if +-- cur_touched is later, the page must be regenerated. + +ALTER TABLE /*$wgDBprefix*/cur + ADD COLUMN cur_touched char(14) binary NOT NULL default ''; + +-- Existing pages should be initialized to the current +-- time so they don't needlessly rerender until they are +-- changed for the first time: + +UPDATE /*$wgDBprefix*/cur + SET cur_touched=NOW()+0; + +-- user_touched should be set to the current time whenever: +-- * the user logs in +-- * the user saves preferences (if no longer default...?) +-- * the user's newtalk status is altered +-- +-- The user_touched time should also be checked against the +-- timestamp reported by a browser requesting revalidation. +-- If user_touched is later than the reported last modified +-- time, the page should be rerendered with new options and +-- sent again. + +ALTER TABLE /*$wgDBprefix*/user + ADD COLUMN user_touched char(14) binary NOT NULL default ''; +UPDATE /*$wgDBprefix*/user + SET user_touched=NOW()+0; diff --git a/maintenance/archives/patch-categorylinks.sql b/maintenance/archives/patch-categorylinks.sql new file mode 100644 index 00000000..53c82fc0 --- /dev/null +++ b/maintenance/archives/patch-categorylinks.sql @@ -0,0 +1,39 @@ +-- +-- Track category inclusions *used inline* +-- This tracks a single level of category membership +-- (folksonomic tagging, really). +-- +CREATE TABLE /*$wgDBprefix*/categorylinks ( + -- Key to page_id of the page defined as a category member. + cl_from int(8) unsigned NOT NULL default '0', + + -- Name of the category. + -- This is also the page_title of the category's description page; + -- all such pages are in namespace 14 (NS_CATEGORY). + cl_to varchar(255) binary NOT NULL default '', + + -- The title of the linking page, or an optional override + -- to determine sort order. Sorting is by binary order, which + -- isn't always ideal, but collations seem to be an exciting + -- and dangerous new world in MySQL... + -- + -- For MySQL 4.1+ with charset set to utf8, the sort key *index* + -- needs cut to be smaller than 1024 bytes (at 3 bytes per char). + -- To sort properly on the shorter key, this field needs to be + -- the same shortness. + cl_sortkey varchar(86) binary NOT NULL default '', + + -- This isn't really used at present. Provided for an optional + -- sorting method by approximate addition time. + cl_timestamp timestamp NOT NULL, + + UNIQUE KEY cl_from(cl_from,cl_to), + + -- This key is trouble. It's incomplete, AND it's too big + -- when collation is set to UTF-8. Bleeeacch! + KEY cl_sortkey(cl_to,cl_sortkey), + + -- Not really used? + KEY cl_timestamp(cl_to,cl_timestamp) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-drop-user_newtalk.sql b/maintenance/archives/patch-drop-user_newtalk.sql new file mode 100644 index 00000000..6ec84fb3 --- /dev/null +++ b/maintenance/archives/patch-drop-user_newtalk.sql @@ -0,0 +1,3 @@ +-- Patch for email authentication T.Gries/M.Arndt 27.11.2004 +-- Table user_newtalk is dropped, as the table watchlist is now also used for storing user_talk-page notifications +DROP TABLE /*$wgDBprefix*/user_newtalk; diff --git a/maintenance/archives/patch-drop_img_type.sql b/maintenance/archives/patch-drop_img_type.sql new file mode 100644 index 00000000..e3737617 --- /dev/null +++ b/maintenance/archives/patch-drop_img_type.sql @@ -0,0 +1,3 @@ +-- img_type is no longer used, delete it + +ALTER TABLE /*$wgDBprefix*/image DROP COLUMN img_type; diff --git a/maintenance/archives/patch-email-authentication.sql b/maintenance/archives/patch-email-authentication.sql new file mode 100644 index 00000000..b35b10f1 --- /dev/null +++ b/maintenance/archives/patch-email-authentication.sql @@ -0,0 +1,3 @@ +-- Added early in 1.5 alpha development, removed 2005-04-25 + +ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_emailauthenticationtimestamp; diff --git a/maintenance/archives/patch-email-notification.sql b/maintenance/archives/patch-email-notification.sql new file mode 100644 index 00000000..f9bc0440 --- /dev/null +++ b/maintenance/archives/patch-email-notification.sql @@ -0,0 +1,11 @@ +-- Patch for email notification on page changes T.Gries/M.Arndt 11.09.2004 + +-- A new column 'wl_notificationtimestamp' is added to the table 'watchlist'. +-- When a page watched by a user X is changed by someone else, an email is sent to the watching user X +-- if and only if the field 'wl_notificationtimestamp' is '0'. The time/date of sending the mail is then stored in that field. +-- Further pages changes do not trigger new notification mails as long as user X has not re-visited that page. +-- The field is reset to '0' when user X re-visits the page or when he or she resets all notification timestamps +-- ("notification flags") at once by clicking the new button on his/her watchlist page. +-- T. Gries/M. Arndt 11.09.2004 - December 2004 + +ALTER TABLE /*$wgDBprefix*/watchlist ADD (wl_notificationtimestamp varchar(14) binary); diff --git a/maintenance/archives/patch-externallinks.sql b/maintenance/archives/patch-externallinks.sql new file mode 100644 index 00000000..d1aa5764 --- /dev/null +++ b/maintenance/archives/patch-externallinks.sql @@ -0,0 +1,13 @@ +-- +-- Track links to external URLs +-- +CREATE TABLE /*$wgDBprefix*/externallinks ( + el_from int(8) unsigned NOT NULL default '0', + el_to blob NOT NULL default '', + el_index blob NOT NULL default '', + + KEY (el_from, el_to(40)), + KEY (el_to(60), el_from), + KEY (el_index(60)) +) TYPE=InnoDB; + diff --git a/maintenance/archives/patch-filearchive.sql b/maintenance/archives/patch-filearchive.sql new file mode 100644 index 00000000..4bf09366 --- /dev/null +++ b/maintenance/archives/patch-filearchive.sql @@ -0,0 +1,51 @@ +-- +-- Record of deleted file data +-- +CREATE TABLE /*$wgDBprefix*/filearchive ( + -- Unique row id + fa_id int not null auto_increment, + + -- Original base filename; key to image.img_name, page.page_title, etc + fa_name varchar(255) binary NOT NULL default '', + + -- Filename of archived file, if an old revision + fa_archive_name varchar(255) binary default '', + + -- Which storage bin (directory tree or object store) the file data + -- is stored in. Should be 'deleted' for files that have been deleted; + -- any other bin is not yet in use. + fa_storage_group varchar(16), + + -- SHA-1 of the file contents plus extension, used as a key for storage. + -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg + -- + -- If NULL, the file was missing at deletion time or has been purged + -- from the archival storage. + fa_storage_key varchar(64) binary default '', + + -- Deletion information, if this file is deleted. + fa_deleted_user int, + fa_deleted_timestamp char(14) binary default '', + fa_deleted_reason text, + + -- Duped fields from image + fa_size int(8) unsigned default '0', + fa_width int(5) default '0', + fa_height int(5) default '0', + fa_metadata mediumblob, + fa_bits int(3) default '0', + fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL, + fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown", + fa_minor_mime varchar(32) default "unknown", + fa_description tinyblob default '', + fa_user int(5) unsigned default '0', + fa_user_text varchar(255) binary default '', + fa_timestamp char(14) binary default '', + + PRIMARY KEY (fa_id), + INDEX (fa_name, fa_timestamp), -- pick out by image name + INDEX (fa_storage_group, fa_storage_key), -- pick out dupe files + INDEX (fa_deleted_timestamp), -- sort by deletion time + INDEX (fa_deleted_user) -- sort by deleter + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-hitcounter.sql b/maintenance/archives/patch-hitcounter.sql new file mode 100644 index 00000000..260f717f --- /dev/null +++ b/maintenance/archives/patch-hitcounter.sql @@ -0,0 +1,9 @@ +-- +-- hitcounter table is used to buffer page hits before they are periodically +-- counted and added to the cur_counter column in the cur table. +-- December 2003 +-- + +CREATE TABLE /*$wgDBprefix*/hitcounter ( + hc_id INTEGER UNSIGNED NOT NULL +) TYPE=HEAP MAX_ROWS=25000; diff --git a/maintenance/archives/patch-image_name_primary.sql b/maintenance/archives/patch-image_name_primary.sql new file mode 100644 index 00000000..5bd88264 --- /dev/null +++ b/maintenance/archives/patch-image_name_primary.sql @@ -0,0 +1,6 @@ +-- Make the image name index unique + +ALTER TABLE /*$wgDBprefix*/image DROP INDEX img_name; + +ALTER TABLE /*$wgDBprefix*/image + ADD PRIMARY KEY img_name (img_name); diff --git a/maintenance/archives/patch-image_name_unique.sql b/maintenance/archives/patch-image_name_unique.sql new file mode 100644 index 00000000..5cf02d41 --- /dev/null +++ b/maintenance/archives/patch-image_name_unique.sql @@ -0,0 +1,6 @@ +-- Make the image name index unique + +ALTER TABLE /*$wgDBprefix*/image DROP INDEX img_name; + +ALTER TABLE /*$wgDBprefix*/image + ADD UNIQUE INDEX img_name (img_name); diff --git a/maintenance/archives/patch-img_exif.sql b/maintenance/archives/patch-img_exif.sql new file mode 100644 index 00000000..2fd78f76 --- /dev/null +++ b/maintenance/archives/patch-img_exif.sql @@ -0,0 +1,3 @@ +-- Extra image exif metadata, added for 1.5 but quickly removed. + +ALTER TABLE /*$wgDBprefix*/image DROP img_exif; diff --git a/maintenance/archives/patch-img_media_type.sql b/maintenance/archives/patch-img_media_type.sql new file mode 100644 index 00000000..2356fc63 --- /dev/null +++ b/maintenance/archives/patch-img_media_type.sql @@ -0,0 +1,17 @@ +-- media type columns, added for 1.5 +-- this alters the scheme for 1.5, img_type is no longer used. + +ALTER TABLE /*$wgDBprefix*/image ADD ( + -- Media type as defined by the MEDIATYPE_xxx constants + img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL, + + -- major part of a MIME media type as defined by IANA + -- see http://www.iana.org/assignments/media-types/ + img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown", + + -- minor part of a MIME media type as defined by IANA + -- the minor parts are not required to adher to any standard + -- but should be consistent throughout the database + -- see http://www.iana.org/assignments/media-types/ + img_minor_mime varchar(32) NOT NULL default "unknown" +); diff --git a/maintenance/archives/patch-img_metadata.sql b/maintenance/archives/patch-img_metadata.sql new file mode 100644 index 00000000..407e4325 --- /dev/null +++ b/maintenance/archives/patch-img_metadata.sql @@ -0,0 +1,6 @@ +-- Moving img_exif to img_metadata, so the name won't be so confusing when we +-- Use it for Ogg metadata or something like that. + +ALTER TABLE /*$wgDBprefix*/image ADD ( + img_metadata mediumblob NOT NULL +); diff --git a/maintenance/archives/patch-img_width.sql b/maintenance/archives/patch-img_width.sql new file mode 100644 index 00000000..c99bd46d --- /dev/null +++ b/maintenance/archives/patch-img_width.sql @@ -0,0 +1,18 @@ +-- Extra image metadata, added for 1.5 + +-- NOTE: as by patch-img_media_type.sql, the img_type +-- column is no longer used and has therefore be removed from this patch + +ALTER TABLE /*$wgDBprefix*/image ADD ( + img_width int(5) NOT NULL default 0, + img_height int(5) NOT NULL default 0, + img_bits int(5) NOT NULL default 0 +); + +ALTER TABLE /*$wgDBprefix*/oldimage ADD ( + oi_width int(5) NOT NULL default 0, + oi_height int(5) NOT NULL default 0, + oi_bits int(3) NOT NULL default 0 +); + + diff --git a/maintenance/archives/patch-indexes.sql b/maintenance/archives/patch-indexes.sql new file mode 100644 index 00000000..23eec07d --- /dev/null +++ b/maintenance/archives/patch-indexes.sql @@ -0,0 +1,24 @@ +-- +-- patch-indexes.sql +-- +-- Fix up table indexes; new to stable release in November 2003 +-- + +ALTER TABLE /*$wgDBprefix*/links + DROP INDEX l_from, + ADD INDEX l_from (l_from); + +ALTER TABLE /*$wgDBprefix*/brokenlinks + DROP INDEX bl_to, + ADD INDEX bl_to (bL_to); + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD INDEX rc_timestamp (rc_timestamp), + ADD INDEX rc_namespace_title (rc_namespace, rc_title), + ADD INDEX rc_cur_id (rc_cur_id); + +ALTER TABLE /*$wgDBprefix*/archive + ADD KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp); + +ALTER TABLE /*$wgDBprefix*/watchlist + ADD KEY namespace_title (wl_namespace,wl_title); diff --git a/maintenance/archives/patch-interwiki-trans.sql b/maintenance/archives/patch-interwiki-trans.sql new file mode 100644 index 00000000..2384a66a --- /dev/null +++ b/maintenance/archives/patch-interwiki-trans.sql @@ -0,0 +1,2 @@ +ALTER TABLE /*$wgDBprefix*/interwiki + ADD COLUMN iw_trans TINYINT(1) NOT NULL DEFAULT 0; diff --git a/maintenance/archives/patch-interwiki.sql b/maintenance/archives/patch-interwiki.sql new file mode 100644 index 00000000..90b162ef --- /dev/null +++ b/maintenance/archives/patch-interwiki.sql @@ -0,0 +1,20 @@ +-- Creates interwiki prefix<->url mapping table +-- used from 2003-08-21 dev version. +-- Import the default mappings from maintenance/interwiki.sql + +CREATE TABLE /*$wgDBprefix*/interwiki ( + -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de") + iw_prefix char(32) NOT NULL, + + -- The URL of the wiki, with "$1" as a placeholder for an article name. + -- Any spaces in the name will be transformed to underscores before + -- insertion. + iw_url char(127) NOT NULL, + + -- A boolean value indicating whether the wiki is in this project + -- (used, for example, to detect redirect loops) + iw_local BOOL NOT NULL, + + UNIQUE KEY iw_prefix (iw_prefix) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-inverse_timestamp.sql b/maintenance/archives/patch-inverse_timestamp.sql new file mode 100644 index 00000000..0f7d66f1 --- /dev/null +++ b/maintenance/archives/patch-inverse_timestamp.sql @@ -0,0 +1,15 @@ +-- Removes the inverse_timestamp field from early 1.5 alphas. +-- This field was used in the olden days as a crutch for sorting +-- limitations in MySQL 3.x, but is being dropped now as an +-- unnecessary burden. Serious wikis should be running on 4.x. +-- +-- Updater added 2005-03-13 + +ALTER TABLE /*$wgDBprefix*/revision + DROP COLUMN inverse_timestamp, + DROP INDEX page_timestamp, + DROP INDEX user_timestamp, + DROP INDEX usertext_timestamp, + ADD INDEX page_timestamp (rev_page,rev_timestamp), + ADD INDEX user_timestamp (rev_user,rev_timestamp), + ADD INDEX usertext_timestamp (rev_user_text,rev_timestamp); diff --git a/maintenance/archives/patch-ipb_expiry.sql b/maintenance/archives/patch-ipb_expiry.sql new file mode 100644 index 00000000..0f106d70 --- /dev/null +++ b/maintenance/archives/patch-ipb_expiry.sql @@ -0,0 +1,8 @@ +-- Adds the ipb_expiry field to ipblocks + +ALTER TABLE /*$wgDBprefix*/ipblocks ADD ipb_expiry char(14) binary NOT NULL default ''; + +-- All IP blocks have one day expiry +UPDATE /*$wgDBprefix*/ipblocks SET ipb_expiry = date_format(date_add(ipb_timestamp,INTERVAL 1 DAY),"%Y%m%d%H%i%s") WHERE ipb_user = 0; + +-- Null string is fine for user blocks, since this indicates infinity diff --git a/maintenance/archives/patch-ipb_range_start.sql b/maintenance/archives/patch-ipb_range_start.sql new file mode 100644 index 00000000..c31e2d9c --- /dev/null +++ b/maintenance/archives/patch-ipb_range_start.sql @@ -0,0 +1,25 @@ +-- Add the range handling fields +ALTER TABLE /*$wgDBprefix*/ipblocks + ADD ipb_range_start varchar(32) NOT NULL default '', + ADD ipb_range_end varchar(32) NOT NULL default '', + ADD INDEX ipb_range (ipb_range_start(8), ipb_range_end(8)); + + +-- Initialise fields +-- Only range blocks match ipb_address LIKE '%/%', this fact is used in the code already +UPDATE /*$wgDBprefix*/ipblocks + SET + ipb_range_start = LPAD(HEX( + (SUBSTRING_INDEX(ipb_address, '.', 1) << 24) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '/', 1), '.', -1)) ), 8, '0' ), + + ipb_range_end = LPAD(HEX( + (SUBSTRING_INDEX(ipb_address, '.', 1) << 24) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24) + + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '/', 1), '.', -1)) + + ((1 << (32 - SUBSTRING_INDEX(ipb_address, '/', -1))) - 1) ), 8, '0' ) + + WHERE ipb_address LIKE '%/%'; diff --git a/maintenance/archives/patch-ipblocks.sql b/maintenance/archives/patch-ipblocks.sql new file mode 100644 index 00000000..8e47798b --- /dev/null +++ b/maintenance/archives/patch-ipblocks.sql @@ -0,0 +1,6 @@ +-- For auto-expiring blocks -- + +ALTER TABLE /*$wgDBprefix*/ipblocks + ADD ipb_auto tinyint(1) NOT NULL default '0', + ADD ipb_id int(8) NOT NULL auto_increment, + ADD PRIMARY KEY (ipb_id); diff --git a/maintenance/archives/patch-job.sql b/maintenance/archives/patch-job.sql new file mode 100644 index 00000000..89918456 --- /dev/null +++ b/maintenance/archives/patch-job.sql @@ -0,0 +1,20 @@ + +-- Jobs performed by parallel apache threads or a command-line daemon +CREATE TABLE /*$wgDBprefix*/job ( + job_id int(9) unsigned NOT NULL auto_increment, + + -- Command name, currently only refreshLinks is defined + job_cmd varchar(255) NOT NULL default '', + + -- Namespace and title to act on + -- Should be 0 and '' if the command does not operate on a title + job_namespace int NOT NULL, + job_title varchar(255) binary NOT NULL, + + -- Any other parameters to the command + -- Presently unused, format undefined + job_params blob NOT NULL default '', + + PRIMARY KEY job_id (job_id), + KEY (job_cmd, job_namespace, job_title) +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-langlinks.sql b/maintenance/archives/patch-langlinks.sql new file mode 100644 index 00000000..9c3b7e54 --- /dev/null +++ b/maintenance/archives/patch-langlinks.sql @@ -0,0 +1,14 @@ +CREATE TABLE /*$wgDBprefix*/langlinks ( + -- page_id of the referring page + ll_from int(8) unsigned NOT NULL default '0', + + -- Language code of the target + ll_lang varchar(10) binary NOT NULL default '', + + -- Title of the target, including namespace + ll_title varchar(255) binary NOT NULL default '', + + UNIQUE KEY (ll_from, ll_lang), + KEY (ll_lang, ll_title) +) TYPE=InnoDB; + diff --git a/maintenance/archives/patch-linkscc-1.3.sql b/maintenance/archives/patch-linkscc-1.3.sql new file mode 100644 index 00000000..e397fcb9 --- /dev/null +++ b/maintenance/archives/patch-linkscc-1.3.sql @@ -0,0 +1,6 @@ +-- +-- linkscc table used to cache link lists in easier to digest form. +-- New schema for 1.3 - removes old lcc_title column. +-- May 2004 +-- +ALTER TABLE /*$wgDBprefix*/linkscc DROP COLUMN lcc_title;
\ No newline at end of file diff --git a/maintenance/archives/patch-linkscc.sql b/maintenance/archives/patch-linkscc.sql new file mode 100644 index 00000000..91d4da56 --- /dev/null +++ b/maintenance/archives/patch-linkscc.sql @@ -0,0 +1,12 @@ +-- +-- linkscc table used to cache link lists in easier to digest form +-- November 2003 +-- +-- Format later updated. +-- + +CREATE TABLE /*$wgDBprefix*/linkscc ( + lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY, + lcc_cacheobj MEDIUMBLOB NOT NULL + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-linktables.sql b/maintenance/archives/patch-linktables.sql new file mode 100644 index 00000000..bb9bd033 --- /dev/null +++ b/maintenance/archives/patch-linktables.sql @@ -0,0 +1,70 @@ +-- +-- Track links that do exist +-- l_from and l_to key to cur_id +-- +DROP TABLE IF EXISTS /*$wgDBprefix*/links; +CREATE TABLE /*$wgDBprefix*/links ( + -- Key to the page_id of the page containing the link. + l_from int(8) unsigned NOT NULL default '0', + + -- Key to the page_id of the link target. + -- An unfortunate consequence of this is that rename + -- operations require changing the links entries for + -- all links to the moved page. + l_to int(8) unsigned NOT NULL default '0', + + UNIQUE KEY l_from(l_from,l_to), + KEY (l_to) + +) TYPE=InnoDB; + +-- +-- Track links to pages that don't yet exist. +-- bl_from keys to cur_id +-- bl_to is a text link (namespace:title) +-- +DROP TABLE IF EXISTS /*$wgDBprefix*/brokenlinks; +CREATE TABLE /*$wgDBprefix*/brokenlinks ( + -- Key to the page_id of the page containing the link. + bl_from int(8) unsigned NOT NULL default '0', + + -- Text of the target page title ("namesapce:title"). + -- Unfortunately this doesn't split the namespace index + -- key and therefore can't easily be joined to anything. + bl_to varchar(255) binary NOT NULL default '', + UNIQUE KEY bl_from(bl_from,bl_to), + KEY (bl_to) + +) TYPE=InnoDB; + +-- +-- Track links to images *used inline* +-- il_from keys to cur_id, il_to keys to image_name. +-- We don't distinguish live from broken links. +-- +DROP TABLE IF EXISTS /*$wgDBprefix*/imagelinks; +CREATE TABLE /*$wgDBprefix*/imagelinks ( + -- Key to page_id of the page containing the image / media link. + il_from int(8) unsigned NOT NULL default '0', + + -- Filename of target image. + -- This is also the page_title of the file's description page; + -- all such pages are in namespace 6 (NS_IMAGE). + il_to varchar(255) binary NOT NULL default '', + + UNIQUE KEY il_from(il_from,il_to), + KEY (il_to) + +) TYPE=InnoDB; + +-- +-- Stores (possibly gzipped) serialized objects with +-- cache arrays to reduce database load slurping up +-- from links and brokenlinks. +-- +DROP TABLE IF EXISTS /*$wgDBprefix*/linkscc; +CREATE TABLE /*$wgDBprefix*/linkscc ( + lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY, + lcc_cacheobj MEDIUMBLOB NOT NULL + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-list.txt b/maintenance/archives/patch-list.txt new file mode 100644 index 00000000..93a63bfd --- /dev/null +++ b/maintenance/archives/patch-list.txt @@ -0,0 +1,182 @@ +List of database patches and upgrades as the PediaWiki software evolves... + +* 2002-11-23: Search index format changed for UTF-8 wikis +For wikis using the UTF-8 languages, the search index entries +need to be rebuild to allow searching to work. (Other wikis +that have been run through the old phase2->phase3 conversion +script should also be reindexed to catch apostrophe misplacement.) + +Run rebuildIndex.php on your wiki. + + + +* 2002-11-27: Watchlist format changed +Converts the user_watchlist entries out to a separate table which +links user_id<->cur_id and can be more handily queried. + +Run upgradeWatchlist.php on your wiki. + + + +* 2002-12-14: Recentchanges table bot/hidden column +Adds a column to indicate changes by registered bots (or perhaps +later other admin actions) that should be hidden from the default +Recentchanges list because people think they're tedious, but should +still be available in article histories, contribs lists, and +power-user RC lists. + +Run bot.sql against your database. + + + +* 2002-12-17: Watchlist format changed again +Now using namespace, title instead of cur_id. This can track deleted/ +recreated pages better, makes it easier to handle talk pages (now with +the auto-watch feature there's a lot more watching of talk pages!) +and whatnot. + +Run patch-watchlist.sql against your database. If all is well, drop +the oldwatchlist table which is no longer needed. (Note that this update +also drops the vestigial user_watchlist column.) + + + +* 2002-12-26: TeX math rendering adds 'math' table +A new 'math' table is used to cache TeX sections. + +Run patch-math.sql against your database, and add 'tmp' and 'math' +subdirectories to your tree alongside the upload directory, and copy +the 'math' source subdirectory under the wiki's PHP directory and run +"make" to compile the texvc evaluator. (whew!) + +TeX support requires TeX, OCaml, and ImageMagick. If you don't want +to use TeX support on your wiki, you can globally disable it by +setting $wgUseTeX=false in LocalSettings.php. + + + +* 2003-01-25: searchindex table +A new 'searchindex' table separates the fulltext index fields from +'cur'. This enables use of InnoDB tables, which don't support fulltext +search, for the main data, and will keep junk out of the backup dumps. + +Run patch-searchindex.sql on the database. If you wish to change table +tables on the others, use 'alter table' manually. (See MySQL docs.) + + +* 2003-01-24: Talk pages for anonymous users +A new table user_newtalk contains a list of talk pages that were +changed, both pages by anonymous and those by non-anonymous users. + +Run patch-usernewtalk.sql if your database was created before +this date. + + +* 2003-02-02: Math table changed +Rerun patch-math.sql to recreate it. + +* 2003-02-03: Index added to USER table for performance reasons. Run +patch-userindex.sql to create it. + + +* 2003-02-09: Random table & inverse timestamps +The random page queue table has been removed in favor of a column +in the cur table. This eliminates the ssllooww queue refill step; +pre-storing random indices in an indexed column means we can do the +random sort instantly; each element is re-randomized upon selection. + +Also, an inverse_timestamp field has been added to the cur and old +tables. This will allow fast index-based sorting in history lists, +user contribs, linked recentchanges, etc with MySQL 3, which doesn't +allow DESC ordering on an indexed field. This may be removed later +when MySQL is found to be stable. + + +* 2003-03-22: Last touched fields for caching +'Last touched' timestamp fields have been added to the cur and user +tables to aid in maintaining cache consistency. Web clients will +be forced to reload a page if it has been touched since the client's +cached copy (this will catch indirect changes like creation of +linked pages) or if a user changes preferences or logs in anew (so +visual changes and login status are taken into account). + +Run patch-cache.sql on the database to set these fields up. This is +required for changes to OutputPage.php and elsewhere to continue +working on an older database. + + +* 2003-05-23: Index for "Oldest articles" +"Oldest articles" needs an index on namespace, redirect and timestamp +to be reasonably fast. (patch-oldestindex.sql) + +OutputPage.php User.php maintenance/buildTables.inc maintenance/patch-cache.sql maintenance/patch-list.txt + +* 2003-09: Ipblocks auto-expiry update +patch-ipblocks.sql + +* Interwiki URL table +Moves the interwiki prefix<->url mapping table from a static array +into the database. If you've got a custom table, be sure to make +your changes! + +Run patch-interwiki.sql to create the interwiki table, then the +plain interwiki.sql to load up the default set of mappings. + +* 2003-05-30: File upload license fields +Adds fields to 'image' table. +INCOMPLETE, DO NOT USE + + +* 2003-08-21: Interwiki URL table +Moves the interwiki prefix<->url mapping table from a static array +into the database. If you've got a custom table, be sure to make +your changes! + +Run patch-interwiki.sql to create the interwiki table, then the +plain interwiki.sql to load up the default set of mappings. + +* 2003-09: Ipblocks auto-expiry update +patch-ipblocks.sql + +* Interwiki URL table +Moves the interwiki prefix<->url mapping table from a static array +into the database. If you've got a custom table, be sure to make +your changes! + +Run patch-interwiki.sql to create the interwiki table, then the +plain interwiki.sql to load up the default set of mappings. + +* 2003-11: Indexes +Fixes up indexes on links, brokenlinks, recentchanges, watchlist, +and archive tables to boost speed. + +Run patch-indexes.sql. + +* 2003-11: linkscc table creation +patch-linkscc.sql + + +* 2004-01-25: recentchanges additional index +Adds an index to recentchanges to optimize Special:Newpages +patch-rc-newindex.sql + +* 2004-02-14: Adds the ipb_expiry field to ipblocks +patch-ipb_expiry.sql + + +* 2004-03-11: Recreate links tables to avoid duplicating titles +everywhere. **Rebuild your links after this with refreshLinks.php** + +patch-linktables.sql + + +* 2004-04: Add user_real_name field +patch-user-realname.sql + +* 2004-05-08: Add querycache table for caching special pages and generic + object cache to cover some slow operations w/o memcached. +patch-querycache.sql +patch-objectcache.sql + +* 2004-05-14: Add categorylinks table for handling category membership +patch-categorylinks.sql diff --git a/maintenance/archives/patch-log_params.sql b/maintenance/archives/patch-log_params.sql new file mode 100644 index 00000000..aa00a673 --- /dev/null +++ b/maintenance/archives/patch-log_params.sql @@ -0,0 +1 @@ +ALTER TABLE /*$wgDBprefix*/logging ADD log_params blob NOT NULL default ''; diff --git a/maintenance/archives/patch-logging-times-index.sql b/maintenance/archives/patch-logging-times-index.sql new file mode 100644 index 00000000..e66ceec4 --- /dev/null +++ b/maintenance/archives/patch-logging-times-index.sql @@ -0,0 +1,9 @@ +-- +-- patch-logging-times-index.sql +-- +-- Add a very humble index on logging times +-- + +ALTER TABLE /*$wgDBprefix*/logging + ADD INDEX times (log_timestamp); + diff --git a/maintenance/archives/patch-logging-title.sql b/maintenance/archives/patch-logging-title.sql new file mode 100644 index 00000000..c5da0dc0 --- /dev/null +++ b/maintenance/archives/patch-logging-title.sql @@ -0,0 +1,6 @@ +-- 1.4 betas were missing the 'binary' marker from logging.log_title, +-- which causes a collation mismatch error on joins in MySQL 4.1. + +ALTER TABLE /*$wgDBprefix*/logging + CHANGE COLUMN log_title + log_title varchar(255) binary NOT NULL default ''; diff --git a/maintenance/archives/patch-logging.sql b/maintenance/archives/patch-logging.sql new file mode 100644 index 00000000..79bb53b5 --- /dev/null +++ b/maintenance/archives/patch-logging.sql @@ -0,0 +1,37 @@ +-- Add the logging table and adjust recentchanges to accomodate special pages +-- 2004-08-24 + +CREATE TABLE /*$wgDBprefix*/logging ( + -- Symbolic keys for the general log type and the action type + -- within the log. The output format will be controlled by the + -- action field, but only the type controls categorization. + log_type char(10) NOT NULL default '', + log_action char(10) NOT NULL default '', + + -- Timestamp. Duh. + log_timestamp char(14) NOT NULL default '19700101000000', + + -- The user who performed this action; key to user_id + log_user int unsigned NOT NULL default 0, + + -- Key to the page affected. Where a user is the target, + -- this will point to the user page. + log_namespace int NOT NULL default 0, + log_title varchar(255) binary NOT NULL default '', + + -- Freeform text. Interpreted as edit history comments. + log_comment varchar(255) NOT NULL default '', + + -- LF separated list of miscellaneous parameters + log_params blob NOT NULL default '', + + KEY type_time (log_type, log_timestamp), + KEY user_time (log_user, log_timestamp), + KEY page_time (log_namespace, log_title, log_timestamp) + +) TYPE=InnoDB; + + +-- Change from unsigned to signed so we can store special pages +ALTER TABLE recentchanges + MODIFY rc_namespace tinyint(3) NOT NULL default '0'; diff --git a/maintenance/archives/patch-math.sql b/maintenance/archives/patch-math.sql new file mode 100644 index 00000000..aee24a8a --- /dev/null +++ b/maintenance/archives/patch-math.sql @@ -0,0 +1,28 @@ +-- Creates table math used for caching TeX blocks. Needs to be run +-- on old installations when adding TeX support (2002-12-26) +-- Or, TeX can be disabled via $wgUseTeX=false in LocalSettings.php + +-- Note: math table has changed, and this script needs to be run again +-- to create it. (2003-02-02) + +DROP TABLE IF EXISTS /*$wgDBprefix*/math; +CREATE TABLE /*$wgDBprefix*/math ( + -- Binary MD5 hash of the latex fragment, used as an identifier key. + math_inputhash varchar(16) NOT NULL, + + -- Not sure what this is, exactly... + math_outputhash varchar(16) NOT NULL, + + -- texvc reports how well it thinks the HTML conversion worked; + -- if it's a low level the PNG rendering may be preferred. + math_html_conservativeness tinyint(1) NOT NULL, + + -- HTML output from texvc, if any + math_html text, + + -- MathML output from texvc, if any + math_mathml text, + + UNIQUE KEY math_inputhash (math_inputhash) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-mimesearch-indexes.sql b/maintenance/archives/patch-mimesearch-indexes.sql new file mode 100644 index 00000000..bd348c46 --- /dev/null +++ b/maintenance/archives/patch-mimesearch-indexes.sql @@ -0,0 +1,22 @@ +-- Add indexes to the mime types in image for use on Special:MIMEsearch, +-- changes a query like +-- +-- SELECT img_name FROM image WHERE img_major_mime = "image" AND img_minor_mime = "svg"; +-- from: +-- +-------+------+---------------+------+---------+------+------+-------------+ +-- | table | type | possible_keys | key | key_len | ref | rows | Extra | +-- +-------+------+---------------+------+---------+------+------+-------------+ +-- | image | ALL | NULL | NULL | NULL | NULL | 194 | Using where | +-- +-------+------+---------------+------+---------+------+------+-------------+ +-- to: +-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+ +-- | table | type | possible_keys | key | key_len | ref | rows | Extra | +-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+ +-- | image | ref | img_major_mime,img_minor_mime | img_minor_mime | 32 | const | 4 | Using where | +-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+ + +ALTER TABLE /*$wgDBprefix*/image + ADD INDEX img_major_mime (img_major_mime); +ALTER TABLE /*$wgDBprefix*/image + ADD INDEX img_minor_mime (img_minor_mime); + diff --git a/maintenance/archives/patch-objectcache.sql b/maintenance/archives/patch-objectcache.sql new file mode 100644 index 00000000..18572aa0 --- /dev/null +++ b/maintenance/archives/patch-objectcache.sql @@ -0,0 +1,9 @@ +-- For a few generic cache operations if not using Memcached +CREATE TABLE /*$wgDBprefix*/objectcache ( + keyname char(255) binary not null default '', + value mediumblob, + exptime datetime, + unique key (keyname), + key (exptime) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-oldestindex.sql b/maintenance/archives/patch-oldestindex.sql new file mode 100644 index 00000000..930214fd --- /dev/null +++ b/maintenance/archives/patch-oldestindex.sql @@ -0,0 +1,5 @@ +-- Add index for "Oldest articles" (Special:Ancientpages) +-- 2003-05-23 Erik Moeller <moeller@scireview.de> + +ALTER TABLE /*$wgDBprefix*/cur + ADD INDEX namespace_redirect_timestamp(cur_namespace,cur_is_redirect,cur_timestamp); diff --git a/maintenance/archives/patch-page_len.sql b/maintenance/archives/patch-page_len.sql new file mode 100644 index 00000000..c32dc8d4 --- /dev/null +++ b/maintenance/archives/patch-page_len.sql @@ -0,0 +1,16 @@ +-- Page length field (in bytes) for current revision of page. +-- Since page text is now stored separately, it may be compressed +-- or otherwise difficult to calculate. Additionally, the field +-- can be indexed for handy 'long' and 'short' page lists. +-- +-- Added 2005-03-12 + +ALTER TABLE /*$wgDBprefix*/page + ADD page_len int(8) unsigned NOT NULL, + ADD INDEX (page_len); + +-- Not accurate if upgrading from intermediate +-- 1.5 alpha and have revision compression on. +UPDATE /*$wgDBprefix*/page, /*$wgDBprefix*/text + SET page_len=LENGTH(old_text) + WHERE page_latest=old_id; diff --git a/maintenance/archives/patch-pagelinks.sql b/maintenance/archives/patch-pagelinks.sql new file mode 100644 index 00000000..7240cff9 --- /dev/null +++ b/maintenance/archives/patch-pagelinks.sql @@ -0,0 +1,56 @@ +-- +-- Create the new pagelinks table to merge links and brokenlinks data, +-- and populate it. +-- +-- Unlike the old links and brokenlinks, these records will not need to be +-- altered when target pages are created, deleted, or renamed. This should +-- reduce the amount of severe database frustration that happens when widely- +-- linked pages are altered. +-- +-- Fixups for brokenlinks to pages in namespaces need to be run after this; +-- this is done by updaters.inc if run through the regular update scripts. +-- +-- 2005-05-26 +-- + +-- +-- Track page-to-page hyperlinks within the wiki. +-- +CREATE TABLE /*$wgDBprefix*/pagelinks ( + -- Key to the page_id of the page containing the link. + pl_from int(8) unsigned NOT NULL default '0', + + -- Key to page_namespace/page_title of the target page. + -- The target page may or may not exist, and due to renames + -- and deletions may refer to different page records as time + -- goes by. + pl_namespace int NOT NULL default '0', + pl_title varchar(255) binary NOT NULL default '', + + UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title), + KEY (pl_namespace,pl_title) + +) TYPE=InnoDB; + + +-- Import existing-page links +INSERT + INTO /*$wgDBprefix*/pagelinks (pl_from,pl_namespace,pl_title) + SELECT l_from,page_namespace,page_title + FROM /*$wgDBprefix*/links, /*$wgDBprefix*/page + WHERE l_to=page_id; + +-- import brokenlinks +-- NOTE: We'll have to fix up individual entries that aren't in main NS +INSERT INTO /*$wgDBprefix*/pagelinks (pl_from,pl_namespace,pl_title) + SELECT bl_from, 0, bl_to + FROM /*$wgDBprefix*/brokenlinks; + +-- For each namespace do something like: +-- +-- UPDATE /*$wgDBprefix*/pagelinks +-- SET pl_namespace=$ns, +-- pl_title=TRIM(LEADING '$prefix:' FROM pl_title) +-- WHERE pl_namespace=0 +-- AND pl_title LIKE '$likeprefix:%'"; +-- diff --git a/maintenance/archives/patch-parsercache.sql b/maintenance/archives/patch-parsercache.sql new file mode 100644 index 00000000..854e6c57 --- /dev/null +++ b/maintenance/archives/patch-parsercache.sql @@ -0,0 +1,15 @@ +-- +-- parsercache table, for cacheing complete parsed articles +-- before they are imbedded in the skin. +-- + +CREATE TABLE /*$wgDBprefix*/parsercache ( + pc_pageid INT(11) NOT NULL, + pc_title VARCHAR(255) NOT NULL, + pc_prefhash CHAR(32) NOT NULL, + pc_expire DATETIME NOT NULL, + pc_data MEDIUMBLOB NOT NULL, + PRIMARY KEY (pc_pageid, pc_prefhash), + KEY(pc_title), + KEY(pc_expire) +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-profiling.sql b/maintenance/archives/patch-profiling.sql new file mode 100644 index 00000000..49b488e9 --- /dev/null +++ b/maintenance/archives/patch-profiling.sql @@ -0,0 +1,10 @@ +-- profiling table +-- This is optional + +CREATE TABLE /*$wgDBprefix*/profiling ( + pf_count integer not null default 0, + pf_time float not null default 0, + pf_name varchar(255) not null default '', + pf_server varchar(30) not null default '', + UNIQUE KEY pf_name_server (pf_name, pf_server) +) TYPE=HEAP; diff --git a/maintenance/archives/patch-querycache.sql b/maintenance/archives/patch-querycache.sql new file mode 100644 index 00000000..7df9129e --- /dev/null +++ b/maintenance/archives/patch-querycache.sql @@ -0,0 +1,16 @@ +-- Used for caching expensive grouped queries + +CREATE TABLE /*$wgDBprefix*/querycache ( + -- A key name, generally the base name of of the special page. + qc_type char(32) NOT NULL, + + -- Some sort of stored value. Sizes, counts... + qc_value int(5) unsigned NOT NULL default '0', + + -- Target namespace+title + qc_namespace int NOT NULL default '0', + qc_title char(255) binary NOT NULL default '', + + KEY (qc_type,qc_value) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-querycacheinfo.sql b/maintenance/archives/patch-querycacheinfo.sql new file mode 100644 index 00000000..0e34b3a5 --- /dev/null +++ b/maintenance/archives/patch-querycacheinfo.sql @@ -0,0 +1,12 @@ +CREATE TABLE /*$wgDBprefix*/querycache_info ( + + -- Special page name + -- Corresponds to a qc_type value + qci_type varchar(32) NOT NULL default '', + + -- Timestamp of last update + qci_timestamp char(14) NOT NULL default '19700101000000', + + UNIQUE KEY ( qci_type ) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-random-dateindex.sql b/maintenance/archives/patch-random-dateindex.sql new file mode 100644 index 00000000..5d514cc3 --- /dev/null +++ b/maintenance/archives/patch-random-dateindex.sql @@ -0,0 +1,54 @@ +-- patch-random-dateindex.sql +-- 2003-02-09 +-- +-- This patch does two things: +-- * Adds cur_random column to replace random table +-- (Requires change to SpecialRandom.php) +-- random table no longer needs refilling +-- Note: short-term duplicate results *are* possible, but very unlikely on large wiki +-- +-- * Adds inverse_timestamp columns to cur and old and indexes +-- to allow descending timestamp sort in history, contribs, etc +-- (Requires changes to Article.php, DatabaseFunctions.php, +-- ... ) +-- cur_timestamp inverse_timestamp +-- 99999999999999 - 20030209222556 = 79969790777443 +-- 99999999999999 - 20030211083412 = 79969788916587 +-- +-- We won't need this on MySQL 4; there will be a removal patch later. + +-- Indexes: +-- cur needs (cur_random) for random sort +-- cur and old need (namespace,title,timestamp) index for history,watchlist,rclinked +-- cur and old need (user,timestamp) index for contribs +-- cur and old need (user_text,timestamp) index for contribs + +ALTER TABLE /*$wgDBprefix*/cur + DROP INDEX cur_user, + DROP INDEX cur_user_text, + ADD COLUMN cur_random real unsigned NOT NULL, + ADD COLUMN inverse_timestamp char(14) binary NOT NULL default '', + ADD INDEX (cur_random), + ADD INDEX name_title_timestamp (cur_namespace,cur_title,inverse_timestamp), + ADD INDEX user_timestamp (cur_user,inverse_timestamp), + ADD INDEX usertext_timestamp (cur_user_text,inverse_timestamp); + +UPDATE /*$wgDBprefix*/cur SET + inverse_timestamp=99999999999999-cur_timestamp, + cur_random=RAND(); + +ALTER TABLE /*$wgDBprefix*/old + DROP INDEX old_user, + DROP INDEX old_user_text, + ADD COLUMN inverse_timestamp char(14) binary NOT NULL default '', + ADD INDEX name_title_timestamp (old_namespace,old_title,inverse_timestamp), + ADD INDEX user_timestamp (old_user,inverse_timestamp), + ADD INDEX usertext_timestamp (old_user_text,inverse_timestamp); + +UPDATE /*$wgDBprefix*/old SET + inverse_timestamp=99999999999999-old_timestamp; + +-- If leaving wiki publicly accessible in read-only mode during +-- the upgrade, comment out the below line; leave 'random' table +-- in place until the new software is installed. +DROP TABLE /*$wgDBprefix*/random; diff --git a/maintenance/archives/patch-rc-newindex.sql b/maintenance/archives/patch-rc-newindex.sql new file mode 100644 index 00000000..2315ff37 --- /dev/null +++ b/maintenance/archives/patch-rc-newindex.sql @@ -0,0 +1,9 @@ +-- +-- patch-rc-newindex.sql +-- Adds an index to recentchanges to optimize Special:Newpages +-- 2004-01-25 +-- + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp); + diff --git a/maintenance/archives/patch-rc-patrol.sql b/maintenance/archives/patch-rc-patrol.sql new file mode 100644 index 00000000..1839c1ee --- /dev/null +++ b/maintenance/archives/patch-rc-patrol.sql @@ -0,0 +1,9 @@ +-- +-- patch-rc-patrol.sql +-- Adds a row to recentchanges for the patrolling feature +-- 2004-08-09 +-- + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD COLUMN rc_patrolled tinyint(3) unsigned NOT NULL default '0'; + diff --git a/maintenance/archives/patch-rc_id.sql b/maintenance/archives/patch-rc_id.sql new file mode 100644 index 00000000..6dd9ef4a --- /dev/null +++ b/maintenance/archives/patch-rc_id.sql @@ -0,0 +1,7 @@ +-- Primary key in recentchanges + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD rc_id int(8) NOT NULL auto_increment, + ADD PRIMARY KEY rc_id (rc_id); + + diff --git a/maintenance/archives/patch-rc_ip.sql b/maintenance/archives/patch-rc_ip.sql new file mode 100644 index 00000000..a68a22cb --- /dev/null +++ b/maintenance/archives/patch-rc_ip.sql @@ -0,0 +1,7 @@ +-- Adding the rc_ip field for logging of IP addresses in recentchanges + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD rc_ip char(15) NOT NULL default '', + ADD INDEX rc_ip (rc_ip); + + diff --git a/maintenance/archives/patch-rc_type.sql b/maintenance/archives/patch-rc_type.sql new file mode 100644 index 00000000..1097771b --- /dev/null +++ b/maintenance/archives/patch-rc_type.sql @@ -0,0 +1,9 @@ +-- recentchanges improvements -- + +ALTER TABLE /*$wgDBprefix*/recentchanges + ADD rc_type tinyint(3) unsigned NOT NULL default '0', + ADD rc_moved_to_ns tinyint(3) unsigned NOT NULL default '0', + ADD rc_moved_to_title varchar(255) binary NOT NULL default ''; + +UPDATE /*$wgDBprefix*/recentchanges SET rc_type=1 WHERE rc_new; +UPDATE /*$wgDBprefix*/recentchanges SET rc_type=3 WHERE rc_namespace=4 AND (rc_title='Deletion_log' OR rc_title='Upload_log'); diff --git a/maintenance/archives/patch-rename-group.sql b/maintenance/archives/patch-rename-group.sql new file mode 100644 index 00000000..026b60bd --- /dev/null +++ b/maintenance/archives/patch-rename-group.sql @@ -0,0 +1,10 @@ +-- Rename groups table to groups, which is not a keyword +-- It was called group in a few alpha versions + +RENAME TABLE /*$wgDBprefix*/`group` TO /*$wgDBprefix*/groups; +ALTER TABLE /*$wgDBprefix*/groups + CHANGE group_id gr_id int(5) unsigned NOT NULL auto_increment, + CHANGE group_name gr_name varchar(50) NOT NULL default '', + CHANGE group_description gr_description varchar(255) NOT NULL default '', + CHANGE group_rights gr_rights tinyblob; + diff --git a/maintenance/archives/patch-rename-user_groups-and_rights.sql b/maintenance/archives/patch-rename-user_groups-and_rights.sql new file mode 100644 index 00000000..abd59319 --- /dev/null +++ b/maintenance/archives/patch-rename-user_groups-and_rights.sql @@ -0,0 +1,9 @@ + +ALTER TABLE /*$wgDBprefix*/user_groups + CHANGE user_id ug_user INT(5) UNSIGNED NOT NULL DEFAULT '0', + CHANGE group_id ug_group INT(5) UNSIGNED NOT NULL DEFAULT '0'; + +ALTER TABLE /*$wgDBprefix*/user_rights + CHANGE user_id ur_user INT(5) UNSIGNED NOT NULL, + CHANGE user_rights ur_rights TINYBLOB NOT NULL DEFAULT ''; + diff --git a/maintenance/archives/patch-restructure.sql b/maintenance/archives/patch-restructure.sql new file mode 100644 index 00000000..53f1836b --- /dev/null +++ b/maintenance/archives/patch-restructure.sql @@ -0,0 +1,147 @@ +-- The Great Restructuring of October 2004 +-- Creates 'page', 'revision' tables and transforms the classic +-- cur+old into a separate page+revision+text structure. +-- +-- The pre-conversion 'old' table is renamed to 'text' and used +-- without internal restructuring to avoid rebuilding the entire +-- table. (This can be done separately if desired.) +-- +-- The pre-conversion 'cur' table is now redundant and can be +-- discarded when done. + +CREATE TABLE /*$wgDBprefix*/page ( + page_id int(8) unsigned NOT NULL auto_increment, + page_namespace tinyint NOT NULL, + page_title varchar(255) binary NOT NULL, + page_restrictions tinyblob NOT NULL default '', + page_counter bigint(20) unsigned NOT NULL default '0', + page_is_redirect tinyint(1) unsigned NOT NULL default '0', + page_is_new tinyint(1) unsigned NOT NULL default '0', + page_random real unsigned NOT NULL, + page_touched char(14) binary NOT NULL default '', + page_latest int(8) unsigned NOT NULL, + page_len int(8) unsigned NOT NULL, + + PRIMARY KEY page_id (page_id), + UNIQUE INDEX name_title (page_namespace,page_title), + INDEX (page_random), + INDEX (page_len) +); + +CREATE TABLE /*$wgDBprefix*/revision ( + rev_id int(8) unsigned NOT NULL auto_increment, + rev_page int(8) unsigned NOT NULL, + rev_comment tinyblob NOT NULL default '', + rev_user int(5) unsigned NOT NULL default '0', + rev_user_text varchar(255) binary NOT NULL default '', + rev_timestamp char(14) binary NOT NULL default '', + rev_minor_edit tinyint(1) unsigned NOT NULL default '0', + rev_deleted tinyint(1) unsigned NOT NULL default '0', + + + PRIMARY KEY rev_page_id (rev_page, rev_id), + UNIQUE INDEX rev_id (rev_id), + INDEX rev_timestamp (rev_timestamp), + INDEX page_timestamp (rev_page,rev_timestamp), + INDEX user_timestamp (rev_user,rev_timestamp), + INDEX usertext_timestamp (rev_user_text,rev_timestamp) +); + +-- If creating new 'text' table it would look like this: +-- +-- CREATE TABLE /*$wgDBprefix*/text ( +-- old_id int(8) unsigned NOT NULL auto_increment, +-- old_text mediumtext NOT NULL default '', +-- old_flags tinyblob NOT NULL default '', +-- +-- PRIMARY KEY old_id (old_id) +-- ); + + +-- Lock! +LOCK TABLES /*$wgDBprefix*/page WRITE, /*$wgDBprefix*/revision WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur WRITE; + +-- Save the last old_id value for later +SELECT (@maxold:=MAX(old_id)) FROM /*$wgDBprefix*/old; + +-- First, copy all current entries into the old table. +INSERT + INTO /*$wgDBprefix*/old + (old_namespace, + old_title, + old_text, + old_comment, + old_user, + old_user_text, + old_timestamp, + old_minor_edit, + old_flags) + SELECT + cur_namespace, + cur_title, + cur_text, + cur_comment, + cur_user, + cur_user_text, + cur_timestamp, + cur_minor_edit, + '' + FROM /*$wgDBprefix*/cur; + +-- Now, copy all old data except the text into revisions +INSERT + INTO /*$wgDBprefix*/revision + (rev_id, + rev_page, + rev_comment, + rev_user, + rev_user_text, + rev_timestamp, + rev_minor_edit) + SELECT + old_id, + cur_id, + old_comment, + old_user, + old_user_text, + old_timestamp, + old_minor_edit + FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur + WHERE old_namespace=cur_namespace + AND old_title=cur_title; + +-- And, copy the cur data into page +INSERT + INTO /*$wgDBprefix*/page + (page_id, + page_namespace, + page_title, + page_restrictions, + page_counter, + page_is_redirect, + page_is_new, + page_random, + page_touched, + page_latest) + SELECT + cur_id, + cur_namespace, + cur_title, + cur_restrictions, + cur_counter, + cur_is_redirect, + cur_is_new, + cur_random, + cur_touched, + rev_id + FROM /*$wgDBprefix*/cur,/*$wgDBprefix*/revision + WHERE cur_id=rev_page + AND rev_timestamp=cur_timestamp + AND rev_id > @maxold; + +UNLOCK TABLES; + +-- Keep the old table around as the text store. +-- Its extra fields will be ignored, but trimming them is slow +-- so we won't bother doing it for now. +ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text; diff --git a/maintenance/archives/patch-rev_deleted.sql b/maintenance/archives/patch-rev_deleted.sql new file mode 100644 index 00000000..3af0c1d7 --- /dev/null +++ b/maintenance/archives/patch-rev_deleted.sql @@ -0,0 +1,11 @@ +-- +-- Add rev_deleted flag to revision table. +-- Deleted revisions can thus continue to be listed in history +-- and user contributions, and their text storage doesn't have +-- to be disturbed. +-- +-- 2005-03-31 +-- + +ALTER TABLE /*$wgDBprefix*/revision + ADD rev_deleted tinyint(1) unsigned NOT NULL default '0'; diff --git a/maintenance/archives/patch-rev_text_id.sql b/maintenance/archives/patch-rev_text_id.sql new file mode 100644 index 00000000..44ef438c --- /dev/null +++ b/maintenance/archives/patch-rev_text_id.sql @@ -0,0 +1,17 @@ +-- +-- Adds rev_text_id field to revision table. +-- This is a key to text.old_id, so that revisions can be stored +-- for non-save operations without duplicating text, and so that +-- a back-end storage system can provide its own numbering system +-- if necessary. +-- +-- rev.rev_id and text.old_id are no longer assumed to be the same. +-- +-- 2005-03-28 +-- + +ALTER TABLE /*$wgDBprefix*/revision + ADD rev_text_id int(8) unsigned NOT NULL; + +UPDATE /*$wgDBprefix*/revision + SET rev_text_id=rev_id; diff --git a/maintenance/archives/patch-searchindex.sql b/maintenance/archives/patch-searchindex.sql new file mode 100644 index 00000000..fb54dbbe --- /dev/null +++ b/maintenance/archives/patch-searchindex.sql @@ -0,0 +1,40 @@ +-- Break fulltext search index out to separate table from cur +-- This is being done mainly to allow us to use InnoDB tables +-- for the main db while keeping the MyISAM fulltext index for +-- search. + +-- 2002-12-16, 2003-01-25 Brion VIBBER <brion@pobox.com> + +-- Creating searchindex table... +DROP TABLE IF EXISTS /*$wgDBprefix*/searchindex; +CREATE TABLE /*$wgDBprefix*/searchindex ( + -- Key to page_id + si_page int(8) unsigned NOT NULL, + + -- Munged version of title + si_title varchar(255) NOT NULL default '', + + -- Munged version of body text + si_text mediumtext NOT NULL default '', + + UNIQUE KEY (si_page) + +) TYPE=MyISAM; + +-- Copying data into new table... +INSERT INTO /*$wgDBprefix*/searchindex + (si_page,si_title,si_text) + SELECT + cur_id,cur_ind_title,cur_ind_text + FROM /*$wgDBprefix*/cur; + + +-- Creating fulltext index... +ALTER TABLE /*$wgDBprefix*/searchindex + ADD FULLTEXT si_title (si_title), + ADD FULLTEXT si_text (si_text); + +-- Dropping index columns from cur table. +ALTER TABLE /*$wgDBprefix*/cur + DROP COLUMN cur_ind_title, + DROP COLUMN cur_ind_text; diff --git a/maintenance/archives/patch-ss_images.sql b/maintenance/archives/patch-ss_images.sql new file mode 100644 index 00000000..e1950eb6 --- /dev/null +++ b/maintenance/archives/patch-ss_images.sql @@ -0,0 +1,5 @@ +-- More statistics, for version 1.6 + +ALTER TABLE /*$wgDBprefix*/site_stats ADD ss_images int(10) default '0'; +SELECT @images := COUNT(*) FROM /*$wgDBprefix*/image; +UPDATE /*$wgDBprefix*/site_stats SET ss_images=@images; diff --git a/maintenance/archives/patch-ss_total_articles.sql b/maintenance/archives/patch-ss_total_articles.sql new file mode 100644 index 00000000..b4a48cf7 --- /dev/null +++ b/maintenance/archives/patch-ss_total_articles.sql @@ -0,0 +1,6 @@ +-- Faster statistics, as of 1.4.3 + +ALTER TABLE /*$wgDBprefix*/site_stats + ADD ss_total_pages bigint(20) default -1, + ADD ss_users bigint(20) default -1, + ADD ss_admins int(10) default -1; diff --git a/maintenance/archives/patch-templatelinks.sql b/maintenance/archives/patch-templatelinks.sql new file mode 100644 index 00000000..49bd9c5e --- /dev/null +++ b/maintenance/archives/patch-templatelinks.sql @@ -0,0 +1,19 @@ +-- +-- Track template inclusions. +-- +CREATE TABLE /*$wgDBprefix*/templatelinks ( + -- Key to the page_id of the page containing the link. + tl_from int(8) unsigned NOT NULL default '0', + + -- Key to page_namespace/page_title of the target page. + -- The target page may or may not exist, and due to renames + -- and deletions may refer to different page records as time + -- goes by. + tl_namespace int NOT NULL default '0', + tl_title varchar(255) binary NOT NULL default '', + + UNIQUE KEY tl_from(tl_from,tl_namespace,tl_title), + KEY (tl_namespace,tl_title) + +) TYPE=InnoDB; + diff --git a/maintenance/archives/patch-trackbacks.sql b/maintenance/archives/patch-trackbacks.sql new file mode 100644 index 00000000..4193d058 --- /dev/null +++ b/maintenance/archives/patch-trackbacks.sql @@ -0,0 +1,10 @@ +CREATE TABLE /*$wgDBprefix*/trackbacks ( + tb_id INTEGER AUTO_INCREMENT PRIMARY KEY, + tb_page INTEGER REFERENCES page(page_id) ON DELETE CASCADE, + tb_title VARCHAR(255) NOT NULL, + tb_url VARCHAR(255) NOT NULL, + tb_ex TEXT, + tb_name VARCHAR(255), + + INDEX (tb_page) +); diff --git a/maintenance/archives/patch-transcache.sql b/maintenance/archives/patch-transcache.sql new file mode 100644 index 00000000..a244bff8 --- /dev/null +++ b/maintenance/archives/patch-transcache.sql @@ -0,0 +1,7 @@ +CREATE TABLE /*$wgDBprefix*/transcache ( + tc_url VARCHAR(255) NOT NULL, + tc_contents TEXT, + tc_time INT NOT NULL, + UNIQUE INDEX tc_url_idx(tc_url) +) TYPE=InnoDB; + diff --git a/maintenance/archives/patch-user-realname.sql b/maintenance/archives/patch-user-realname.sql new file mode 100644 index 00000000..96edaa43 --- /dev/null +++ b/maintenance/archives/patch-user-realname.sql @@ -0,0 +1,5 @@ +-- Add a 'real name' field where users can specify the name they want +-- used for author attribution or other places that real names matter. + +ALTER TABLE user + ADD (user_real_name varchar(255) binary NOT NULL default ''); diff --git a/maintenance/archives/patch-user_email_token.sql b/maintenance/archives/patch-user_email_token.sql new file mode 100644 index 00000000..d4d633b7 --- /dev/null +++ b/maintenance/archives/patch-user_email_token.sql @@ -0,0 +1,12 @@ +-- +-- E-mail confirmation token and expiration timestamp, +-- for verification of e-mail addresses. +-- +-- 2005-04-25 +-- + +ALTER TABLE /*$wgDBprefix*/user + ADD COLUMN user_email_authenticated CHAR(14) BINARY, + ADD COLUMN user_email_token CHAR(32) BINARY, + ADD COLUMN user_email_token_expires CHAR(14) BINARY, + ADD INDEX (user_email_token); diff --git a/maintenance/archives/patch-user_groups.sql b/maintenance/archives/patch-user_groups.sql new file mode 100644 index 00000000..50f99993 --- /dev/null +++ b/maintenance/archives/patch-user_groups.sql @@ -0,0 +1,25 @@ +-- +-- User permissions have been broken out to a separate table; +-- this allows sites with a shared user table to have different +-- permissions assigned to a user in each project. +-- +-- This table replaces the old user_rights field which used a +-- comma-separated blob. +-- +CREATE TABLE /*$wgDBprefix*/user_groups ( + -- Key to user_id + ug_user int(5) unsigned NOT NULL default '0', + + -- Group names are short symbolic string keys. + -- The set of group names is open-ended, though in practice + -- only some predefined ones are likely to be used. + -- + -- At runtime $wgGroupPermissions will associate group keys + -- with particular permissions. A user will have the combined + -- permissions of any group they're explicitly in, plus + -- the implicit '*' and 'user' groups. + ug_group char(16) NOT NULL default '', + + PRIMARY KEY (ug_user,ug_group), + KEY (ug_group) +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-user_nameindex.sql b/maintenance/archives/patch-user_nameindex.sql new file mode 100644 index 00000000..9bf0aab1 --- /dev/null +++ b/maintenance/archives/patch-user_nameindex.sql @@ -0,0 +1,13 @@ +-- +-- Change the index on user_name to a unique index to prevent +-- duplicate registrations from creeping in. +-- +-- Run maintenance/userDupes.php or through the updater first +-- to clean up any prior duplicate accounts. +-- +-- Added 2005-06-05 +-- + + ALTER TABLE /*$wgDBprefix*/user + DROP INDEX user_name, +ADD UNIQUE INDEX user_name(user_name); diff --git a/maintenance/archives/patch-user_registration.sql b/maintenance/archives/patch-user_registration.sql new file mode 100644 index 00000000..65fd99df --- /dev/null +++ b/maintenance/archives/patch-user_registration.sql @@ -0,0 +1,9 @@ +-- +-- New user field for tracking registration time +-- 2005-12-21 +-- + +ALTER TABLE /*$wgDBprefix*/user + -- Timestamp of account registration. + -- Accounts predating this schema addition may contain NULL. + ADD user_registration CHAR(14) BINARY; diff --git a/maintenance/archives/patch-user_rights.sql b/maintenance/archives/patch-user_rights.sql new file mode 100644 index 00000000..36f0102a --- /dev/null +++ b/maintenance/archives/patch-user_rights.sql @@ -0,0 +1,21 @@ +-- Split user table into two parts: +-- user +-- user_rights +-- The later contains only the permissions of the user. This way, +-- you can store the accounts for several wikis in one central +-- database but keep user rights local to the wiki. + +CREATE TABLE /*$wgDBprefix*/user_rights ( + -- Key to user_id + ur_user int(5) unsigned NOT NULL, + + -- Comma-separated list of permission keys + ur_rights tinyblob NOT NULL default '', + + UNIQUE KEY ur_user (ur_user) + +) TYPE=InnoDB; + +INSERT INTO /*$wgDBprefix*/user_rights SELECT user_id,user_rights FROM /*$wgDBprefix*/user; + +ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_rights; diff --git a/maintenance/archives/patch-user_token.sql b/maintenance/archives/patch-user_token.sql new file mode 100644 index 00000000..797dc98f --- /dev/null +++ b/maintenance/archives/patch-user_token.sql @@ -0,0 +1,15 @@ +-- user_token patch +-- 2004-09-23 + +ALTER TABLE /*$wgDBprefix*/user ADD user_token char(32) binary NOT NULL default ''; + +UPDATE /*$wgDBprefix*/user SET user_token = concat( + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4), + substring(rand(),3,4) +); diff --git a/maintenance/archives/patch-userindex.sql b/maintenance/archives/patch-userindex.sql new file mode 100644 index 00000000..c039b2f3 --- /dev/null +++ b/maintenance/archives/patch-userindex.sql @@ -0,0 +1 @@ + ALTER TABLE /*$wgDBprefix*/user ADD INDEX ( `user_name` );
\ No newline at end of file diff --git a/maintenance/archives/patch-userlevels-defaultgroups.sql b/maintenance/archives/patch-userlevels-defaultgroups.sql new file mode 100644 index 00000000..065653da --- /dev/null +++ b/maintenance/archives/patch-userlevels-defaultgroups.sql @@ -0,0 +1,30 @@ +-- +-- Provide default groups +-- Should probably be inserted when someone create a new database +-- + +INSERT INTO /*$wgDBprefix*/groups (gr_id,gr_name,gr_description,gr_rights) + VALUES ( + 1,':group-anon-name',':group-anon-desc', + 'read,edit,createaccount' + ); +INSERT INTO /*$wgDBprefix*/groups (gr_id,gr_name,gr_description,gr_rights) + VALUES ( + 2,':group-loggedin-name',':group-loggedin-desc', + 'read,edit,move,upload,validate,createaccount' + ); +INSERT INTO /*$wgDBprefix*/groups (gr_id,gr_name,gr_description,gr_rights) + VALUES ( + 3,':group-admin-name',':group-admin-desc', + 'read,edit,move,upload,validate,createaccount,delete,undelete,protect,block,upload,asksql,rollback,patrol,editinterface,import' + ); +INSERT INTO /*$wgDBprefix*/groups (gr_id,gr_name,gr_description,gr_rights) + VALUES ( + 4,':group-bureaucrat-name',':group-bureaucrat-desc', + 'read,edit,move,upload,validate,createaccount,delete,undelete,protect,block,upload,asksql,rollback,patrol,editinterface,import,makesysop' + ); +INSERT INTO /*$wgDBprefix*/groups (gr_id,gr_name,gr_description,gr_rights) + VALUES ( + 5,':group-steward-name',':group-steward-desc', + 'read,edit,move,upload,validate,createaccount,delete,undelete,protect,block,upload,asksql,rollback,patrol,editinterface,import,makesysop,userrights,grouprights,siteadmin' + ); diff --git a/maintenance/archives/patch-userlevels-rights.sql b/maintenance/archives/patch-userlevels-rights.sql new file mode 100644 index 00000000..7f1cabfc --- /dev/null +++ b/maintenance/archives/patch-userlevels-rights.sql @@ -0,0 +1,5 @@ +-- Oct. 24 2004 +-- Adds the gr_rights field missing from early dev work + +-- Hold group name and description +ALTER TABLE /*$wgDBprefix*/groups ADD gr_rights tinyblob; diff --git a/maintenance/archives/patch-userlevels.sql b/maintenance/archives/patch-userlevels.sql new file mode 100644 index 00000000..ab3a9a7b --- /dev/null +++ b/maintenance/archives/patch-userlevels.sql @@ -0,0 +1,22 @@ +-- Oct. 1st 2004 - Ashar Voultoiz +-- Implement the new sitelevels +-- +-- This is under development to provide a showcase in HEAD :o) + +-- Hold group name and description +CREATE TABLE /*$wgDBprefix*/groups ( + gr_id int(5) unsigned NOT NULL auto_increment, + gr_name varchar(50) NOT NULL default '', + gr_description varchar(255) NOT NULL default '', + gr_rights tinyblob, + PRIMARY KEY (gr_id) + +) TYPE=InnoDB; + +-- Relation table between user and groups +CREATE TABLE /*$wgDBprefix*/user_groups ( + ug_user int(5) unsigned NOT NULL default '0', + ug_group int(5) unsigned NOT NULL default '0', + PRIMARY KEY (ug_user,ug_group) + +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-usernewtalk.sql b/maintenance/archives/patch-usernewtalk.sql new file mode 100644 index 00000000..fb8c8655 --- /dev/null +++ b/maintenance/archives/patch-usernewtalk.sql @@ -0,0 +1,20 @@ +--- This table stores all the IDs of users whose talk +--- page has been changed (the respective row is deleted +--- when the user looks at the page). +--- The respective column in the user table is no longer +--- required and therefore dropped. + +CREATE TABLE /*$wgDBprefix*/user_newtalk ( + user_id int(5) NOT NULL default '0', + user_ip varchar(40) NOT NULL default '', + KEY user_id (user_id), + KEY user_ip (user_ip) +) TYPE=MyISAM; + +INSERT INTO + /*$wgDBprefix*/user_newtalk (user_id, user_ip) + SELECT user_id, '' + FROM user + WHERE user_newtalk != 0; + +ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_newtalk; diff --git a/maintenance/archives/patch-usernewtalk2.sql b/maintenance/archives/patch-usernewtalk2.sql new file mode 100644 index 00000000..477109b7 --- /dev/null +++ b/maintenance/archives/patch-usernewtalk2.sql @@ -0,0 +1,6 @@ +CREATE TABLE /*$wgDBprefix*/user_newtalk ( + user_id int(5) NOT NULL default '0', + user_ip varchar(40) NOT NULL default '', + INDEX user_id (user_id), + INDEX user_ip (user_ip) +); diff --git a/maintenance/archives/patch-val_ip.sql b/maintenance/archives/patch-val_ip.sql new file mode 100644 index 00000000..9214218d --- /dev/null +++ b/maintenance/archives/patch-val_ip.sql @@ -0,0 +1,4 @@ +-- Column added 2005-05-24 + +ALTER TABLE /*$wgDBprefix*/validate + ADD COLUMN val_ip varchar(20) NOT NULL default ''; diff --git a/maintenance/archives/patch-validate.sql b/maintenance/archives/patch-validate.sql new file mode 100644 index 00000000..3fa7e844 --- /dev/null +++ b/maintenance/archives/patch-validate.sql @@ -0,0 +1,13 @@ +-- For article validation + +DROP TABLE IF EXISTS /*$wgDBprefix*/validate; +CREATE TABLE /*$wgDBprefix*/validate ( + `val_user` int(11) NOT NULL default '0', + `val_page` int(11) unsigned NOT NULL default '0', + `val_revision` int(11) unsigned NOT NULL default '0', + `val_type` int(11) unsigned NOT NULL default '0', + `val_value` int(11) default '0', + `val_comment` varchar(255) NOT NULL default '', + `val_ip` varchar(20) NOT NULL default '', + KEY `val_user` (`val_user`,`val_revision`) +) TYPE=InnoDB; diff --git a/maintenance/archives/patch-watchlist-null.sql b/maintenance/archives/patch-watchlist-null.sql new file mode 100644 index 00000000..37ffc163 --- /dev/null +++ b/maintenance/archives/patch-watchlist-null.sql @@ -0,0 +1,9 @@ +-- Set up wl_notificationtimestamp with NULL support. +-- 2005-08-17 + +ALTER TABLE /*$wgDBprefix*/watchlist + CHANGE wl_notificationtimestamp wl_notificationtimestamp varchar(14) binary; + +UPDATE /*$wgDBprefix*/watchlist + SET wl_notificationtimestamp=NULL + WHERE wl_notificationtimestamp='0'; diff --git a/maintenance/archives/patch-watchlist.sql b/maintenance/archives/patch-watchlist.sql new file mode 100644 index 00000000..adee010b --- /dev/null +++ b/maintenance/archives/patch-watchlist.sql @@ -0,0 +1,30 @@ +-- Convert watchlists to new new format ;) + +-- Ids just aren't convenient when what we want is to +-- treat article and talk pages as equivalent. +-- Better to use namespace (drop the 1 bit!) and title + +-- 2002-12-17 by Brion Vibber <brion@pobox.com> +-- affects, affected by changes to SpecialWatchlist.php, User.php, +-- Article.php, Title.php, SpecialRecentchanges.php + +DROP TABLE IF EXISTS watchlist2; +CREATE TABLE watchlist2 ( + wl_user int(5) unsigned NOT NULL, + wl_namespace tinyint(2) unsigned NOT NULL default '0', + wl_title varchar(255) binary NOT NULL default '', + UNIQUE KEY (wl_user, wl_namespace, wl_title) +) TYPE=MyISAM PACK_KEYS=1; + +INSERT INTO watchlist2 (wl_user,wl_namespace,wl_title) + SELECT DISTINCT wl_user,(cur_namespace | 1) - 1,cur_title + FROM watchlist,cur WHERE wl_page=cur_id; + +ALTER TABLE watchlist RENAME TO oldwatchlist; +ALTER TABLE watchlist2 RENAME TO watchlist; + +-- Check that the new one is correct, then: +-- DROP TABLE oldwatchlist; + +-- Also should probably drop the ancient and now unused: +ALTER TABLE user DROP COLUMN user_watch; diff --git a/maintenance/archives/rebuildRecentchanges.inc b/maintenance/archives/rebuildRecentchanges.inc new file mode 100644 index 00000000..54f6cb38 --- /dev/null +++ b/maintenance/archives/rebuildRecentchanges.inc @@ -0,0 +1,122 @@ +<?php +/** + * Rebuild recent changes table + * + * @deprecated + * @package MediaWiki + * @subpackage MaintenanceArchive + */ + +/** */ +function rebuildRecentChangesTable() +{ + $sql = "DROP TABLE IF EXISTS recentchanges"; + wfQuery( $sql ); + + $sql = "CREATE TABLE recentchanges ( + rc_timestamp varchar(14) binary NOT NULL default '', + rc_cur_time varchar(14) binary NOT NULL default '', + rc_user int(10) unsigned NOT NULL default '0', + rc_user_text varchar(255) binary NOT NULL default '', + rc_namespace tinyint(3) unsigned NOT NULL default '0', + rc_title varchar(255) binary NOT NULL default '', + rc_comment varchar(255) binary NOT NULL default '', + rc_minor tinyint(3) unsigned NOT NULL default '0', + rc_new tinyint(3) unsigned NOT NULL default '0', + rc_cur_id int(10) unsigned NOT NULL default '0', + rc_this_oldid int(10) unsigned NOT NULL default '0', + rc_last_oldid int(10) unsigned NOT NULL default '0', + INDEX rc_cur_id (rc_cur_id), + INDEX rc_cur_time (rc_cur_time), + INDEX rc_timestamp (rc_timestamp), + INDEX rc_namespace (rc_namespace), + INDEX rc_title (rc_title) +) TYPE=MyISAM PACK_KEYS=1;"; + wfQuery( $sql ); + + print( "Loading from CUR table...\n" ); + + $sql = "INSERT INTO recentchanges (rc_timestamp,rc_cur_time,rc_user," . + "rc_user_text,rc_namespace,rc_title,rc_comment,rc_minor,rc_new," . + "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT cur_timestamp," . + "cur_timestamp,cur_user,cur_user_text,cur_namespace,cur_title," . + "cur_comment,cur_minor_edit,cur_is_new,cur_id,0,0 FROM cur " . + "ORDER BY cur_timestamp DESC LIMIT 5000"; + wfQuery( $sql ); + + print( "Loading from OLD table...\n" ); + + $sql = "INSERT INTO recentchanges (rc_timestamp,rc_cur_time,rc_user," . + "rc_user_text,rc_namespace,rc_title,rc_comment,rc_minor,rc_new," . + "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT old_timestamp,''," . + "old_user,old_user_text,old_namespace,old_title,old_comment," . + "old_minor_edit,0,0,old_id,0 FROM old ORDER BY old_timestamp " . + "DESC LIMIT 5000"; + wfQuery( $sql ); + + $sql = "SELECT rc_timestamp FROM recentchanges " . + "ORDER BY rc_timestamp DESC LIMIT 5000,1"; + $res = wfQuery( $sql ); + $obj = wfFetchObject( $res ); + $ts = $obj->rc_timestamp; + + $sql = "DELETE FROM recentchanges WHERE rc_timestamp < '{$ts}'"; + wfQuery( $sql ); + + rebuildRecentChangesTablePass2(); +} + +function rebuildRecentChangesTablePass2() +{ + $ns = $id = $count = 0; + $title = $ct = ""; + + print( "Updating links...\n" ); + + $sql = "SELECT rc_namespace,rc_title,rc_timestamp FROM recentchanges " . + "ORDER BY rc_namespace,rc_title,rc_timestamp DESC"; + $res = wfQuery( $sql ); + + while ( $obj = wfFetchObject( $res ) ) { + if ( ! ( $ns == $obj->rc_namespace && + 0 == strcmp( $title, wfStrencode( $obj->rc_title ) ) ) ) { + + $ns = $obj->rc_namespace; + $title = wfStrencode( $obj->rc_title ); + + $sql = "SELECT cur_id,cur_timestamp FROM cur WHERE " . + "cur_namespace={$ns} AND cur_title='{$title}'"; + $res2 = wfQuery( $sql ); + $obj2 = wfFetchObject( $res2 ); + + $id = $obj2->cur_id; + $ct = $obj2->cur_timestamp; + } + $sql = "SELECT old_id FROM old WHERE old_namespace={$ns} " . + "AND old_title='{$title}' AND old_timestamp < '" . + "{$obj->rc_timestamp}' ORDER BY old_timestamp DESC LIMIT 1"; + $res2 = wfQuery( $sql ); + + if ( 0 != wfNumRows( $res2 ) ) { + $obj2 = wfFetchObject( $res2 ); + + $sql = "UPDATE recentchanges SET rc_cur_id={$id},rc_cur_time=" . + "'{$ct}',rc_last_oldid={$obj2->old_id} WHERE " . + "rc_namespace={$ns} AND rc_title='{$title}' AND " . + "rc_timestamp='{$obj->rc_timestamp}'"; + wfQuery( $sql ); + } else { + $sql = "UPDATE recentchanges SET rc_cur_id={$id},rc_cur_time=" . + "'{$ct}' WHERE rc_namespace={$ns} AND rc_title='{$title}' " . + "AND rc_timestamp='{$obj->rc_timestamp}'"; + wfQuery( $sql ); + } + + if ( 0 == ( ++$count % 500 ) ) { + printf( "%d records processed.\n", $count ); + } + } +} + + +?> diff --git a/maintenance/archives/upgradeWatchlist.php b/maintenance/archives/upgradeWatchlist.php new file mode 100644 index 00000000..b4605a50 --- /dev/null +++ b/maintenance/archives/upgradeWatchlist.php @@ -0,0 +1,67 @@ +<?php +/** + * @deprecated + * @package MediaWiki + * @subpackage MaintenanceArchive + */ + +/** */ +print "This script is obsolete!"; +print "It is retained in the source here in case some of its +code might be useful for ad-hoc conversion tasks, but it is +not maintained and probably won't even work as is."; +exit(); + +# Convert watchlists to new format + +global $IP; +require_once( "../LocalSettings.php" ); +require_once( "$IP/Setup.php" ); + +$wgTitle = Title::newFromText( "Rebuild links script" ); +set_time_limit(0); + +$wgDBuser = "wikiadmin"; +$wgDBpassword = $wgDBadminpassword; + +$sql = "DROP TABLE IF EXISTS watchlist"; +wfQuery( $sql, DB_MASTER ); +$sql = "CREATE TABLE watchlist ( + wl_user int(5) unsigned NOT NULL, + wl_page int(8) unsigned NOT NULL, + UNIQUE KEY (wl_user, wl_page) +) TYPE=MyISAM PACK_KEYS=1"; +wfQuery( $sql, DB_MASTER ); + +$lc = new LinkCache; + +# Now, convert! +$sql = "SELECT user_id,user_watch FROM user"; +$res = wfQuery( $sql, DB_SLAVE ); +$nu = wfNumRows( $res ); +$sql = "INSERT into watchlist (wl_user,wl_page) VALUES "; +$i = $n = 0; +while( $row = wfFetchObject( $res ) ) { + $list = explode( "\n", $row->user_watch ); + $bits = array(); + foreach( $list as $title ) { + if( $id = $lc->addLink( $title ) and ! $bits[$id]++) { + $sql .= ($i++ ? "," : "") . "({$row->user_id},{$id})"; + } + } + if( ($n++ % 100) == 0 ) echo "$n of $nu users done...\n"; +} +echo "$n users done.\n"; +if( $i ) { + wfQuery( $sql, DB_MASTER ); +} + + +# Add index +# is this necessary? +$sql = "ALTER TABLE watchlist + ADD INDEX wl_user (wl_user), + ADD INDEX wl_page (wl_page)"; +#wfQuery( $sql, DB_MASTER ); + +?> |