wikimedia/mediawiki-core

View on GitHub
maintenance/abstractSchemaChanges/patch-page-rename-name_title-index.json

Summary

Maintainability
Test Coverage
{
    "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" ]
    }
}