{
	"$schema": "https://json-schema.org/schema#",
	"description": "Abstract description of a mediawiki database table",
	"type": "object",
	"additionalProperties": false,
	"properties": {
		"name": {
			"type": "string",
			"description": "Name of the table"
		},
		"comment": {
			"type": "string",
			"description": "Comment describing the table"
		},
		"columns": {
			"type": "array",
			"additionalItems": false,
			"description": "Columns",
			"minItems": 1,
			"items": {
				"type": "object",
				"additionalProperties": false,
				"properties": {
					"name": {
						"type": "string",
						"description": "Name of the column"
					},
					"comment": {
						"type": "string",
						"description": "Comment describing the column"
					},
					"type": {
						"type": "string",
						"description": "Data type of the column",
						"enum": [
							"bigint",
							"binary",
							"blob",
							"boolean",
							"datetimetz",
							"decimal",
							"float",
							"integer",
							"mwenum",
							"mwtimestamp",
							"mwtinyint",
							"smallint",
							"string",
							"text"
						]
					},
					"options": {
						"type": "object",
						"description": "Additional options",
						"additionalProperties": false,
						"properties": {
							"autoincrement": {
								"type": "boolean",
								"description": "Indicates if the field should use an autoincremented value if no value was provided",
								"default": false
							},
							"default": {
								"type": [
									"number",
									"string",
									"null"
								],
								"description": "The default value of the column if no value was specified",
								"default": null
							},
							"fixed": {
								"type": "boolean",
								"description": "Indicates if the column should have a fixed length",
								"default": false
							},
							"length": {
								"type": "number",
								"description": "Length of the field.",
								"default": null,
								"minimum": 0
							},
							"notnull": {
								"type": "boolean",
								"description": "Indicates whether the column is nullable or not",
								"default": true
							},
							"unsigned": {
								"type": "boolean",
								"description": "If the column should be an unsigned integer",
								"default": false
							},
							"scale": {
								"type": "number",
								"description": "Exact number of decimal digits to be stored in a decimal type column",
								"default": 0
							},
							"precision": {
								"type": "number",
								"description": "Precision of a decimal type column that determines the overall maximum number of digits to be stored (including scale)",
								"default": 10
							},
							"PlatformOptions": {
								"type": "object",
								"additionalProperties": false,
								"properties": {
									"version": {
										"type": "boolean"
									}
								}
							},
							"CustomSchemaOptions": {
								"type": "object",
								"description": "Custom schema options",
								"additionalProperties": false,
								"properties": {
									"allowInfinite": {
										"type": "boolean"
									},
									"doublePrecision": {
										"type": "boolean"
									},
									"enum_values": {
										"type": "array",
										"description": "Values to use with type 'mwenum'",
										"additionalItems": false,
										"items": {
											"type": "string"
										},
										"uniqueItems": true
									}
								}
							}
						}
					}
				},
				"required": [
					"name",
					"type",
					"options"
				]
			}
		},
		"indexes": {
			"type": "array",
			"additionalItems": false,
			"description": "Indexes",
			"items": {
				"type": "object",
				"additionalProperties": false,
				"properties": {
					"name": {
						"type": "string",
						"description": "Index name"
					},
					"comment": {
						"type": "string",
						"description": "Comment describing the index"
					},
					"columns": {
						"type": "array",
						"additionalItems": false,
						"description": "Columns used by the index",
						"items": {
							"type": "string"
						},
						"uniqueItems": true
					},
					"unique": {
						"type": "boolean",
						"description": "If the index is unique",
						"default": false
					},
					"flags": {
						"type": "array",
						"items": {
							"type": "string",
							"enum": [
								"fulltext",
								"spatial"
							]
						},
						"uniqueItems": true
					},
					"options": {
						"type": "object",
						"properties": {
							"lengths": {
								"type": "array",
								"items": {
									"type": [
										"number",
										"null"
									]
								},
								"minItems": 1
							}
						}
					}
				},
				"required": [
					"name",
					"columns",
					"unique"
				]
			}
		},
		"pk": {
			"type": "array",
			"additionalItems": false,
			"description": "Array of column names used in the primary key",
			"items": {
				"type": "string"
			},
			"uniqueItems": true
		},
		"table_options": {
			"type": "array",
			"items": {
				"type": "string"
			}
		}
	},
	"required": [
		"name",
		"columns",
		"indexes"
	]
}
