diff options
-rw-r--r-- | autoload.php | 1 | ||||
-rw-r--r-- | maintenance/generateSchemaSql.php | 75 |
2 files changed, 76 insertions, 0 deletions
diff --git a/autoload.php b/autoload.php index 6fdec6e8f5e5..04d9b50e547b 100644 --- a/autoload.php +++ b/autoload.php @@ -565,6 +565,7 @@ $wgAutoloadLocalClasses = [ 'GenerateNormalizerDataAr' => __DIR__ . '/maintenance/language/generateNormalizerDataAr.php', 'GenerateNormalizerDataMl' => __DIR__ . '/maintenance/language/generateNormalizerDataMl.php', 'GeneratePhpCharToUpperMappings' => __DIR__ . '/maintenance/mediawiki.Title/generatePhpCharToUpperMappings.php', + 'GenerateSchemaSql' => __DIR__ . '/maintenance/generateSchemaSql.php', 'GenerateSitemap' => __DIR__ . '/maintenance/generateSitemap.php', 'GenerateUcfirstOverrides' => __DIR__ . '/maintenance/language/generateUcfirstOverrides.php', 'GenerateUpperCharTable' => __DIR__ . '/maintenance/language/generateUpperCharTable.php', diff --git a/maintenance/generateSchemaSql.php b/maintenance/generateSchemaSql.php new file mode 100644 index 000000000000..5caaf64aac64 --- /dev/null +++ b/maintenance/generateSchemaSql.php @@ -0,0 +1,75 @@ +<?php + +/** + * Convert a JSON abstract schema to a schema file in the given DBMS type + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup Maintenance + */ + +use Wikimedia\Rdbms\DoctrineSchemaBuilderFactory; + +require_once __DIR__ . '/Maintenance.php'; + +/** + * Maintenance script to generate schema from abstract json files. + * + * @ingroup Maintenance + */ +class GenerateSchemaSql extends Maintenance { + public function __construct() { + parent::__construct(); + $this->addDescription( 'Build SQL files from abstract JSON files' ); + + $this->addOption( + 'json', + 'Path to the json file. Default: tables.json', + false, + true + ); + $this->addOption( + 'sql', + 'Path to output. Default: tables-generated.sql', + false, + true + ); + $this->addOption( + 'type', + 'Can be either \'mysql\', \'sqlite\', or \'postgres\'. Default: mysql', + false, + true + ); + } + + public function execute() { + $jsonFile = $this->getOption( 'json', 'tables.json' ); + $sqlFile = $this->getOption( 'sql', 'tables-generated.sql' ); + $abstractSchema = json_decode( file_get_contents( $jsonFile ), true ); + $schemaBuilder = ( new DoctrineSchemaBuilderFactory() )->getSchemaBuilder( + $this->getOption( 'type', 'mysql' ) + ); + foreach ( $abstractSchema as $table ) { + $schemaBuilder->addTable( $table ); + } + file_put_contents( $sqlFile, $schemaBuilder->getSql() ); + } + +} + +$maintClass = GenerateSchemaSql::class; +require_once RUN_MAINTENANCE_IF_MAIN; |