diff options
-rw-r--r-- | core/command/db/generatechangescript.php | 45 | ||||
-rw-r--r-- | core/register_command.php | 2 | ||||
-rw-r--r-- | lib/private/db/mdb2schemamanager.php | 22 |
3 files changed, 68 insertions, 1 deletions
diff --git a/core/command/db/generatechangescript.php b/core/command/db/generatechangescript.php new file mode 100644 index 00000000000..f971124cfdc --- /dev/null +++ b/core/command/db/generatechangescript.php @@ -0,0 +1,45 @@ +<?php +/** + * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Core\Command\Db; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class GenerateChangeScript extends Command { + protected function configure() { + $this + ->setName('db:generate-change-script') + ->setDescription('generates the change script from the current connected db to db_structure.xml') + ->addArgument( + 'schema-xml', + InputArgument::OPTIONAL, + 'the schema xml to be used as target schema', + \OC::$SERVERROOT . '/db_structure.xml' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + $file = $input->getArgument('schema-xml'); + + $schemaManager = new \OC\DB\MDB2SchemaManager(\OC_DB::getConnection()); + + try { + $result = $schemaManager->updateDbFromStructure($file, true); + $output->writeln($result); + } catch (\Exception $e) { + $output->writeln('Failed to update database structure ('.$e.')'); + } + + } +} diff --git a/core/register_command.php b/core/register_command.php index 1eed347b7b5..683e7ae1833 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -6,4 +6,6 @@ * See the COPYING-README file. */ +/** @var $application Symfony\Component\Console\Application */ $application->add(new OC\Core\Command\Status); +$application->add(new OC\Core\Command\Db\GenerateChangeScript()); diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php index 8e76f46c78f..fc13e881bff 100644 --- a/lib/private/db/mdb2schemamanager.php +++ b/lib/private/db/mdb2schemamanager.php @@ -53,7 +53,7 @@ class MDB2SchemaManager { * @param string $file file to read structure from * @return bool */ - public function updateDbFromStructure($file) { + public function updateDbFromStructure($file, $generateSql = false) { $sm = $this->conn->getSchemaManager(); $fromSchema = $sm->createSchema(); @@ -82,6 +82,10 @@ class MDB2SchemaManager { $tableDiff->name = $platform->quoteIdentifier($tableDiff->name); } + if ($generateSql) { + return $this->generateChangeScript($schemaDiff); + } + return $this->executeSchemaChange($schemaDiff); } @@ -147,4 +151,20 @@ class MDB2SchemaManager { $this->conn->commit(); return true; } + + /** + * @param \Doctrine\DBAL\Schema\Schema $schema + * @return string + */ + public function generateChangeScript($schema) { + + $script = ''; + $sqls = $schema->toSql($this->conn->getDatabasePlatform()); + foreach($sqls as $sql) { + $script .= $sql . ';'; + $script .= PHP_EOL; + } + + return $script; + } } |