private/Set-FirebirdTestEnvironment.ps1

function Set-FirebirdTestEnvironment {
    <#
    .SYNOPSIS
        Configure Firebird for PDO_Firebird tests on Windows.
    #>

    [CmdletBinding()]
    param ()
    process {
        $destDir = 'C:\Firebird'
        $firebirdVersion = 'v4.0.4'
        $firebirdRelease = "https://github.com/FirebirdSQL/firebird/releases/download/$firebirdVersion"
        New-Item -ItemType Directory -Force -Path $destDir | Out-Null

        $is64 = [Environment]::Is64BitOperatingSystem
        $url = if ($is64) {
            "$firebirdRelease/Firebird-4.0.4.3010-0-x64.zip"
        } else {
            "$firebirdRelease/Firebird-4.0.4.3010-0-Win32.zip"
        }

        $zipPath = Join-Path $destDir 'Firebird.zip'
        Invoke-WebRequest -Uri $url -UseBasicParsing -OutFile $zipPath

        try {
            Expand-Archive -LiteralPath $zipPath -DestinationPath $destDir -Force
        } catch {
            Add-Type -AssemblyName System.IO.Compression.FileSystem
            [System.IO.Compression.ZipFile]::ExtractToDirectory($zipPath, $destDir)
        }

        $env:PDO_FIREBIRD_TEST_DATABASE = 'C:\test.fdb'
        $env:PDO_FIREBIRD_TEST_DSN      = "firebird:dbname=127.0.0.1:$($env:PDO_FIREBIRD_TEST_DATABASE)"
        $env:PDO_FIREBIRD_TEST_USER     = 'SYSDBA'
        $env:PDO_FIREBIRD_TEST_PASS     = 'phpfi'

        $createUserSql = Join-Path $destDir 'create_user.sql'
        Set-Content -Path $createUserSql -Value "create user $($env:PDO_FIREBIRD_TEST_USER) password '$($env:PDO_FIREBIRD_TEST_PASS)';" -Encoding ASCII
        Add-Content -Path $createUserSql -Value 'commit;' -Encoding ASCII

        $setupSql = Join-Path $destDir 'setup.sql'
        Set-Content -Path $setupSql -Value "create database '$($env:PDO_FIREBIRD_TEST_DATABASE)' user '$($env:PDO_FIREBIRD_TEST_USER)' password '$($env:PDO_FIREBIRD_TEST_PASS)';" -Encoding ASCII
        if(-not(Test-Path pdo_firebird_db_created)) {
            & (Join-Path $destDir 'instsvc.exe') install -n TestInstance | Out-Null
            & (Join-Path $destDir 'isql') -q -i $setupSql | Out-Null
            & (Join-Path $destDir 'isql') -q -i $createUserSql -user sysdba $env:PDO_FIREBIRD_TEST_DATABASE | Out-Null
            & (Join-Path $destDir 'instsvc.exe') start -n TestInstance | Out-Null
            Set-Content -Path pdo_firebird_db_created -Value "db_created" -Encoding ASCII
        }

        Add-Path $destDir
    }
}