Merge "Drop 1.31 db updates"

This commit is contained in:
jenkins-bot 2022-09-26 16:15:18 +00:00 committed by Gerrit Code Review
commit b8e4073804
34 changed files with 3 additions and 843 deletions

View file

@ -1223,23 +1223,6 @@ abstract class DatabaseUpdater {
$this->output( "done.\n" ); $this->output( "done.\n" );
} }
/**
* Migrate comments to the new 'comment' table
* @since 1.30
*/
protected function migrateComments() {
if ( !$this->updateRowExists( 'MigrateComments' ) ) {
$this->output(
"Migrating comments to the 'comments' table, printing progress markers. For large\n" .
"databases, you may want to hit Ctrl-C and do this manually with\n" .
"maintenance/migrateComments.php.\n"
);
$task = $this->maintenance->runChild( MigrateComments::class, 'migrateComments.php' );
$ok = $task->execute();
$this->output( $ok ? "done.\n" : "errors were encountered.\n" );
}
}
/** /**
* Merge `image_comment_temp` into the `image` table * Merge `image_comment_temp` into the `image` table
* @since 1.32 * @since 1.32
@ -1260,59 +1243,6 @@ abstract class DatabaseUpdater {
} }
} }
/**
* Migrate actors to the new 'actor' table
* @since 1.31
*/
protected function migrateActors() {
if ( !$this->updateRowExists( 'MigrateActors' ) ) {
$this->output(
"Migrating actors to the 'actor' table, printing progress markers. For large\n" .
"databases, you may want to hit Ctrl-C and do this manually with\n" .
"maintenance/migrateActors.php.\n"
);
$task = $this->maintenance->runChild( MigrateActors::class, 'migrateActors.php' );
$ok = $task->execute();
$this->output( $ok ? "done.\n" : "errors were encountered.\n" );
}
}
/**
* Migrate ar_text to modern storage
* @since 1.31
*/
protected function migrateArchiveText() {
if ( $this->db->fieldExists( 'archive', 'ar_text', __METHOD__ ) ) {
$this->output( "Migrating archive ar_text to modern storage.\n" );
$task = $this->maintenance->runChild( MigrateArchiveText::class, 'migrateArchiveText.php' );
// @phan-suppress-next-line PhanUndeclaredMethod
$task->setForce();
if ( $task->execute() ) {
$this->applyPatch( 'patch-drop-ar_text.sql', false,
'Dropping ar_text and ar_flags columns' );
}
}
}
/**
* Populate ar_rev_id, then make it not nullable
* @since 1.31
*/
protected function populateArchiveRevId() {
$info = $this->db->fieldInfo( 'archive', 'ar_rev_id' );
if ( !$info ) {
throw new MWException( 'Missing ar_rev_id field of archive table. Should not happen.' );
}
if ( $info->isNullable() ) {
$this->output( "Populating ar_rev_id.\n" );
$task = $this->maintenance->runChild( PopulateArchiveRevId::class, 'populateArchiveRevId.php' );
if ( $task->execute() ) {
$this->applyPatch( 'patch-ar_rev_id-not-null.sql', false,
'Making ar_rev_id not nullable' );
}
}
}
/** /**
* Populates the externallinks.el_index_60 field * Populates the externallinks.el_index_60 field
* @since 1.32 * @since 1.32

View file

@ -35,35 +35,6 @@ class MysqlUpdater extends DatabaseUpdater {
// 1.35 but it must come first // 1.35 but it must come first
[ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ],
// 1.31
[ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ],
[ 'migrateComments' ],
[ 'addTable', 'slots', 'patch-slots.sql' ],
[ 'addField', 'slots', 'slot_origin', 'patch-slot-origin.sql' ],
[ 'addTable', 'content', 'patch-content.sql' ],
[ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
[ 'addTable', 'content_models', 'patch-content_models.sql' ],
[ 'migrateArchiveText' ],
[ 'addTable', 'actor', 'patch-actor-table.sql' ],
[ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ],
[ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ],
[ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ],
[ 'addField', 'oldimage', 'oi_actor', 'patch-oldimage-oi_actor.sql' ],
[ 'addField', 'filearchive', 'fa_actor', 'patch-filearchive-fa_actor.sql' ],
[ 'addField', 'recentchanges', 'rc_actor', 'patch-recentchanges-rc_actor.sql' ],
[ 'addField', 'logging', 'log_actor', 'patch-logging-log_actor.sql' ],
[ 'migrateActors' ],
// Adds a default value to the rev_text_id field to allow Multi Content
// Revisions migration to happen where rows will have to be added to the
// revision table with no rev_text_id.
[ 'setDefault', 'revision', 'rev_text_id', 0 ],
[ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
[ 'populateArchiveRevId' ],
[ 'addIndex', 'recentchanges', 'rc_namespace_title_timestamp',
'patch-recentchanges-nttindex.sql' ],
// 1.32 // 1.32
[ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ], [ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ],
[ 'populateExternallinksIndex60' ], [ 'populateExternallinksIndex60' ],

View file

@ -52,88 +52,6 @@ class PostgresUpdater extends DatabaseUpdater {
// Introduced in 1.37. // Introduced in 1.37.
[ 'renameTable', 'mwuser', 'user' ], [ 'renameTable', 'mwuser', 'user' ],
// 1.31
[ 'addPgField', 'image', 'img_description_id', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'migrateComments' ],
[ 'addTable', 'slots', 'patch-slots-table.sql' ],
[ 'dropPgIndex', 'slots', 'slot_role_inherited' ],
[ 'dropPgField', 'slots', 'slot_inherited' ],
[ 'addPgField', 'slots', 'slot_origin', 'INTEGER NOT NULL' ],
[
'addPgIndex',
'slots',
'slot_revision_origin_role',
'( slot_revision_id, slot_origin, slot_role_id )',
],
[ 'addTable', 'content', 'patch-content-table.sql' ],
[ 'addTable', 'content_models', 'patch-content_models-table.sql' ],
[ 'addTable', 'slot_roles', 'patch-slot_roles-table.sql' ],
[ 'migrateArchiveText' ],
[ 'addTable', 'actor', 'patch-actor-table.sql' ],
[ 'setDefault', 'revision', 'rev_user', 0 ],
[ 'setDefault', 'revision', 'rev_user_text', '' ],
[ 'setDefault', 'archive', 'ar_user', 0 ],
[ 'changeNullableField', 'archive', 'ar_user', 'NOT NULL', true ],
[ 'setDefault', 'archive', 'ar_user_text', '' ],
[ 'addPgField', 'archive', 'ar_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'ipblocks', 'ipb_by', 0 ],
[ 'addPgField', 'ipblocks', 'ipb_by_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'image', 'img_user', 0 ],
[ 'changeNullableField', 'image', 'img_user', 'NOT NULL', true ],
[ 'setDefault', 'image', 'img_user_text', '' ],
[ 'addPgField', 'image', 'img_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'oldimage', 'oi_user', 0 ],
[ 'changeNullableField', 'oldimage', 'oi_user', 'NOT NULL', true ],
[ 'setDefault', 'oldimage', 'oi_user_text', '' ],
[ 'addPgField', 'oldimage', 'oi_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'filearchive', 'fa_user', 0 ],
[ 'changeNullableField', 'filearchive', 'fa_user', 'NOT NULL', true ],
[ 'setDefault', 'filearchive', 'fa_user_text', '' ],
[ 'addPgField', 'filearchive', 'fa_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'recentchanges', 'rc_user', 0 ],
[ 'changeNullableField', 'recentchanges', 'rc_user', 'NOT NULL', true ],
[ 'setDefault', 'recentchanges', 'rc_user_text', '' ],
[ 'addPgField', 'recentchanges', 'rc_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'setDefault', 'logging', 'log_user', 0 ],
[ 'changeNullableField', 'logging', 'log_user', 'NOT NULL', true ],
[ 'addPgField', 'logging', 'log_actor', 'INTEGER NOT NULL DEFAULT 0' ],
[ 'addPgIndex', 'logging', 'logging_actor_time_backwards', '( log_timestamp, log_actor )' ],
[ 'addPgIndex', 'logging', 'logging_actor_type_time', '( log_actor, log_type, log_timestamp )' ],
[ 'addPgIndex', 'logging', 'logging_actor_time', '( log_actor, log_timestamp )' ],
[ 'migrateActors' ],
[ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
[ 'populateArchiveRevId' ],
[ 'dropPgIndex', 'recentchanges', 'rc_namespace_title' ],
[
'addPgIndex',
'recentchanges',
'rc_namespace_title_timestamp', '( rc_namespace, rc_title, rc_timestamp )'
],
[ 'setSequenceOwner', 'user', 'user_id', 'user_user_id_seq' ],
[ 'setSequenceOwner', 'actor', 'actor_id', 'actor_actor_id_seq' ],
[ 'setSequenceOwner', 'page', 'page_id', 'page_page_id_seq' ],
[ 'setSequenceOwner', 'revision', 'rev_id', 'revision_rev_id_seq' ],
[ 'setSequenceOwner', 'ip_changes', 'ipc_rev_id', 'ip_changes_ipc_rev_id_seq' ],
[ 'setSequenceOwner', 'text', 'old_id', 'text_old_id_seq' ],
[ 'setSequenceOwner', 'comment', 'comment_id', 'comment_comment_id_seq' ],
[ 'setSequenceOwner', 'page_restrictions', 'pr_id', 'page_restrictions_pr_id_seq' ],
[ 'setSequenceOwner', 'archive', 'ar_id', 'archive_ar_id_seq' ],
[ 'setSequenceOwner', 'content', 'content_id', 'content_content_id_seq' ],
[ 'setSequenceOwner', 'slot_roles', 'role_id', 'slot_roles_role_id_seq' ],
[ 'setSequenceOwner', 'content_models', 'model_id', 'content_models_model_id_seq' ],
[ 'setSequenceOwner', 'externallinks', 'el_id', 'externallinks_el_id_seq' ],
[ 'setSequenceOwner', 'ipblocks', 'ipb_id', 'ipblocks_ipb_id_seq' ],
[ 'setSequenceOwner', 'filearchive', 'fa_id', 'filearchive_fa_id_seq' ],
[ 'setSequenceOwner', 'uploadstash', 'us_id', 'uploadstash_us_id_seq' ],
[ 'setSequenceOwner', 'recentchanges', 'rc_id', 'recentchanges_rc_id_seq' ],
[ 'setSequenceOwner', 'watchlist', 'wl_id', 'watchlist_wl_id_seq' ],
[ 'setSequenceOwner', 'logging', 'log_id', 'logging_log_id_seq' ],
[ 'setSequenceOwner', 'job', 'job_id', 'job_job_id_seq' ],
[ 'setSequenceOwner', 'category', 'cat_id', 'category_cat_id_seq' ],
[ 'setSequenceOwner', 'change_tag', 'ct_id', 'change_tag_ct_id_seq' ],
[ 'setSequenceOwner', 'sites', 'site_id', 'sites_site_id_seq' ],
// 1.32 // 1.32
[ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ], [ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ],
[ 'populateExternallinksIndex60' ], [ 'populateExternallinksIndex60' ],

View file

@ -35,31 +35,6 @@ class SqliteUpdater extends DatabaseUpdater {
// 1.35 but must come first // 1.35 but must come first
[ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ], [ 'addField', 'revision', 'rev_actor', 'patch-revision-actor-comment-MCR.sql' ],
// 1.31
[ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ],
[ 'migrateComments' ],
[ 'addTable', 'content', 'patch-content.sql' ],
[ 'addTable', 'content_models', 'patch-content_models.sql' ],
[ 'addTable', 'slots', 'patch-slots.sql' ],
[ 'addField', 'slots', 'slot_origin', 'patch-slot-origin.sql' ],
[ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
[ 'migrateArchiveText' ],
[ 'addTable', 'actor', 'patch-actor-table.sql' ],
[ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ],
[ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ],
[ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ],
[ 'addField', 'oldimage', 'oi_actor', 'patch-oldimage-oi_actor.sql' ],
[ 'addField', 'filearchive', 'fa_actor', 'patch-filearchive-fa_actor.sql' ],
[ 'addField', 'recentchanges', 'rc_actor', 'patch-recentchanges-rc_actor.sql' ],
[ 'addField', 'logging', 'log_actor', 'patch-logging-log_actor.sql' ],
[ 'migrateActors' ],
[ 'modifyField', 'revision', 'rev_text_id', 'patch-rev_text_id-default.sql' ],
[ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
[ 'populateArchiveRevId' ],
[ 'addIndex', 'recentchanges', 'rc_namespace_title_timestamp',
'patch-recentchanges-nttindex.sql' ],
// 1.32 // 1.32
[ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ], [ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ],
[ 'populateExternallinksIndex60' ], [ 'populateExternallinksIndex60' ],

View file

@ -1,12 +0,0 @@
--
-- patch-actor-table.sql
--
-- T167246. Add an `actor` table.
CREATE TABLE /*_*/actor (
actor_id bigint unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
actor_user int unsigned,
actor_name varchar(255) binary NOT NULL
) /*$wgDBTableOptions*/;
CREATE UNIQUE INDEX /*i*/actor_user ON /*_*/actor (actor_user);
CREATE UNIQUE INDEX /*i*/actor_name ON /*_*/actor (actor_name);

