Files
thetool/docker/SqlCollationSwitcher/SqlCollationSwitcher.ps1
2024-03-05 10:51:27 +00:00

35 lines
1.4 KiB
PowerShell

param(
[string]$compressedFile
)
# Load .NET assembly for file handling
Add-Type -AssemblyName System.IO.Compression.FileSystem
# Resolve absolute path of the compressed file
$absoluteCompressedFile = Resolve-Path $compressedFile
# Generate file names
$workingDir = Split-Path $absoluteCompressedFile
$uncompressedFile = Join-Path $workingDir ($compressedFile -replace '^\.\\', '' -replace '\.sql\.gz$', '_uncompressed.sql')
$modifiedFile = Join-Path $workingDir ($compressedFile -replace '^\.\\', '' -replace '\.sql\.gz$', '_modified.sql')
$recompressedFile = Join-Path $workingDir ($compressedFile -replace '^\.\\', '' -replace '\.gz$', '_modified.sql.gz')
# Decompress .sql.gz file using .NET Framework
[System.IO.Compression.ZipFile]::ExtractToDirectory($absoluteCompressedFile, $workingDir)
# Read content of uncompressed file
$content = Get-Content -Path $uncompressedFile -Raw
# Replace text
$content = $content -replace 'utf8mb4_0900_ai_ci', 'utf8mb4_general_ci'
# Write modified content to file
Set-Content -Path $modifiedFile -Value $content -Encoding UTF8
# Compress .sql file back to .sql.gz using .NET Framework
[System.IO.Compression.ZipFile]::CreateFromDirectory($workingDir, $recompressedFile)
# Cleanup: Optionally, you can remove the uncompressed and modified files if you don't need them anymore
# Remove-Item $uncompressedFile
# Remove-Item $modifiedFile