aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/DB/MigrationService.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/DB/MigrationService.php')
-rw-r--r--lib/private/DB/MigrationService.php41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php
index cd0280162d3..138d7703597 100644
--- a/lib/private/DB/MigrationService.php
+++ b/lib/private/DB/MigrationService.php
@@ -408,6 +408,11 @@ class MigrationService {
* @throws \InvalidArgumentException
*/
public function migrate($to = 'latest', $schemaOnly = false) {
+ if ($schemaOnly) {
+ $this->migrateSchemaOnly($to);
+ return;
+ }
+
// read known migrations
$toBeExecuted = $this->getMigrationsToExecute($to);
foreach ($toBeExecuted as $version) {
@@ -416,6 +421,42 @@ class MigrationService {
}
/**
+ * Applies all not yet applied versions up to $to
+ *
+ * @param string $to
+ * @throws \InvalidArgumentException
+ */
+ public function migrateSchemaOnly($to = 'latest') {
+ // read known migrations
+ $toBeExecuted = $this->getMigrationsToExecute($to);
+
+ if (empty($toBeExecuted)) {
+ return;
+ }
+
+ $toSchema = null;
+ foreach ($toBeExecuted as $version) {
+ $instance = $this->createInstance($version);
+
+ $toSchema = $instance->changeSchema($this->output, function () use ($toSchema) {
+ return $toSchema ?: new SchemaWrapper($this->connection);
+ }, ['tablePrefix' => $this->connection->getPrefix()]) ?: $toSchema;
+
+ $this->markAsExecuted($version);
+ }
+
+ if ($toSchema instanceof SchemaWrapper) {
+ $targetSchema = $toSchema->getWrappedSchema();
+ if ($this->checkOracle) {
+ $beforeSchema = $this->connection->createSchema();
+ $this->ensureOracleIdentifierLengthLimit($beforeSchema, $targetSchema, strlen($this->connection->getPrefix()));
+ }
+ $this->connection->migrateToSchema($targetSchema);
+ $toSchema->performDropTableCalls();
+ }
+ }
+
+ /**
* Get the human readable descriptions for the migration steps to run
*
* @param string $to