diff --git a/services/DatabaseMigrationService.php b/services/DatabaseMigrationService.php index 449031c0..abfe3b42 100644 --- a/services/DatabaseMigrationService.php +++ b/services/DatabaseMigrationService.php @@ -15,30 +15,34 @@ class DatabaseMigrationService extends BaseService $this->getDatabaseService()->ExecuteDbStatement("CREATE TABLE IF NOT EXISTS migrations (migration INTEGER NOT NULL PRIMARY KEY UNIQUE, execution_time_timestamp DATETIME DEFAULT (datetime('now', 'localtime')))"); $migrationFiles = []; - foreach (new \FilesystemIterator(__DIR__ . '/../migrations') as $file) { $migrationFiles[$file->getBasename()] = $file; } - ksort($migrationFiles); + $migrationCounter = 0; foreach ($migrationFiles as $migrationKey => $migrationFile) { if ($migrationFile->getExtension() === 'php') { $migrationNumber = ltrim($migrationFile->getBasename('.php'), '0'); - $this->ExecutePhpMigrationWhenNeeded($migrationNumber, $migrationFile->getPathname()); + $this->ExecutePhpMigrationWhenNeeded($migrationNumber, $migrationFile->getPathname(), $migrationCounter); } elseif ($migrationFile->getExtension() === 'sql') { $migrationNumber = ltrim($migrationFile->getBasename('.sql'), '0'); - $this->ExecuteSqlMigrationWhenNeeded($migrationNumber, file_get_contents($migrationFile->getPathname())); + $this->ExecuteSqlMigrationWhenNeeded($migrationNumber, file_get_contents($migrationFile->getPathname()), $migrationCounter); } } + + if ($migrationCounter > 0) + { + $this->getDatabaseService()->ExecuteDbStatement('VACUUM'); + } } - private function ExecutePhpMigrationWhenNeeded(int $migrationId, string $phpFile) + private function ExecutePhpMigrationWhenNeeded(int $migrationId, string $phpFile, int &$migrationCounter) { $rowCount = $this->getDatabaseService()->ExecuteDbQuery('SELECT COUNT(*) FROM migrations WHERE migration = ' . $migrationId)->fetchColumn(); @@ -49,11 +53,12 @@ class DatabaseMigrationService extends BaseService if ($migrationId != self::EMERGENCY_MIGRATION_ID && $migrationId != self::DOALWAYS_MIGRATION_ID) { $this->getDatabaseService()->ExecuteDbStatement('INSERT INTO migrations (migration) VALUES (' . $migrationId . ')'); + $migrationCounter++; } } } - private function ExecuteSqlMigrationWhenNeeded(int $migrationId, string $sql) + private function ExecuteSqlMigrationWhenNeeded(int $migrationId, string $sql, int &$migrationCounter) { $rowCount = $this->getDatabaseService()->ExecuteDbQuery('SELECT COUNT(*) FROM migrations WHERE migration = ' . $migrationId)->fetchColumn(); @@ -68,6 +73,7 @@ class DatabaseMigrationService extends BaseService if ($migrationId != self::EMERGENCY_MIGRATION_ID && $migrationId != self::DOALWAYS_MIGRATION_ID) { $this->getDatabaseService()->ExecuteDbStatement('INSERT INTO migrations (migration) VALUES (' . $migrationId . ')'); + $migrationCounter++; } } catch (Exception $ex)