gengx
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$env:MYSQL_PWD = if ($env:IM_DB_PASSWORD) { $env:IM_DB_PASSWORD } else { 'root' }
|
||||
$mysql = if ($env:IM_MYSQL_BIN) { $env:IM_MYSQL_BIN } else { 'mysql' }
|
||||
$hostName = if ($env:IM_DB_HOST) { $env:IM_DB_HOST } else { '127.0.0.1' }
|
||||
$userName = if ($env:IM_DB_USER) { $env:IM_DB_USER } else { 'root' }
|
||||
$database = if ($env:IM_DB_NAME) { $env:IM_DB_NAME } else { 'im' }
|
||||
|
||||
$baseArgs = @('-h', $hostName, '-u', $userName, '--default-character-set=utf8mb4', '--batch', '--skip-column-names', $database)
|
||||
& $mysql @baseArgs --execute "CREATE TABLE IF NOT EXISTS schema_migrations (version VARCHAR(255) NOT NULL PRIMARY KEY, checksum CHAR(64) NOT NULL, applied_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Could not initialize schema_migrations.' }
|
||||
|
||||
Get-ChildItem -LiteralPath "$PSScriptRoot\..\backend\migrations" -Filter '*.sql' |
|
||||
Sort-Object Name |
|
||||
ForEach-Object {
|
||||
$version = $_.Name.Replace("'", "''")
|
||||
$checksum = (Get-FileHash -LiteralPath $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||
$existing = (& $mysql @baseArgs --execute "SELECT checksum FROM schema_migrations WHERE version='$version'") -join ''
|
||||
if ($LASTEXITCODE -ne 0) { throw "Could not inspect migration: $($_.Name)" }
|
||||
$existing = $existing.Trim()
|
||||
if ($existing) {
|
||||
if ($existing -ne $checksum) { throw "Migration checksum mismatch: $($_.Name)" }
|
||||
Write-Host "Already applied $($_.Name)."
|
||||
return
|
||||
}
|
||||
Write-Host "Applying $($_.Name)..."
|
||||
$migrationPath = $_.FullName.Replace('\', '/')
|
||||
& $mysql @baseArgs --execute "source $migrationPath"
|
||||
if ($LASTEXITCODE -ne 0) { throw "Migration failed: $($_.Name)" }
|
||||
& $mysql @baseArgs --execute "INSERT INTO schema_migrations(version,checksum) VALUES('$version','$checksum')"
|
||||
if ($LASTEXITCODE -ne 0) { throw "Could not record migration: $($_.Name)" }
|
||||
}
|
||||
|
||||
Write-Host 'Database migrations completed.'
|
||||
Reference in New Issue
Block a user