scripts/win/docker/query.ps1

# Powershell script to immediate query on a database without the use of management.
# This I will use only when I need to query something simple just to have a glance at it.
param(
    [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
    [string]$query
)

. "$env:BORG_ROOT\config\globalfn.ps1"

# Connection string
$connectionString = "Server=$SqlInstance;Database=$SqlUseDatabase;User ID=$SqlUser;Password=$SqlPassword;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)

try {
    $connection.Open()
    Write-Host "Connection opened successfully." -ForegroundColor Green

    $command = $connection.CreateCommand()
    $command.CommandText = $query

    $reader = $command.ExecuteReader()

    # Fetch column names
    $columns = @()
    for ($i = 0; $i -lt $reader.FieldCount; $i++) {
        $columns += $reader.GetName($i)
    }

    # Fetch data rows
    $data = @()
    while ($reader.Read()) {
        $row = @{}
        for ($i = 0; $i -lt $reader.FieldCount; $i++) {
            $row[$columns[$i]] = $reader.GetValue($i)
        }
        $data += [PSCustomObject]$row
    }

    $reader.Close()

    if ($data.Count -eq 0) {
        Write-Host "Query executed successfully but returned no results." -ForegroundColor Yellow
    }
    else {
        $data | Format-Table -AutoSize | Out-String | Write-Host
    }
}
catch {
    Write-Host "Error executing query: $_" -ForegroundColor Red
}
finally {
    $connection.Close()
    Write-Host "Connection closed." -ForegroundColor Green
}