View file

@ -1,4 +0,0 @@
ALTER TABLE /*_*/archive
ALTER COLUMN ar_user_text SET DEFAULT '',
ADD COLUMN ar_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ar_user_text;
CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp);

View file

@ -1,21 +0,0 @@
--
-- The content table represents content objects. It's primary purpose is to provide the necessary
-- meta-data for loading and interpreting a serialized data blob to create a content object.
--
CREATE TABLE /*_*/content (
-- ID of the content object
content_id bigint unsigned PRIMARY KEY AUTO_INCREMENT,
-- Nominal size of the content object (not necessarily of the serialized blob)
content_size int unsigned NOT NULL,
-- Nominal hash of the content object (not necessarily of the serialized blob)
content_sha1 varbinary(32) NOT NULL,
-- reference to model_id
content_model smallint unsigned NOT NULL,
-- URL-like address of the content blob
content_address varbinary(255) NOT NULL
) /*$wgDBTableOptions*/;

View file

@ -1,10 +0,0 @@
--
-- Normalization table for content model names
--
CREATE TABLE /*_*/content_models (
model_id smallint PRIMARY KEY AUTO_INCREMENT,
model_name varbinary(64) NOT NULL
) /*$wgDBTableOptions*/;
-- Index for looking of the internal ID of for a name
CREATE UNIQUE INDEX /*i*/model_name ON /*_*/content_models (model_name);

