Types/FirebirdDatabase.ps1

. "$PSScriptRoot/../Private/Split-FirebirdConnectionString.ps1"

class FirebirdDatabase {
    # Class properties
    [string] $Host
    [int] $Port
    [string] $Path

    [int] $PageSize
    [version] $ODSVersion

    # Default constructor
    FirebirdDatabase() {
        $this.Init(@{})
    }

    # String constructor for implicit type conversion
    FirebirdDatabase([string]$connectionString) {
        $sp = Split-FirebirdConnectionString -ConnectionString $connectionString
        $this.Init(@{ Host = $sp.Host; Port = [int]$sp.Port; Path = $sp.Path })
    }

    # Convenience constructor from hashtable
    FirebirdDatabase([hashtable]$Properties) {
        $this.Init($Properties)
    }

    # Shared initializer method
    [void] Init([hashtable]$Properties) {
        foreach ($Property in $Properties.Keys) {
            $this.$Property = $Properties.$Property
        }
    }

    # Return a string representation of the class
    [string] ToString() {
        $connectionString = $this.ConnectionString()
        if ($this.Host) {
            return "Remote Firebird Database at $connectionString"
        } else {
            return "Local Firebird Database at $connectionString (ODS $($this.ODSVersion))"
        }
    }

    # Return a string representation of the class
    [string] ConnectionString() {
        if ($this.Host) {
            if ($this.Port) {
                return "$($this.Host)/$($this.Port):$($this.Path)"
            }
            return "$($this.Host):$($this.Path)"
        }
        return $this.Path
    }
}