Manual:generateSchemaSql.php
Appearance
| MediaWiki version: | ≥ 1.35 |
| MediaWiki file: generateSchemaSql.php | |
|---|---|
| Location: | maintenance/ |
| Source code: | master • 1.45.3 • 1.44.5 • 1.43.8 |
| Classes: | GenerateSchemaSql |
Details
[edit]This maintenance script builds SQL files from abstract JSON files. The feature to generate SQL files from abstract JSON file was introduced in MediaWiki 1.35 by RFC T191231. MediaWiki uses Doctrine DBAL library to generate DDL files from the abstractions. Read more at Manual:Schema changes.
Options/Arguments
[edit]| Option | Description | Required? | Default value |
|---|---|---|---|
| --json | Path to the json file | Optional | tables.json |
| --sql | Path to output | Optional | tables-generated.sql |
| --type | Output database type One value among: mysql sqlite postgres |
Optional | mysql |
Usage
[edit]php maintenance/run.php generateSchemaSql [OPTION]...
In MediaWiki version MediaWiki 1.39 and earlier, you must invoke maintenance scripts using
php maintenance/scriptName.php instead of php maintenance/run.php scriptName.Generating MySQL file from actorTable.json
[edit]actorTable.json
[
{
"name": "actor",
"comment": "The \"actor\" table associates user names or IP addresses with integers for the benefit of other tables that need to refer to either logged-in or logged-out users. If something can only ever be done by logged-in users, it can refer to the user table directly.",
"columns": [
{
"name": "actor_id",
"comment": "Unique ID to identify each actor",
"type": "bigint",
"options": { "unsigned": true, "notnull": true, "autoincrement": true }
},
{
"name": "actor_user",
"comment": "Key to user.user_id, or NULL for anonymous edits",
"type": "integer",
"options": { "unsigned": true, "notnull": false }
},
{
"name": "actor_name",
"comment": "Text username or IP address",
"type": "binary",
"options": { "length": 255, "notnull": true }
}
],
"indexes": [
{ "name": "actor_user", "columns": [ "actor_user" ], "unique": true },
{ "name": "actor_name", "columns": [ "actor_name" ], "unique": true }
],
"pk": [ "actor_id" ]
}
]
Terminal
$ php maintenance/run.php generateSchemaSql --json actorTable.json --sql actorTable.sql
Output:
-- This file is automatically generated using maintenance/generateSchemaSql.php.
-- Source: actorTable.json
-- Do not modify this file directly.
-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
CREATE TABLE /*_*/actor (
actor_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
actor_user INT UNSIGNED DEFAULT NULL,
actor_name VARBINARY(255) NOT NULL,
UNIQUE INDEX actor_user (actor_user),
UNIQUE INDEX actor_name (actor_name),
PRIMARY KEY(actor_id)
) /*$wgDBTableOptions*/;
Generating SQLite file from actorTable.json
[edit]Terminal
$ php maintenance/run.php generateSchemaSql --json actorTable.json --sql actorTable.sqlite --type sqlite
Output:
-- This file is automatically generated using maintenance/generateSchemaSql.php.
-- Source: a.json
-- Do not modify this file directly.
-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
CREATE TABLE /*_*/actor (
actor_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
actor_user INTEGER UNSIGNED DEFAULT NULL,
actor_name BLOB NOT NULL
);
CREATE UNIQUE INDEX actor_user ON /*_*/actor (actor_user);
CREATE UNIQUE INDEX actor_name ON /*_*/actor (actor_name);