View file

@ -1,4 +0,0 @@
ALTER TABLE /*_*/filearchive
ALTER COLUMN fa_user_text SET DEFAULT '',
ADD COLUMN fa_actor bigint unsigned NOT NULL DEFAULT 0 AFTER fa_user_text;
CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);

View file

@ -1,4 +0,0 @@
ALTER TABLE /*_*/image
ALTER COLUMN img_user_text SET DEFAULT '',
ADD COLUMN img_actor bigint unsigned NOT NULL DEFAULT 0 AFTER img_user_text;
CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor, img_timestamp);

View file

@ -1,7 +0,0 @@
--
-- patch-image-img_description_id.sql
--
-- T188132. Add `img_description_id` to the `image` table.
ALTER TABLE /*_*/image
ADD COLUMN img_description_id bigint unsigned NOT NULL DEFAULT 0 AFTER img_description;

View file

@ -1,2 +0,0 @@
ALTER TABLE /*_*/ipblocks
ADD COLUMN ipb_by_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ipb_by_text;

View file

@ -1,4 +0,0 @@
ALTER TABLE /*_*/logging
ADD COLUMN log_actor bigint unsigned NOT NULL DEFAULT 0 AFTER log_user_text;
CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp);
CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp);

View file

@ -1,4 +0,0 @@
ALTER TABLE /*_*/oldimage
ALTER COLUMN oi_user_text SET DEFAULT '',
ADD COLUMN oi_actor bigint unsigned NOT NULL DEFAULT 0 AFTER oi_user_text;
CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp);

