maintenance/abstractSchemaChanges/patch-page-rename-name_title-index.json
{
"comment": "Rename 'name_title' to have the page_ prefix (T270033)",
"before": {
"name": "page",
"comment": "Core of the wiki: each page has an entry here which identifies it by title and contains some essential metadata.",
"columns": [
{
"name": "page_id",
"comment": "Unique identifier number. The page_id will be preserved across edits and rename operations, but not deletions and recreations.",
"type": "integer",
"options": { "unsigned": true, "notnull": true, "autoincrement": true }
},
{
"name": "page_namespace",
"comment": "A page name is broken into a namespace and a title. The namespace keys are UI-language-independent constants, defined in includes/Defines.php",
"type": "integer",
"options": { "notnull": true }
},
{
"name": "page_title",
"comment": "The rest of the title, as text. Spaces are transformed into underscores in title storage.",
"type": "binary",
"options": { "notnull": true, "length": 255 }
},
{
"name": "page_restrictions",
"comment": "Comma-separated set of permission keys indicating who can move or edit the page.",
"type": "blob",
"options": { "notnull": false, "length": 255 }
},
{
"name": "page_is_redirect",
"comment": "1 indicates the article is a redirect.",
"type": "mwtinyint",
"options": { "notnull": true, "default": 0 }
},
{
"name": "page_is_new",
"comment": "1 indicates this is a new entry, with only one edit. Not all pages with one edit are new pages.",
"type": "mwtinyint",
"options": { "notnull": true, "default": 0 }
},
{
"name": "page_random",
"comment": "Random value between 0 and 1, used for Special:Randompage",
"type": "float",
"options": {
"notnull": true,
"unsigned": true,
"CustomSchemaOptions": {
"doublePrecision": true
}
}
},
{
"name": "page_touched",
"comment": "This timestamp is updated whenever the page changes in a way requiring it to be re-rendered, invalidating caches. Aside from editing this includes permission changes, creation or deletion of linked pages, and alteration of contained templates.",
"type": "mwtimestamp",
"options": { "notnull": true }
},
{
"name": "page_links_updated",
"comment": "This timestamp is updated whenever a page is re-parsed and it has all the link tracking tables updated for it. This is useful for de-duplicating expensive backlink update jobs.",
"type": "mwtimestamp",
"options": {
"notnull": false,
"default": null,
"CustomSchemaOptions": {
"allowInfinite": true
}
}
},
{
"name": "page_latest",
"comment": "Handy key to revision.rev_id of the current revision. This may be 0 during page creation, but that shouldn't happen outside of a transaction... hopefully.",
"type": "integer",
"options": { "unsigned": true, "notnull": true }
},
{
"name": "page_len",
"comment": "Uncompressed length in bytes of the page's current source text.",
"type": "integer",
"options": { "unsigned": true, "notnull": true }
},
{
"name": "page_content_model",
"comment": "content model, see CONTENT_MODEL_XXX constants",
"type": "binary",
"options": { "length": 32, "notnull": false }
},
{
"name": "page_lang",
"comment": "Page content language",
"type": "binary",
"options": { "length": 35, "notnull": false }
}
],
"indexes": [
{
"name": "name_title",
"columns": [ "page_namespace", "page_title" ],
"comment": "The title index. Care must be taken to always specify a namespace when by title, so that the index is used. Even listing all known namespaces with IN() is better than omitting page_namespace from the WHERE clause.",
"unique": true
},
{
"name": "page_random",
"columns": [ "page_random" ],
"comment": "Index for Special:Random",
"unique": false
},
{
"name": "page_len",
"columns": [ "page_len" ],
"comment": "Questionable utility, used by ProofreadPage, possibly DynamicPageList. ApiQueryAllPages unconditionally filters on namespace and so hopefully does not use it.",
"unique": false
},
{
"name": "page_redirect_namespace_len",
"columns": [ "page_is_redirect", "page_namespace", "page_len" ],
"comment": "The index for Special:Shortpages and Special:Longpages. Also SiteStats::articles() in 'comma' counting mode, MessageCache::loadFromDB().",
"unique": false
}
],
"pk": [ "page_id" ]
},
"after": {
"name": "page",
"comment": "Core of the wiki: each page has an entry here which identifies it by title and contains some essential metadata.",
"columns": [
{
"name": "page_id",
"comment": "Unique identifier number. The page_id will be preserved across edits and rename operations, but not deletions and recreations.",
"type": "integer",
"options": { "unsigned": true, "notnull": true, "autoincrement": true }
},
{
"name": "page_namespace",
"comment": "A page name is broken into a namespace and a title. The namespace keys are UI-language-independent constants, defined in includes/Defines.php",
"type": "integer",
"options": { "notnull": true }
},
{
"name": "page_title",
"comment": "The rest of the title, as text. Spaces are transformed into underscores in title storage.",
"type": "binary",
"options": { "notnull": true, "length": 255 }
},
{
"name": "page_restrictions",
"comment": "Comma-separated set of permission keys indicating who can move or edit the page.",
"type": "blob",
"options": { "notnull": false, "length": 255 }
},
{
"name": "page_is_redirect",
"comment": "1 indicates the article is a redirect.",
"type": "mwtinyint",
"options": { "notnull": true, "default": 0 }
},
{
"name": "page_is_new",
"comment": "1 indicates this is a new entry, with only one edit. Not all pages with one edit are new pages.",
"type": "mwtinyint",
"options": { "notnull": true, "default": 0 }
},
{
"name": "page_random",
"comment": "Random value between 0 and 1, used for Special:Randompage",
"type": "float",
"options": {
"notnull": true,
"unsigned": true,
"CustomSchemaOptions": {
"doublePrecision": true
}
}
},
{
"name": "page_touched",
"comment": "This timestamp is updated whenever the page changes in a way requiring it to be re-rendered, invalidating caches. Aside from editing this includes permission changes, creation or deletion of linked pages, and alteration of contained templates.",
"type": "mwtimestamp",
"options": { "notnull": true }
},
{
"name": "page_links_updated",
"comment": "This timestamp is updated whenever a page is re-parsed and it has all the link tracking tables updated for it. This is useful for de-duplicating expensive backlink update jobs.",
"type": "mwtimestamp",
"options": {
"notnull": false,
"default": null,
"CustomSchemaOptions": {
"allowInfinite": true
}
}
},
{
"name": "page_latest",
"comment": "Handy key to revision.rev_id of the current revision. This may be 0 during page creation, but that shouldn't happen outside of a transaction... hopefully.",
"type": "integer",
"options": { "unsigned": true, "notnull": true }
},
{
"name": "page_len",
"comment": "Uncompressed length in bytes of the page's current source text.",
"type": "integer",
"options": { "unsigned": true, "notnull": true }
},
{
"name": "page_content_model",
"comment": "content model, see CONTENT_MODEL_XXX constants",
"type": "binary",
"options": { "length": 32, "notnull": false }
},
{
"name": "page_lang",
"comment": "Page content language",
"type": "binary",
"options": { "length": 35, "notnull": false }
}
],
"indexes": [
{
"name": "page_name_title",
"columns": [ "page_namespace", "page_title" ],
"comment": "The title index. Care must be taken to always specify a namespace when by title, so that the index is used. Even listing all known namespaces with IN() is better than omitting page_namespace from the WHERE clause.",
"unique": true
},
{
"name": "page_random",
"columns": [ "page_random" ],
"comment": "Index for Special:Random",
"unique": false
},
{
"name": "page_len",
"columns": [ "page_len" ],
"comment": "Questionable utility, used by ProofreadPage, possibly DynamicPageList. ApiQueryAllPages unconditionally filters on namespace and so hopefully does not use it.",
"unique": false
},
{
"name": "page_redirect_namespace_len",
"columns": [ "page_is_redirect", "page_namespace", "page_len" ],
"comment": "The index for Special:Shortpages and Special:Longpages. Also SiteStats::articles() in 'comma' counting mode, MessageCache::loadFromDB().",
"unique": false
}
],
"pk": [ "page_id" ]
}
}