scripts/win/docker/sql-restore-bacpac.ps1
param( [Parameter(Mandatory)] [string]$BacpacPath ) # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # 🧠 SQL BACPAC Restore — Host-based using sqlpackage 🚀 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Write-Host "" Write-Host "📦 BACPAC File: $BacpacPath" -ForegroundColor Yellow # 🧪 Ensure sqlpackage is available $sqlPackageCmd = "sqlpackage" if (-not (Get-Command $sqlPackageCmd -ErrorAction SilentlyContinue)) { Write-Host "❌ 'sqlpackage' not found in PATH. Please ensure it is installed and accessible." -ForegroundColor Red exit 1 } # 🧠 Determine base names $baseName = [System.IO.Path]::GetFileNameWithoutExtension($BacpacPath) $proposedName = ($baseName -split '[-_]')[0] # 🧠 Prompt for database name $renameOptions = @( "Use proposed: $proposedName" "Keep original: $baseName" "Propose new name..." ) $selected = $renameOptions | fzf --prompt "🧠 Choose database name for import: " --height 10 --reverse | ForEach-Object { $_.Trim() } if (-not $selected) { Write-Host "❌ No name selected. Aborting." -ForegroundColor Red exit 1 } switch -Regex ($selected) { "^Use proposed:" { $dbName = $proposedName } "^Keep original:" { $dbName = $baseName } "^Propose new name" { $entered = Read-Host -Prompt "📝 Enter custom database name" $dbName = if ([string]::IsNullOrWhiteSpace($entered)) { $baseName } else { $entered } } default { Write-Host "❌ Invalid selection. Aborting." -ForegroundColor Red exit 1 } } # 🛠️ Load connection info from store . "$env:BORG_ROOT\config\globalfn.ps1" $server = GetBorgStoreValue -Chapter docker -Key sqlinstance $username = GetBorgStoreValue -Chapter docker -Key sqluser $password = GetBorgStoreValue -Chapter docker -Key sqlpassword if (-not $server -or -not $username -or -not $password) { Write-Host "❌ Missing SQL connection configuration in store. Please check chapter 'docker'." -ForegroundColor Red exit 1 } $connectionString = "Server=$server;Database=$dbName;User Id=$username;Password=$password;TrustServerCertificate=True" # 🚀 Execute import Write-Host "" Write-Host "🚀 Importing '$dbName' using sqlpackage.exe..." -ForegroundColor Cyan & $sqlPackageCmd /Action:Import /SourceFile:"$BacpacPath" /TargetConnectionString:"$connectionString" if ($LASTEXITCODE -ne 0) { Write-Host "❌ Import failed. Please check the output above." -ForegroundColor Red exit 1 } Write-Host "" Write-Host "✅ Database '$dbName' imported successfully!" -ForegroundColor Green |