summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2020-11-11 13:27:40 +0100
committerGitHub <noreply@github.com>2020-11-11 13:27:40 +0100
commit48f1f961b9e01249a9e896fc0fabb7fbf0a42f8b (patch)
treed8230d3dcaad4933218220b520c9243449d08592
parent0c7bed26e843a78ebc0a4ab624bfc24b6fb527f0 (diff)
parent77713ab454f7edb99502cc706b6b08b32d8fa177 (diff)
downloadnextcloud-server-48f1f961b9e01249a9e896fc0fabb7fbf0a42f8b.tar.gz
nextcloud-server-48f1f961b9e01249a9e896fc0fabb7fbf0a42f8b.zip
Merge pull request #24039 from nextcloud/faster-installation
Installation goes brrrr
-rw-r--r--lib/private/DB/MigrationService.php46
-rw-r--r--lib/private/Installer.php4
-rw-r--r--lib/private/Setup/AbstractDatabase.php2
3 files changed, 49 insertions, 3 deletions
diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php
index cd0280162d3..9c94cbc61fa 100644
--- a/lib/private/DB/MigrationService.php
+++ b/lib/private/DB/MigrationService.php
@@ -124,6 +124,11 @@ class MigrationService {
return false;
}
+ if ($this->connection->tableExists('migrations')) {
+ $this->migrationTableCreated = true;
+ return false;
+ }
+
$schema = new SchemaWrapper($this->connection);
/**
@@ -408,6 +413,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 +426,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
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index 9388711697a..96f14933a76 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -154,7 +154,7 @@ class Installer {
}
} else {
$ms = new \OC\DB\MigrationService($info['id'], \OC::$server->getDatabaseConnection());
- $ms->migrate();
+ $ms->migrate('latest', true);
}
if ($previousVersion) {
OC_App::executeRepairSteps($appId, $info['repair-steps']['post-migration']);
@@ -589,7 +589,7 @@ class Installer {
}
} else {
$ms = new \OC\DB\MigrationService($app, \OC::$server->getDatabaseConnection());
- $ms->migrate();
+ $ms->migrate('latest', true);
}
//run appinfo/install.php
diff --git a/lib/private/Setup/AbstractDatabase.php b/lib/private/Setup/AbstractDatabase.php
index 98d6b84ab9c..8a9aed09f1b 100644
--- a/lib/private/Setup/AbstractDatabase.php
+++ b/lib/private/Setup/AbstractDatabase.php
@@ -150,6 +150,6 @@ abstract class AbstractDatabase {
return;
}
$ms = new MigrationService('core', \OC::$server->getDatabaseConnection());
- $ms->migrate();
+ $ms->migrate('latest', true);
}
}