View file

@ -1,11 +0,0 @@
--
-- patch-recentchanges-nttindex.sql
--
-- Per task T57377
--
-- Improve performance API queries to ask for a certain pages
--
DROP INDEX /*i*/rc_namespace_title ON /*_*/recentchanges;
CREATE INDEX /*i*/rc_namespace_title_timestamp ON /*_*/recentchanges (rc_namespace, rc_title, rc_timestamp);

View file

@ -1,5 +0,0 @@
ALTER TABLE /*_*/recentchanges
ALTER COLUMN rc_user_text SET DEFAULT '',
ADD COLUMN rc_actor bigint unsigned NOT NULL DEFAULT 0 AFTER rc_user_text;
CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor);
CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);

View file

@ -1,7 +0,0 @@
ALTER TABLE /*_*/site_stats
ALTER ss_total_edits SET DEFAULT NULL,
ALTER ss_good_articles SET DEFAULT NULL,
MODIFY COLUMN ss_total_pages bigint unsigned DEFAULT NULL,
MODIFY COLUMN ss_users bigint unsigned DEFAULT NULL,
MODIFY COLUMN ss_active_users bigint unsigned DEFAULT NULL,
MODIFY COLUMN ss_images bigint unsigned DEFAULT NULL;

View file

@ -1,15 +0,0 @@
--
-- Replace slot_inherited with slot_origin.
--
-- NOTE: There is no release that has slot_inherited. This is only needed to transition between
-- snapshot versions of 1.30.
--
-- NOTE: No code that writes to the slots table was merged yet, the table is assumed to be empty.
--
DROP INDEX /*i*/slot_role_inherited ON /*_*/slots;
ALTER TABLE /*_*/slots
DROP COLUMN slot_inherited,
ADD COLUMN slot_origin bigint unsigned NOT NULL;
CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);

View file

@ -1,10 +0,0 @@
--
-- Normalization table for role names
--
CREATE TABLE /*_*/slot_roles (
role_id smallint PRIMARY KEY AUTO_INCREMENT,
role_name varbinary(64) NOT NULL
) /*$wgDBTableOptions*/;
-- Index for looking of the internal ID of for a name
CREATE UNIQUE INDEX /*i*/role_name ON /*_*/slot_roles (role_name);

View file

@ -1,25 +0,0 @@
--
-- Slots represent an n:m relation between revisions and content objects.
-- A content object can have a specific "role" in one or more revisions.
-- Each revision can have multiple content objects, each having a different role.
--
CREATE TABLE /*_*/slots (
-- reference to rev_id
slot_revision_id bigint unsigned NOT NULL,
-- reference to role_id
slot_role_id smallint unsigned NOT NULL,
-- reference to content_id
slot_content_id bigint unsigned NOT NULL,
-- The revision ID of the revision that originated the slot's content.
-- To find revisions that changed slots, look for slot_origin = slot_revision_id.
slot_origin bigint unsigned NOT NULL,
PRIMARY KEY ( slot_revision_id, slot_role_id )
) /*$wgDBTableOptions*/;
-- Index for finding revisions that modified a specific slot
CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);

View file

@ -1,13 +0,0 @@
--
-- patch-actor-table.sql
--
-- T167246. Add an `actor` table.
CREATE SEQUENCE actor_actor_id_seq;
CREATE TABLE actor (
actor_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('actor_actor_id_seq'),
actor_user INTEGER,
actor_name TEXT NOT NULL
);
CREATE UNIQUE INDEX actor_user ON actor (actor_user);
CREATE UNIQUE INDEX actor_name ON actor (actor_name);

View file

@ -1,7 +0,0 @@
ALTER TABLE /*_*/site_stats
ALTER ss_total_edits SET DEFAULT NULL,
ALTER ss_good_articles SET DEFAULT NULL,
ALTER ss_total_pages SET DEFAULT NULL,
ALTER ss_users SET DEFAULT NULL,
ALTER ss_active_users SET DEFAULT NULL,
ALTER ss_images SET DEFAULT NULL;

View file

@ -1,43 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS /*_*/archive_tmp;
CREATE TABLE /*_*/archive_tmp (
ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
ar_namespace int NOT NULL default 0,
ar_title varchar(255) binary NOT NULL default '',
ar_comment varbinary(767) NOT NULL default '',
ar_comment_id bigint unsigned NOT NULL DEFAULT 0,
ar_user int unsigned NOT NULL default 0,
ar_user_text varchar(255) binary NOT NULL DEFAULT '',
ar_actor bigint unsigned NOT NULL DEFAULT 0,
ar_timestamp binary(14) NOT NULL default '',
ar_minor_edit tinyint NOT NULL default 0,
ar_rev_id int unsigned,
ar_text_id int unsigned NOT NULL default 0,
ar_deleted tinyint unsigned NOT NULL default 0,
ar_len int unsigned,
ar_page_id int unsigned,
ar_parent_id int unsigned default NULL,
ar_sha1 varbinary(32) NOT NULL default '',
ar_content_model varbinary(32) DEFAULT NULL,
ar_content_format varbinary(64) DEFAULT NULL
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/archive_tmp (
ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text,
ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len,
ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format)
SELECT
ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text,
ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len,
ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format
FROM /*_*/archive;
DROP TABLE /*_*/archive;
ALTER TABLE /*_*/archive_tmp RENAME TO /*_*/archive;
CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id);
CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp);
COMMIT;

View file

@ -1,61 +0,0 @@
--
-- patch-filearchive-fa_actor.sql
--
-- Split from patch-actor-table.sql to work around SQLite unconditionally running
-- patch-add-3d.sql on a fresh install, which wipes out fa_actor.
BEGIN;
DROP TABLE IF EXISTS /*_*/filearchive_tmp;
CREATE TABLE /*_*/filearchive_tmp (
fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
fa_name varchar(255) binary NOT NULL default '',
fa_archive_name varchar(255) binary default '',
fa_storage_group varbinary(16),
fa_storage_key varbinary(64) default '',
fa_deleted_user int,
fa_deleted_timestamp binary(14) default '',
fa_deleted_reason varbinary(767) default '',
fa_deleted_reason_id bigint unsigned NOT NULL DEFAULT 0,
fa_size int unsigned default 0,
fa_width int default 0,
fa_height int default 0,
fa_metadata mediumblob,
fa_bits int default 0,
fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
fa_minor_mime varbinary(100) default "unknown",
fa_description varbinary(767) default '',
fa_description_id bigint unsigned NOT NULL DEFAULT 0,
fa_user int unsigned default 0,
fa_user_text varchar(255) binary DEFAULT '',
fa_actor bigint unsigned NOT NULL DEFAULT 0,
fa_timestamp binary(14) default '',
fa_deleted tinyint unsigned NOT NULL default 0,
fa_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/filearchive_tmp (
fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
fa_deleted, fa_sha1)
SELECT
fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
fa_deleted, fa_sha1
FROM /*_*/filearchive;
DROP TABLE /*_*/filearchive;
ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);
COMMIT;

