Run database-Migrations in right order (#973)

This commit is contained in:
fipwmaqzufheoxq92ebc
2020-08-29 19:15:02 +02:00
committed by GitHub
parent 0f499c69d9
commit 17094f56eb

View File

@@ -6,37 +6,28 @@ class DatabaseMigrationService extends BaseService
{ {
public function MigrateDatabase() public function MigrateDatabase()
{ {
$this->getDatabaseService()->ExecuteDbStatement("CREATE TABLE IF NOT EXISTS migrations (migration INTEGER NOT NULL PRIMARY KEY UNIQUE, execution_time_timestamp DATETIME DEFAULT (datetime('now', 'localtime')))"); $this->getDatabaseService()->ExecuteDbStatement("CREATE TABLE IF NOT EXISTS migrations (migration INTEGER NOT NULL PRIMARY KEY UNIQUE, execution_time_timestamp DATETIME DEFAULT (datetime('now', 'localtime')))");
$sqlMigrationFiles = array(); $migrationFiles = array();
foreach (new \FilesystemIterator(__DIR__ . '/../migrations') as $file) foreach (new \FilesystemIterator(__DIR__ . '/../migrations') as $file)
{ {
if ($file->getExtension() === 'sql') $migrationFiles[$file->getBasename()] = $file;
{
$sqlMigrationFiles[$file->getBasename('.sql')] = $file->getPathname();
}
} }
ksort($sqlMigrationFiles); ksort($migrationFiles);
foreach($sqlMigrationFiles as $migrationNumber => $migrationFile) foreach($migrationFiles as $migrationKey => $migrationFile)
{ {
$migrationNumber = ltrim($migrationNumber, '0'); if($migrationFile->getExtension() === 'php')
$this->ExecuteSqlMigrationWhenNeeded($migrationNumber, file_get_contents($migrationFile)); {
} $migrationNumber = ltrim($migrationFile->getBasename('.php'), '0');
$this->ExecutePhpMigrationWhenNeeded($migrationNumber, $migrationFile->getPathname());
}
else if($migrationFile->getExtension() === 'sql')
{
$migrationNumber = ltrim($migrationFile->getBasename('.sql'), '0');
$this->ExecuteSqlMigrationWhenNeeded($migrationNumber, file_get_contents($migrationFile->getPathname()));
}
$phpMigrationFiles = array(); }
foreach (new \FilesystemIterator(__DIR__ . '/../migrations') as $file)
{
if ($file->getExtension() === 'php')
{
$phpMigrationFiles[$file->getBasename('.php')] = $file->getPathname();
}
}
ksort($phpMigrationFiles);
foreach($phpMigrationFiles as $migrationNumber => $migrationFile)
{
$migrationNumber = ltrim($migrationNumber, '0');
$this->ExecutePhpMigrationWhenNeeded($migrationNumber, $migrationFile);
}
} }
private function ExecuteSqlMigrationWhenNeeded(int $migrationId, string $sql) private function ExecuteSqlMigrationWhenNeeded(int $migrationId, string $sql)