# SHOW INDEX should work for 3.x and up:
# http://dev.mysql.com/doc/mysql/en/SHOW_INDEX.html
$table = $this->tableName( $table );
+ $index = $this->indexName( $index );
$sql = 'SHOW INDEX FROM '.$table;
$res = $this->query( $sql, $fname );
if ( !$res ) {
return implode(' ',array($straightJoins,$otherJoins) );
}
+ /**
+ * Get the name of an index in a given table
+ */
+ function indexName( $index ) {
+ // Backwards-compatibility hack
+ if ( $index == 'ar_usertext_timestamp' ) {
+ return 'usertext_timestamp';
+ } else {
+ return $index;
+ }
+ }
+
/**
* Wrapper for addslashes()
* @param $s String: to be slashed.
* PostgreSQL doesn't have them and returns ""
*/
function useIndexClause( $index ) {
- return "FORCE INDEX ($index)";
+ return "FORCE INDEX (" . $this->indexName( $index ) . ")";
}
/**
}
// Table prefixes
- $ins = preg_replace_callback( '/\/\*(?:\$wgDBprefix|_)\*\/([a-zA-Z_0-9]*)/',
- array( &$this, 'tableNameCallback' ), $ins );
+ $ins = preg_replace_callback( '!/\*(?:\$wgDBprefix|_)\*/([a-zA-Z_0-9]*)!',
+ array( $this, 'tableNameCallback' ), $ins );
+
+ // Index names
+ $ins = preg_replace_callback( '!/\*i\*/([a-zA-Z_0-9]*)!',
+ array( $this, 'indexNameCallback' ), $ins );
return $ins;
}
return $this->tableName( $matches[1] );
}
+ /**
+ * Index name callback
+ */
+ protected function indexNameCallback( $matches ) {
+ return $this->indexName( $matches[1] );
+ }
+
/*
* Build a concatenation list to feed into a SQL query
*/
return NULL;
}
while ( $row = $this->fetchObject( $res ) ) {
- if ( $row->indexname == $index ) {
+ if ( $row->indexname == $this->indexName( $index ) ) {
return $row;
}
}
function indexUnique ($table, $index, $fname = 'Database::indexUnique' ) {
$sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'".
- " AND indexdef LIKE 'CREATE UNIQUE%({$index})'";
+ " AND indexdef LIKE 'CREATE UNIQUE%(" .
+ $this->strencode( $this->indexName( $index ) ) .
+ ")'";
$res = $this->query( $sql, $fname );
if ( !$res )
return NULL;
return $res;
}
- function freeResult(&$res) {
+ function freeResult($res) {
if ($res instanceof ResultWrapper) $res->result = NULL; else $res = NULL;
}
- function fetchObject(&$res) {
+ function fetchObject($res) {
if ($res instanceof ResultWrapper) $r =& $res->result; else $r =& $res;
$cur = current($r);
if (is_array($cur)) {
return false;
}
- function fetchRow(&$res) {
+ function fetchRow($res) {
if ($res instanceof ResultWrapper) $r =& $res->result; else $r =& $res;
$cur = current($r);
if (is_array($cur)) {
/**
* The PDO::Statement class implements the array interface so count() will work
*/
- function numRows(&$res) {
+ function numRows($res) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
return count($r);
}
- function numFields(&$res) {
+ function numFields($res) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
return is_array($r) ? count($r[0]) : 0;
}
- function fieldName(&$res,$n) {
+ function fieldName($res,$n) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
if (is_array($r)) {
$keys = array_keys($r[0]);
return str_replace('`','',parent::tableName($name));
}
+ /**
+ * Index names have DB scope
+ */
+ function indexName( $index ) {
+ return $index;
+ }
+
/**
* This must be called after nextSequenceVal
*/
return $this->mConn->lastInsertId();
}
- function dataSeek(&$res,$row) {
+ function dataSeek($res,$row) {
if ($res instanceof ResultWrapper) $r =& $res->result; else $r =& $res;
reset($r);
if ($row > 0) for ($i = 0; $i < $row; $i++) next($r);
* - if errors are explicitly ignored, returns NULL on failure
*/
function indexInfo($table, $index, $fname = 'Database::indexExists') {
- $sql = 'PRAGMA index_info(' . $this->addQuotes( $index ) . ')';
+ $sql = 'PRAGMA index_info(' . $this->addQuotes( $this->indexName( $index ) ) . ')';
$res = $this->query( $sql, $fname );
if ( !$res ) {
return null;
$row = $this->selectRow( 'sqlite_master', '*',
array(
'type' => 'index',
- 'name' => $index,
+ 'name' => $this->indexName( $index ),
), $fname );
if ( !$row || !isset( $row->sql ) ) {
return null;
/**
* Query whether a given column exists in the mediawiki schema
*/
- function fieldExists($table, $field) {
+ function fieldExists($table, $field, $fname = '') {
$info = $this->fieldInfo( $table, $field );
return (bool)$info;
}
return false;
}
- function begin() {
+ function begin( $fname = '' ) {
if ($this->mTrxLevel == 1) $this->commit();
$this->mConn->beginTransaction();
$this->mTrxLevel = 1;
}
- function commit() {
+ function commit( $fname = '' ) {
if ($this->mTrxLevel == 0) return;
$this->mConn->commit();
$this->mTrxLevel = 0;
}
- function rollback() {
+ function rollback( $fname = '' ) {
if ($this->mTrxLevel == 0) return;
$this->mConn->rollBack();
$this->mTrxLevel = 0;
user_registration binary(14),
user_editcount int
);
-CREATE UNIQUE INDEX user_name ON /*_*/user_tmp (user_name);
-CREATE INDEX user_email_token ON /*_*/user_tmp (user_email_token);
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user_tmp (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user_tmp (user_email_token);
CREATE TABLE /*_*/user_groups_tmp (
ug_group varbinary(16) NOT NULL default ''
);
-CREATE UNIQUE INDEX ug_user_group ON /*_*/user_groups_tmp (ug_user,ug_group);
-CREATE INDEX ug_group ON /*_*/user_groups_tmp (ug_group);
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups_tmp (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups_tmp (ug_group);
CREATE TABLE /*_*/page_tmp (
page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
page_len int unsigned NOT NULL
);
-CREATE UNIQUE INDEX name_title ON /*_*/page_tmp (page_namespace,page_title);
-CREATE INDEX page_random ON /*_*/page_tmp (page_random);
-CREATE INDEX page_len ON /*_*/page_tmp (page_len);
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page_tmp (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page_tmp (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page_tmp (page_len);
CREATE TABLE /*_*/revision_tmp (
rev_len int unsigned,
rev_parent_id int unsigned default NULL
);
-CREATE UNIQUE INDEX rev_page_id ON /*_*/revision_tmp (rev_page, rev_id);
-CREATE INDEX rev_timestamp ON /*_*/revision_tmp (rev_timestamp);
-CREATE INDEX page_timestamp ON /*_*/revision_tmp (rev_page,rev_timestamp);
-CREATE INDEX user_timestamp ON /*_*/revision_tmp (rev_user,rev_timestamp);
-CREATE INDEX usertext_timestamp ON /*_*/revision_tmp (rev_user_text,rev_timestamp);
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision_tmp (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision_tmp (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision_tmp (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision_tmp (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision_tmp (rev_user_text,rev_timestamp);
CREATE TABLE /*_*/pagelinks_tmp (
pl_from int unsigned NOT NULL default 0,
pl_title varchar(255) binary NOT NULL default ''
);
-CREATE UNIQUE INDEX pl_from ON /*_*/pagelinks_tmp (pl_from,pl_namespace,pl_title);
-CREATE INDEX pl_namespace_title ON /*_*/pagelinks_tmp (pl_namespace,pl_title,pl_from);
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks_tmp (pl_from,pl_namespace,pl_title);
+CREATE INDEX /*i*/pl_namespace_title ON /*_*/pagelinks_tmp (pl_namespace,pl_title,pl_from);
CREATE TABLE /*_*/templatelinks_tmp (
tl_title varchar(255) binary NOT NULL default ''
);
-CREATE UNIQUE INDEX tl_from ON /*_*/templatelinks_tmp (tl_from,tl_namespace,tl_title);
-CREATE INDEX tl_namespace_title ON /*_*/templatelinks_tmp (tl_namespace,tl_title,tl_from);
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks_tmp (tl_from,tl_namespace,tl_title);
+CREATE INDEX /*i*/tl_namespace_title ON /*_*/templatelinks_tmp (tl_namespace,tl_title,tl_from);
CREATE TABLE /*_*/imagelinks_tmp (
il_from int unsigned NOT NULL default 0,
il_to varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX il_from ON /*_*/imagelinks_tmp (il_from,il_to);
-CREATE INDEX il_to ON /*_*/imagelinks_tmp (il_to,il_from);
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks_tmp (il_from,il_to);
+CREATE INDEX /*i*/il_to ON /*_*/imagelinks_tmp (il_to,il_from);
CREATE TABLE /*_*/categorylinks_tmp (
cl_sortkey varchar(70) binary NOT NULL default '',
cl_timestamp timestamp NOT NULL
);
-CREATE UNIQUE INDEX cl_from ON /*_*/categorylinks_tmp (cl_from,cl_to);
-CREATE INDEX cl_sortkey ON /*_*/categorylinks_tmp (cl_to,cl_sortkey,cl_from);
-CREATE INDEX cl_timestamp ON /*_*/categorylinks_tmp (cl_to,cl_timestamp);
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks_tmp (cl_from,cl_to);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks_tmp (cl_to,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks_tmp (cl_to,cl_timestamp);
CREATE TABLE /*_*/category_tmp (
cat_files int signed NOT NULL default 0,
cat_hidden tinyint unsigned NOT NULL default 0
);
-CREATE UNIQUE INDEX cat_title ON /*_*/category_tmp (cat_title);
-CREATE INDEX cat_pages ON /*_*/category_tmp (cat_pages);
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category_tmp (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category_tmp (cat_pages);
CREATE TABLE /*_*/langlinks_tmp (
ll_from int unsigned NOT NULL default 0,
ll_title varchar(255) binary NOT NULL default ''
);
-CREATE UNIQUE INDEX ll_from ON /*_*/langlinks_tmp (ll_from, ll_lang);
-CREATE INDEX ll_lang_title ON /*_*/langlinks_tmp (ll_lang, ll_title);
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks_tmp (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang_title ON /*_*/langlinks_tmp (ll_lang, ll_title);
CREATE TABLE /*_*/site_stats_tmp (
ss_admins int default '-1',
ss_images int default 0
);
-CREATE UNIQUE INDEX ss_row_id ON /*_*/site_stats_tmp (ss_row_id);
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats_tmp (ss_row_id);
CREATE TABLE /*_*/ipblocks_tmp (
ipb_block_email bool NOT NULL default 0,
ipb_allow_usertalk bool NOT NULL default 0
);
-CREATE UNIQUE INDEX ipb_address ON /*_*/ipblocks_tmp (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
-CREATE INDEX ipb_user ON /*_*/ipblocks_tmp (ipb_user);
-CREATE INDEX ipb_range ON /*_*/ipblocks_tmp (ipb_range_start(8), ipb_range_end(8));
-CREATE INDEX ipb_timestamp ON /*_*/ipblocks_tmp (ipb_timestamp);
-CREATE INDEX ipb_expiry ON /*_*/ipblocks_tmp (ipb_expiry);
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks_tmp (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks_tmp (ipb_user);
+CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks_tmp (ipb_range_start(8), ipb_range_end(8));
+CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks_tmp (ipb_timestamp);
+CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks_tmp (ipb_expiry);
CREATE TABLE /*_*/watchlist_tmp (
wl_notificationtimestamp varbinary(14)
);
-CREATE UNIQUE INDEX wl_user_namespace_title ON /*_*/watchlist_tmp (wl_user, wl_namespace, wl_title);
-CREATE INDEX namespace_title ON /*_*/watchlist_tmp (wl_namespace, wl_title);
+CREATE UNIQUE INDEX /*i*/wl_user_namespace_title ON /*_*/watchlist_tmp (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist_tmp (wl_namespace, wl_title);
CREATE TABLE /*_*/math_tmp (
math_mathml text
);
-CREATE UNIQUE INDEX math_inputhash ON /*_*/math_tmp (math_inputhash);
+CREATE UNIQUE INDEX /*i*/math_inputhash ON /*_*/math_tmp (math_inputhash);
CREATE TABLE /*_*/interwiki_tmp (
iw_trans tinyint NOT NULL default 0
);
-CREATE UNIQUE INDEX iw_prefix ON /*_*/interwiki_tmp (iw_prefix);
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki_tmp (iw_prefix);
CREATE TABLE /*_*/page_restrictions_tmp (
pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
);
-CREATE UNIQUE INDEX pr_pagetype ON /*_*/page_restrictions_tmp (pr_page,pr_type);
-CREATE UNIQUE INDEX pr_typelevel ON /*_*/page_restrictions_tmp (pr_type,pr_level);
-CREATE UNIQUE INDEX pr_level ON /*_*/page_restrictions_tmp (pr_level);
-CREATE UNIQUE INDEX pr_cascade ON /*_*/page_restrictions_tmp (pr_cascade);
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions_tmp (pr_page,pr_type);
+CREATE UNIQUE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions_tmp (pr_type,pr_level);
+CREATE UNIQUE INDEX /*i*/pr_level ON /*_*/page_restrictions_tmp (pr_level);
+CREATE UNIQUE INDEX /*i*/pr_cascade ON /*_*/page_restrictions_tmp (pr_cascade);
CREATE TABLE /*_*/protected_titles_tmp (
pt_namespace int NOT NULL,
pt_expiry varbinary(14) NOT NULL default '',
pt_create_perm varbinary(60) NOT NULL
);
-CREATE UNIQUE INDEX pt_namespace_title ON /*_*/protected_titles_tmp (pt_namespace,pt_title);
-CREATE INDEX pt_timestamp ON /*_*/protected_titles_tmp (pt_timestamp);
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles_tmp (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles_tmp (pt_timestamp);
CREATE TABLE /*_*/page_props_tmp (
pp_page int NOT NULL,
pp_propname varbinary(60) NOT NULL,
pp_value blob NOT NULL
);
-CREATE UNIQUE INDEX pp_page_propname ON /*_*/page_props_tmp (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props_tmp (pp_page,pp_propname);
--------------------------------------------------------------------------------
-- Populate the new tables using INSERT SELECT
si_title varchar(255) NOT NULL default '',
si_text mediumtext NOT NULL
);
-CREATE UNIQUE INDEX si_page ON /*_*/searchindex (si_page);
-CREATE INDEX si_title ON /*_*/searchindex (si_title);
-CREATE INDEX si_text ON /*_*/searchindex (si_text);
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE INDEX /*i*/si_text ON /*_*/searchindex (si_text);
DROP TABLE IF EXISTS /*_*/transcache;
CREATE TABLE /*_*/transcache (
tc_contents text,
tc_time int NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX tc_url_idx ON /*_*/transcache (tc_url);
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
DROP TABLE IF EXISTS /*_*/querycache_info;
CREATE TABLE /*_*/querycache_info (
qci_type varbinary(32) NOT NULL default '',
qci_timestamp binary(14) NOT NULL default '19700101000000'
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX qci_type ON /*_*/querycache_info (qci_type);
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
--------------------------------------------------------------------------------
-- Empty some cache tables to make the update faster
-- Add indexes to tables with no unique indexes
--------------------------------------------------------------------------------
-CREATE INDEX un_user_id ON /*_*/user_newtalk (user_id);
-CREATE INDEX un_user_ip ON /*_*/user_newtalk (user_ip);
-CREATE INDEX name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
-CREATE INDEX ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
-CREATE INDEX el_from ON /*_*/externallinks (el_from, el_to(40));
-CREATE INDEX el_to ON /*_*/externallinks (el_to(60), el_from);
-CREATE INDEX el_index ON /*_*/externallinks (el_index(60));
-CREATE INDEX img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
-CREATE INDEX img_size ON /*_*/image (img_size);
-CREATE INDEX img_timestamp ON /*_*/image (img_timestamp);
-CREATE INDEX img_sha1 ON /*_*/image (img_sha1);
-CREATE INDEX oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
-CREATE INDEX oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
-CREATE INDEX oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
-CREATE INDEX oi_sha1 ON /*_*/oldimage (oi_sha1);
-CREATE INDEX fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
-CREATE INDEX fa_group_key ON /*_*/filearchive (fa_storage_group, fa_storage_key);
-CREATE INDEX fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
-CREATE INDEX fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
-CREATE INDEX rc_timestamp ON /*_*/recentchanges (rc_timestamp);
-CREATE INDEX rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
-CREATE INDEX rc_cur_id ON /*_*/recentchanges (rc_cur_id);
-CREATE INDEX new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
-CREATE INDEX rc_ip ON /*_*/recentchanges (rc_ip);
-CREATE INDEX rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
-CREATE INDEX rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
-CREATE INDEX qc_type_value ON /*_*/querycache (qc_type,qc_value);
-CREATE INDEX oc_exptime ON /*_*/objectcache (exptime);
-CREATE INDEX type_time ON /*_*/logging (log_type, log_timestamp);
-CREATE INDEX user_time ON /*_*/logging (log_user, log_timestamp);
-CREATE INDEX page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX times ON /*_*/logging (log_timestamp);
-CREATE INDEX tb_page ON /*_*/trackbacks (tb_page);
-CREATE INDEX job_cmd_namespace_title ON /*_*/job (job_cmd, job_namespace, job_title);
-CREATE INDEX rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
-CREATE INDEX qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
-CREATE INDEX qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
-CREATE INDEX qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
+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*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
+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);
+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);
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_group_key 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*/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_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+CREATE INDEX /*i*/qc_type_value ON /*_*/querycache (qc_type,qc_value);
+CREATE INDEX /*i*/oc_exptime ON /*_*/objectcache (exptime);
+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*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
+CREATE INDEX /*i*/tb_page ON /*_*/trackbacks (tb_page);
+CREATE INDEX /*i*/job_cmd_namespace_title ON /*_*/job (job_cmd, job_namespace, job_title);
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
INSERT INTO /*_*/updatelog VALUES ('initial_indexes');
user_editcount int
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX user_name ON /*_*/user (user_name);
-CREATE INDEX user_email_token ON /*_*/user (user_email_token);
+CREATE UNIQUE INDEX /*i*/user_name ON /*_*/user (user_name);
+CREATE INDEX /*i*/user_email_token ON /*_*/user (user_email_token);
--
ug_group varbinary(16) NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX ug_user_group ON /*_*/user_groups (ug_user,ug_group);
-CREATE INDEX ug_group ON /*_*/user_groups (ug_group);
+CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group);
+CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group);
-- Stores notifications of user talk page changes, for the display
) /*$wgDBTableOptions*/;
-- Indexes renamed for SQLite in 1.14
-CREATE INDEX un_user_id ON /*_*/user_newtalk (user_id);
-CREATE INDEX un_user_ip ON /*_*/user_newtalk (user_ip);
+CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
+CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
--
page_len int unsigned NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX name_title ON /*_*/page (page_namespace,page_title);
-CREATE INDEX page_random ON /*_*/page (page_random);
-CREATE INDEX page_len ON /*_*/page (page_len);
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
--
) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
-- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit
-CREATE UNIQUE INDEX rev_page_id ON /*_*/revision (rev_page, rev_id);
-CREATE INDEX rev_timestamp ON /*_*/revision (rev_timestamp);
-CREATE INDEX page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
-CREATE INDEX user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
-CREATE INDEX usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
+CREATE UNIQUE INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
+CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
+CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
+CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
+CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
--
-- Holds text of individual page revisions.
ar_parent_id int unsigned default NULL
) /*$wgDBTableOptions*/;
-CREATE INDEX name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
-CREATE INDEX ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
+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);
--
pl_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
-CREATE INDEX pl_namespace_title ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
+CREATE INDEX /*i*/pl_namespace_title ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
--
tl_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
-CREATE INDEX tl_namespace_title ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
+CREATE INDEX /*i*/tl_namespace_title ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
--
il_to varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX il_from ON /*_*/imagelinks (il_from,il_to);
-CREATE INDEX il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
+CREATE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
--
cl_timestamp timestamp NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX cl_from ON /*_*/categorylinks (cl_from,cl_to);
+CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
-- We always sort within a given category...
-CREATE INDEX cl_sortkey ON /*_*/categorylinks (cl_to,cl_sortkey,cl_from);
+CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_sortkey,cl_from);
-- Not really used?
-CREATE INDEX cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
+CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
--
cat_hidden tinyint unsigned NOT NULL default 0
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX cat_title ON /*_*/category (cat_title);
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
-- For Special:Mostlinkedcategories
-CREATE INDEX cat_pages ON /*_*/category (cat_pages);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
--
el_index blob NOT NULL
) /*$wgDBTableOptions*/;
-CREATE INDEX el_from ON /*_*/externallinks (el_from, el_to(40));
-CREATE INDEX el_to ON /*_*/externallinks (el_to(60), el_from);
-CREATE INDEX el_index ON /*_*/externallinks (el_index(60));
+CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
+CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
+CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
--
ll_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX ll_from ON /*_*/langlinks (ll_from, ll_lang);
-CREATE INDEX ll_lang_title ON /*_*/langlinks (ll_lang, ll_title);
+CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
+CREATE INDEX /*i*/ll_lang_title ON /*_*/langlinks (ll_lang, ll_title);
--
) /*$wgDBTableOptions*/;
-- Pointless index to assuage developer superstitions
-CREATE UNIQUE INDEX ss_row_id ON /*_*/site_stats (ss_row_id);
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
--
-- Unique index to support "user already blocked" messages
-- Any new options which prevent collisions should be included
-CREATE UNIQUE INDEX ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
+CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only);
-CREATE INDEX ipb_user ON /*_*/ipblocks (ipb_user);
-CREATE INDEX ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
-CREATE INDEX ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
-CREATE INDEX ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+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);
--
img_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE INDEX img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
-- Used by Special:Imagelist for sort-by-size
-CREATE INDEX img_size ON /*_*/image (img_size);
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
-- Used by Special:Newimages and Special:Imagelist
-CREATE INDEX img_timestamp ON /*_*/image (img_timestamp);
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
-- Used in API and duplicate search
-CREATE INDEX img_sha1 ON /*_*/image (img_sha1);
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
--
oi_sha1 varbinary(32) NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE INDEX oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
-CREATE INDEX oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+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);
-- oi_archive_name truncated to 14 to avoid key length overflow
-CREATE INDEX oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
-CREATE INDEX oi_sha1 ON /*_*/oldimage (oi_sha1);
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
--
) /*$wgDBTableOptions*/;
-- pick out by image name
-CREATE INDEX fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
-- pick out dupe files
-CREATE INDEX fa_group_key ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_group_key ON /*_*/filearchive (fa_storage_group, fa_storage_key);
-- sort by deletion time
-CREATE INDEX fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
-- sort by uploader
-CREATE INDEX fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
--
rc_params blob NULL
) /*$wgDBTableOptions*/;
-CREATE INDEX rc_timestamp ON /*_*/recentchanges (rc_timestamp);
-CREATE INDEX rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title);
-CREATE INDEX rc_cur_id ON /*_*/recentchanges (rc_cur_id);
-CREATE INDEX new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
-CREATE INDEX rc_ip ON /*_*/recentchanges (rc_ip);
-CREATE INDEX rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
-CREATE INDEX rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
+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_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
CREATE TABLE /*_*/watchlist (
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX wl_user_namespace_title ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
-CREATE INDEX namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
+CREATE UNIQUE INDEX /*i*/wl_user_namespace_title ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
+CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
--
math_mathml text
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX math_inputhash ON /*_*/math (math_inputhash);
+CREATE UNIQUE INDEX /*i*/math_inputhash ON /*_*/math (math_inputhash);
--
si_text mediumtext NOT NULL
) ENGINE=MyISAM;
-CREATE UNIQUE INDEX si_page ON /*_*/searchindex (si_page);
-CREATE FULLTEXT INDEX si_title ON /*_*/searchindex (si_title);
-CREATE FULLTEXT INDEX si_text ON /*_*/searchindex (si_text);
+CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
+CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
+CREATE FULLTEXT INDEX /*i*/si_text ON /*_*/searchindex (si_text);
--
iw_trans tinyint NOT NULL default 0
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX iw_prefix ON /*_*/interwiki (iw_prefix);
+CREATE UNIQUE INDEX /*i*/iw_prefix ON /*_*/interwiki (iw_prefix);
--
qc_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE INDEX qc_type_value ON /*_*/querycache (qc_type,qc_value);
+CREATE INDEX /*i*/qc_type_value ON /*_*/querycache (qc_type,qc_value);
--
value mediumblob,
exptime datetime
) /*$wgDBTableOptions*/;
-CREATE INDEX oc_exptime ON /*_*/objectcache (exptime);
+CREATE INDEX /*i*/oc_exptime ON /*_*/objectcache (exptime);
--
tc_time int NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX tc_url_idx ON /*_*/transcache (tc_url);
+CREATE UNIQUE INDEX /*i*/tc_url_idx ON /*_*/transcache (tc_url);
CREATE TABLE /*_*/logging (
log_deleted tinyint unsigned NOT NULL default 0
) /*$wgDBTableOptions*/;
-CREATE INDEX type_time ON /*_*/logging (log_type, log_timestamp);
-CREATE INDEX user_time ON /*_*/logging (log_user, log_timestamp);
-CREATE INDEX page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX times ON /*_*/logging (log_timestamp);
+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*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
+CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
CREATE TABLE /*_*/trackbacks (
tb_ex text,
tb_name varchar(255)
) /*$wgDBTableOptions*/;
-CREATE INDEX tb_page ON /*_*/trackbacks (tb_page);
+CREATE INDEX /*i*/tb_page ON /*_*/trackbacks (tb_page);
-- Jobs performed by parallel apache threads or a command-line daemon
job_params blob NOT NULL
) /*$wgDBTableOptions*/;
-CREATE INDEX job_cmd_namespace_title ON /*_*/job (job_cmd, job_namespace, job_title);
+CREATE INDEX /*i*/job_cmd_namespace_title ON /*_*/job (job_cmd, job_namespace, job_title);
-- Details of updates to cached special pages
qci_timestamp binary(14) NOT NULL default '19700101000000'
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX qci_type ON /*_*/querycache_info (qci_type);
+CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
-- For each redirect, this table contains exactly one row defining its target
rd_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE INDEX rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
+CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
-- Used for caching expensive grouped queries that need two links (for example double-redirects)
qcc_titletwo varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;
-CREATE INDEX qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
-CREATE INDEX qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
-CREATE INDEX qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
+CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
-- Used for storing page restrictions (i.e. protection levels)
pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
-CREATE UNIQUE INDEX pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
-CREATE UNIQUE INDEX pr_level ON /*_*/page_restrictions (pr_level);
-CREATE UNIQUE INDEX pr_cascade ON /*_*/page_restrictions (pr_cascade);
+CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
+CREATE UNIQUE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
+CREATE UNIQUE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
+CREATE UNIQUE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
-- Protected titles - nonexistent pages that have been protected
pt_create_perm varbinary(60) NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
-CREATE INDEX pt_timestamp ON /*_*/protected_titles (pt_timestamp);
+CREATE UNIQUE INDEX /*i*/pt_namespace_title ON /*_*/protected_titles (pt_namespace,pt_title);
+CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
-- Name/value pairs indexed by page_id
pp_value blob NOT NULL
) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
+CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
-- A table to log updates, one text key row per update.