View file

@ -1,43 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS /*_*/image_tmp;
CREATE TABLE /*_*/image_tmp (
img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
img_size int unsigned NOT NULL default 0,
img_width int NOT NULL default 0,
img_height int NOT NULL default 0,
img_metadata mediumblob NOT NULL,
img_bits int NOT NULL default 0,
img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
img_minor_mime varbinary(100) NOT NULL default "unknown",
img_description varbinary(767) NOT NULL default '',
img_description_id bigint unsigned NOT NULL DEFAULT 0,
img_user int unsigned NOT NULL default 0,
img_user_text varchar(255) binary NOT NULL DEFAULT '',
img_actor bigint unsigned NOT NULL DEFAULT 0,
img_timestamp varbinary(14) NOT NULL default '',
img_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/image_tmp (
img_name, img_size, img_width, img_height, img_metadata, img_bits,
img_media_type, img_major_mime, img_minor_mime, img_description,
img_description_id, img_user, img_user_text, img_timestamp, img_sha1)
SELECT
img_name, img_size, img_width, img_height, img_metadata, img_bits,
img_media_type, img_major_mime, img_minor_mime, img_description,
img_description_id, img_user, img_user_text, img_timestamp, img_sha1
FROM /*_*/image;
DROP TABLE /*_*/image;
ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image;
CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor,img_timestamp);
CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
COMMIT;

View file

@ -1,47 +0,0 @@
--
-- patch-image-img_description_id.sql
--
-- T188132. Add `img_description_id` to the `image` table.
BEGIN;
DROP TABLE IF EXISTS /*_*/image_tmp;
CREATE TABLE /*_*/image_tmp (
img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
img_size int unsigned NOT NULL default 0,
img_width int NOT NULL default 0,
img_height int NOT NULL default 0,
img_metadata mediumblob NOT NULL,
img_bits int NOT NULL default 0,
img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
img_minor_mime varbinary(100) NOT NULL default "unknown",
img_description varbinary(767) NOT NULL default '',
img_description_id bigint unsigned NOT NULL DEFAULT 0,
img_user int unsigned NOT NULL default 0,
img_user_text varchar(255) binary NOT NULL default '',
img_timestamp varbinary(14) NOT NULL default '',
img_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/image_tmp (
img_name, img_size, img_width, img_height, img_metadata, img_bits,
img_media_type, img_major_mime, img_minor_mime, img_description, img_user,
img_user_text, img_timestamp, img_sha1)
SELECT
img_name, img_size, img_width, img_height, img_metadata, img_bits,
img_media_type, img_major_mime, img_minor_mime, img_description, img_user,
img_user_text, img_timestamp, img_sha1
FROM /*_*/image;
DROP TABLE /*_*/image;
ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image;
CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
COMMIT;

View file

@ -1,48 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS ipblocks_tmp;
CREATE TABLE /*_*/ipblocks_tmp (
ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
ipb_address tinyblob NOT NULL,
ipb_user int unsigned NOT NULL default 0,
ipb_by int unsigned NOT NULL default 0,
ipb_by_text varchar(255) binary NOT NULL default '',
ipb_by_actor bigint unsigned NOT NULL DEFAULT 0,
ipb_reason varbinary(767) NOT NULL default '',
ipb_reason_id bigint unsigned NOT NULL DEFAULT 0,
ipb_timestamp binary(14) NOT NULL default '',
ipb_auto bool NOT NULL default 0,
ipb_anon_only bool NOT NULL default 0,
ipb_create_account bool NOT NULL default 1,
ipb_enable_autoblock bool NOT NULL default '1',
ipb_expiry varbinary(14) NOT NULL default '',
ipb_range_start tinyblob NOT NULL,
ipb_range_end tinyblob NOT NULL,
ipb_deleted bool NOT NULL default 0,
ipb_block_email bool NOT NULL default 0,
ipb_allow_usertalk bool NOT NULL default 0,
ipb_parent_block_id int default NULL
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/ipblocks_tmp (
ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason,
ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account,
ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end,
ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id)
SELECT
ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason,
ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account,
ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end,
ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id
FROM /*_*/ipblocks;
DROP TABLE /*_*/ipblocks;
ALTER TABLE /*_*/ipblocks_tmp RENAME TO /*_*/ipblocks;
CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
COMMIT;

View file

@ -1,45 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS /*_*/logging_tmp;
CREATE TABLE /*_*/logging_tmp (
log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
log_type varbinary(32) NOT NULL default '',
log_action varbinary(32) NOT NULL default '',
log_timestamp binary(14) NOT NULL default '19700101000000',
log_user int unsigned NOT NULL default 0,
log_user_text varchar(255) binary NOT NULL default '',
log_actor bigint unsigned NOT NULL DEFAULT 0,
log_namespace int NOT NULL default 0,
log_title varchar(255) binary NOT NULL default '',
log_page int unsigned NULL,
log_comment varbinary(767) NOT NULL default '',
log_comment_id bigint unsigned NOT NULL DEFAULT 0,
log_params blob NOT NULL,
log_deleted tinyint unsigned NOT NULL default 0
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/logging_tmp (
log_id, log_type, log_action, log_timestamp, log_user, log_user_text,
log_namespace, log_title, log_page, log_comment, log_comment_id,
log_params, log_deleted)
SELECT
log_id, log_type, log_action, log_timestamp, log_user, log_user_text,
log_namespace, log_title, log_page, log_comment, log_comment_id,
log_params, log_deleted
FROM /*_*/logging;
DROP TABLE /*_*/logging;
ALTER TABLE /*_*/logging_tmp RENAME TO /*_*/logging;
CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp);
CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp);
CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
CREATE INDEX /*i*/log_type_action ON /*_*/logging (log_type, log_action, log_timestamp);
CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp);
CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp);
COMMIT;

