Skip to content
Snippets Groups Projects
Commit 6e1881db authored by Thomas Müller's avatar Thomas Müller
Browse files

new console command to generate sql migration scripts

parent fe1df961
No related branches found
No related tags found
No related merge requests found
<?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.')');
}
}
}
......@@ -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());
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment