aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--autoload.php1
-rw-r--r--maintenance/generateSchemaSql.php75
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;