View file

@ -1,43 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS /*_*/oldimage_tmp;
CREATE TABLE /*_*/oldimage_tmp (
oi_name varchar(255) binary NOT NULL default '',
oi_archive_name varchar(255) binary NOT NULL default '',
oi_size int unsigned NOT NULL default 0,
oi_width int NOT NULL default 0,
oi_height int NOT NULL default 0,
oi_bits int NOT NULL default 0,
oi_description varbinary(767) NOT NULL default '',
oi_description_id bigint unsigned NOT NULL DEFAULT 0,
oi_user int unsigned NOT NULL default 0,
oi_user_text varchar(255) binary NOT NULL DEFAULT '',
oi_actor bigint unsigned NOT NULL DEFAULT 0,
oi_timestamp binary(14) NOT NULL default '',
oi_metadata mediumblob NOT NULL,
oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
oi_minor_mime varbinary(100) NOT NULL default "unknown",
oi_deleted tinyint unsigned NOT NULL default 0,
oi_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/oldimage_tmp (
oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits,
oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata,
oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1)
SELECT
oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits,
oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata,
oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1
FROM /*_*/oldimage;
DROP TABLE /*_*/oldimage;
ALTER TABLE /*_*/oldimage_tmp RENAME TO /*_*/oldimage;
CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp);
COMMIT;

View file

@ -1,10 +0,0 @@
--
-- patch-recentchanges-nttindex.sql
--
-- Per task T57377
--
-- Improve performance API queries to ask for a certain pages
--
DROP INDEX IF EXISTS /*i*/rc_namespace_title;
CREATE INDEX IF NOT EXISTS /*i*/rc_namespace_title_timestamp ON /*_*/recentchanges (rc_namespace, rc_title, rc_timestamp);

View file

