{
	"comment": "Drop legacy page.page_restrictions field (T35334)",
	"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, "unsigned": 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, "unsigned": 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" ]
	},
	"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_is_redirect",
				"comment": "1 indicates the article is a redirect.",
				"type": "mwtinyint",
				"options": { "notnull": true, "unsigned": 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, "unsigned": 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" ]
	}
}
