diff options
author | Joas Schilling <coding@schilljs.com> | 2017-06-02 13:54:09 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2017-07-05 13:01:19 +0200 |
commit | 194ef1a1715038c2193cee65a74372f07bc4eee6 (patch) | |
tree | 3e9f6120c64f85614cf926c2a7bd6286aaef3b88 | |
parent | 183b1dbde3b5586e3bae0073f6f9c40414e7c6a6 (diff) | |
download | nextcloud-server-194ef1a1715038c2193cee65a74372f07bc4eee6.tar.gz nextcloud-server-194ef1a1715038c2193cee65a74372f07bc4eee6.zip |
Adjust the code to use our interface and abstract
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r-- | core/Command/Db/Migrations/GenerateCommand.php | 90 | ||||
-rw-r--r-- | lib/private/DB/MigrationService.php | 28 | ||||
-rw-r--r-- | lib/public/Migration/IMigrationStep.php | 5 | ||||
-rw-r--r-- | lib/public/Migration/SimpleMigrationStep.php | 54 |
4 files changed, 99 insertions, 78 deletions
diff --git a/core/Command/Db/Migrations/GenerateCommand.php b/core/Command/Db/Migrations/GenerateCommand.php index 307989c845a..894c0f4f3ed 100644 --- a/core/Command/Db/Migrations/GenerateCommand.php +++ b/core/Command/Db/Migrations/GenerateCommand.php @@ -24,7 +24,6 @@ namespace OC\Core\Command\Db\Migrations; use OC\DB\MigrationService; use OC\Migration\ConsoleOutput; -use OCP\IConfig; use OCP\IDBConnection; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Exception\RuntimeException; @@ -38,56 +37,37 @@ class GenerateCommand extends Command { '<?php namespace <namespace>; -use OCP\Migration\ISimpleMigration; +use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; /** * Auto-generated migration step: Please modify to your needs! */ -class Version<version> implements ISimpleMigration { - - /** - * @param IOutput $out - */ - public function run(IOutput $out) { - // auto-generated - please modify it to your needs - } -} -'; - - private static $_templateSchema = - '<?php -namespace <namespace>; - -use Doctrine\DBAL\Schema\Schema; -use OCP\Migration\ISchemaMigration; - -/** - * Auto-generated migration step: Please modify to your needs! - */ -class Version<version> implements ISchemaMigration { +class Version<version> extends SimpleMigrationStep { - public function changeSchema(Schema $schema, array $options) { - // auto-generated - please modify it to your needs - } -} -'; - - private static $_templateSql = - '<?php -namespace <namespace>; - -use OCP\IDBConnection; -use OCP\Migration\ISqlMigration; + /** + * @param IOutput $output + * @since 13.0.0 + */ + public function preSchemaChange(IOutput $output) { + } -/** - * Auto-generated migration step: Please modify to your needs! - */ -class Version<version> implements ISqlMigration { + /** + * @param \Closure $schema The `\Closure` returns a `Schema` + * @param array $options + * @return null|Schema + * @since 13.0.0 + */ + public function changeSchema(\Closure $schema, array $options) { + return null; + } - public function sql(IDBConnection $connection) { - // auto-generated - please modify it to your needs - } + /** + * @param IOutput $output + * @since 13.0.0 + */ + public function postSchemaChange(IOutput $output) { + } } '; @@ -107,7 +87,7 @@ class Version<version> implements ISqlMigration { $this ->setName('migrations:generate') ->addArgument('app', InputArgument::REQUIRED, 'Name of the app this migration command shall work on') - ->addArgument('kind', InputArgument::REQUIRED, 'simple, schema or sql - defines the kind of migration to be generated'); + ; parent::configure(); } @@ -115,10 +95,8 @@ class Version<version> implements ISqlMigration { public function execute(InputInterface $input, OutputInterface $output) { $appName = $input->getArgument('app'); $ms = new MigrationService($appName, $this->connection, new ConsoleOutput($output)); - - $kind = $input->getArgument('kind'); $version = date('YmdHis'); - $path = $this->generateMigration($ms, $version, $kind); + $path = $this->generateMigration($ms, $version); $output->writeln("New migration class has been generated to <info>$path</info>"); @@ -127,10 +105,9 @@ class Version<version> implements ISqlMigration { /** * @param MigrationService $ms * @param string $version - * @param string $kind * @return string */ - private function generateMigration(MigrationService $ms, $version, $kind) { + private function generateMigration(MigrationService $ms, $version) { $placeHolders = [ '<namespace>', '<version>', @@ -139,7 +116,7 @@ class Version<version> implements ISqlMigration { $ms->getMigrationsNamespace(), $version, ]; - $code = str_replace($placeHolders, $replacements, $this->getTemplate($kind)); + $code = str_replace($placeHolders, $replacements, self::$_templateSimple); $dir = $ms->getMigrationsDirectory(); $path = $dir . '/Version' . $version . '.php'; @@ -150,17 +127,4 @@ class Version<version> implements ISqlMigration { return $path; } - private function getTemplate($kind) { - if ($kind === 'simple') { - return self::$_templateSimple; - } - if ($kind === 'schema') { - return self::$_templateSchema; - } - if ($kind === 'sql') { - return self::$_templateSql; - } - throw new \InvalidArgumentException('Kind can only be one of the following: simple, schema or sql'); - } - } diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php index 8a4980d1118..c81fe0f4332 100644 --- a/lib/private/DB/MigrationService.php +++ b/lib/private/DB/MigrationService.php @@ -22,10 +22,12 @@ namespace OC\DB; +use Doctrine\DBAL\Schema\Schema; use OC\IntegrityCheck\Helpers\AppLocator; use OC\Migration\SimpleOutput; use OCP\AppFramework\QueryException; use OCP\IDBConnection; +use OCP\Migration\IMigrationStep; use OCP\Migration\IOutput; use OCP\Migration\ISchemaMigration; use OCP\Migration\ISimpleMigration; @@ -373,23 +375,23 @@ class MigrationService { * @param string $version */ public function executeStep($version) { - - // FIXME our interface $instance = $this->createInstance($version); - if ($instance instanceof ISimpleMigration) { - $instance->run($this->output); - } - if ($instance instanceof ISqlMigration) { - $sqls = $instance->sql($this->connection); - foreach ($sqls as $s) { - $this->connection->executeQuery($s); - } + if (!$instance instanceof IMigrationStep) { + throw new \RuntimeException('Not a valid migration'); } - if ($instance instanceof ISchemaMigration) { - $toSchema = $this->connection->createSchema(); - $instance->changeSchema($toSchema, ['tablePrefix' => $this->connection->getPrefix()]); + + $instance->preSchemaChange($this->output); + + $toSchema = $instance->changeSchema(function() { + return $this->connection->createSchema(); + }, ['tablePrefix' => $this->connection->getPrefix()]); + + if ($toSchema instanceof Schema) { $this->connection->migrateToSchema($toSchema); } + + $instance->postSchemaChange($this->output); + $this->markAsExecuted($version); } diff --git a/lib/public/Migration/IMigrationStep.php b/lib/public/Migration/IMigrationStep.php index 3f95eed7598..aeb35bc8390 100644 --- a/lib/public/Migration/IMigrationStep.php +++ b/lib/public/Migration/IMigrationStep.php @@ -35,11 +35,12 @@ interface IMigrationStep { public function preSchemaChange(IOutput $output); /** - * @param Schema $schema + * @param \Closure $schema The `\Closure` returns a `Schema` * @param array $options + * @return null|Schema * @since 13.0.0 */ - public function changeSchema(Schema $schema, array $options); + public function changeSchema(\Closure $schema, array $options); /** * @param IOutput $output diff --git a/lib/public/Migration/SimpleMigrationStep.php b/lib/public/Migration/SimpleMigrationStep.php new file mode 100644 index 00000000000..681bd5c6b52 --- /dev/null +++ b/lib/public/Migration/SimpleMigrationStep.php @@ -0,0 +1,54 @@ +<?php +/** + * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Migration; + +use Doctrine\DBAL\Schema\Schema; + +/** + * @since 13.0.0 + */ +abstract class SimpleMigrationStep implements IMigrationStep { + + /** + * @param IOutput $output + * @since 13.0.0 + */ + public function preSchemaChange(IOutput $output) { + } + + /** + * @param \Closure $schema + * @param array $options + * @return null|Schema + * @since 13.0.0 + */ + public function changeSchema(\Closure $schema, array $options) { + return null; + } + + /** + * @param IOutput $output + * @since 13.0.0 + */ + public function postSchemaChange(IOutput $output) { + } +} |