@ -1,60 +0,0 @@
BEGIN;
DROP TABLE IF EXISTS /*_*/recentchanges_tmp;
CREATE TABLE /*_*/recentchanges_tmp (
rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
rc_timestamp varbinary(14) NOT NULL default '',
rc_user int unsigned NOT NULL default 0,
rc_user_text varchar(255) binary NOT NULL DEFAULT '',
rc_actor bigint unsigned NOT NULL DEFAULT 0,
rc_namespace int NOT NULL default 0,
rc_title varchar(255) binary NOT NULL default '',
rc_comment varbinary(767) NOT NULL default '',
rc_comment_id bigint unsigned NOT NULL DEFAULT 0,
rc_minor tinyint unsigned NOT NULL default 0,
rc_bot tinyint unsigned NOT NULL default 0,
rc_new tinyint unsigned NOT NULL default 0,
rc_cur_id int unsigned NOT NULL default 0,
rc_this_oldid int unsigned NOT NULL default 0,
rc_last_oldid int unsigned NOT NULL default 0,
rc_type tinyint unsigned NOT NULL default 0,
rc_source varchar(16) binary not null default '',
rc_patrolled tinyint unsigned NOT NULL default 0,
rc_ip varbinary(40) NOT NULL default '',
rc_old_len int,
rc_new_len int,
rc_deleted tinyint unsigned NOT NULL default 0,
rc_logid int unsigned NOT NULL default 0,
rc_log_type varbinary(255) NULL default NULL,
rc_log_action varbinary(255) NULL default NULL,
rc_params blob NULL
) /*$wgDBTableOptions*/;
INSERT OR IGNORE INTO /*_*/recentchanges_tmp (
rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title,
rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id,
rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip,
rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action,
rc_params)
SELECT
rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title,
rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id,
rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip,
rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action,
rc_params
FROM /*_*/recentchanges;
DROP TABLE /*_*/recentchanges;
ALTER TABLE /*_*/recentchanges_tmp RENAME TO /*_*/recentchanges;
CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor);
CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);
CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
COMMIT;

View file

@ -1,35 +0,0 @@
DROP TABLE IF EXISTS /*_*/site_stats_tmp;
-- Create the temporary table. The following part
-- is copied & pasted from the changed tables.sql
-- file besides having an other table name.
CREATE TABLE /*_*/site_stats_tmp (
ss_row_id int unsigned NOT NULL PRIMARY KEY,
ss_total_edits bigint unsigned default NULL,
ss_good_articles bigint unsigned default NULL,
ss_total_pages bigint unsigned default NULL,
ss_users bigint unsigned default NULL,
ss_active_users bigint unsigned default NULL,
ss_images bigint unsigned default NULL
) /*$wgDBTableOptions*/;
-- Move the data from the old to the new table
INSERT OR IGNORE INTO /*_*/site_stats_tmp (
ss_row_id,
ss_total_edits,
ss_good_articles,
ss_total_pages,
ss_active_users,
ss_images
) SELECT
ss_row_id,
ss_total_edits,
ss_good_articles,
ss_total_pages,
ss_active_users,
ss_images
FROM /*_*/site_stats;
DROP TABLE /*_*/site_stats;
ALTER TABLE /*_*/site_stats_tmp RENAME TO /*_*/site_stats;

View file

@ -1,34 +0,0 @@
--
-- Replace slot_inherited with slot_origin.
--
-- NOTE: There is no release that has slot_inherited. This is only needed to transition between
-- snapshot versions of 1.30.
--
-- NOTE: No code that writes to the slots table was merge yet, the table is assumed to be empty.
--
BEGIN TRANSACTION;
DROP TABLE /*_*/slots;
CREATE TABLE /*_*/slots (
-- reference to rev_id
slot_revision_id bigint unsigned NOT NULL,
-- reference to role_id
slot_role_id smallint unsigned NOT NULL,
-- reference to content_id
slot_content_id bigint unsigned NOT NULL,
-- The revision ID of the revision that originated the slot's content.
-- To find revisions that changed slots, look for slot_origin = slot_revision_id.
slot_origin bigint unsigned NOT NULL,
PRIMARY KEY ( slot_revision_id, slot_role_id )
) /*$wgDBTableOptions*/;
-- Index for finding revisions that modified a specific slot
CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);
COMMIT TRANSACTION;

View file

@ -189,11 +189,11 @@ class UpdateMediaWiki extends Maintenance {
$updater = DatabaseUpdater::newForDB( $db, $shared, $this ); $updater = DatabaseUpdater::newForDB( $db, $shared, $this );
// Avoid upgrading from versions older than 1.31 // Avoid upgrading from versions older than 1.32
// Using an implicit marker (slots table didn't exist until 1.31) // Using an implicit marker (change_tag_def table didn't exist until 1.32)
// TODO: Use an explicit marker // TODO: Use an explicit marker
// See T259771 // See T259771
if ( !$updater->tableExists( 'slots' ) ) { if ( !$updater->tableExists( 'change_tag_def' ) ) {
$this->fatalError( $this->fatalError(
"Can not upgrade from versions older than 1.31, please upgrade to that version or later first." "Can not upgrade from versions older than 1.31, please upgrade to that version or later first."
); );