aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2017-06-02 13:54:09 +0200
committerMorris Jobke <hey@morrisjobke.de>2017-07-05 13:01:19 +0200
commit194ef1a1715038c2193cee65a74372f07bc4eee6 (patch)
tree3e9f6120c64f85614cf926c2a7bd6286aaef3b88
parent183b1dbde3b5586e3bae0073f6f9c40414e7c6a6 (diff)
downloadnextcloud-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.php90
-rw-r--r--lib/private/DB/MigrationService.php28
-rw-r--r--lib/public/Migration/IMigrationStep.php5
-rw-r--r--lib/public/Migration/SimpleMigrationStep.php54
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) {
+ }
+}