Public/duckdb/Set-LoadMetadata.ps1

function Set-LoadMetadata {
    <#
    .SYNOPSIS
        Stores the timestamp, row count, and status after a load.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$false)] [DuckDB.NET.Data.DuckDBConnection]$Connection = $null,
        [Parameter(Mandatory)] [string]$TableName,
        [Parameter(Mandatory)] [int]$RowsLoaded,
        [ValidateSet('success','error')]
        [string]$Status = 'success',
        [string]$ErrorMessage = ''
    )

    if ($null -eq $Connection) {
        $Connection = $Script:DefaultConnection
        if ($null -eq $Connection) { throw "No active DuckDB connection. Provide -Connection or call Initialize-SQLPipeline first." }
    }

    $ts  = (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
    $err = $ErrorMessage -replace "'", "''"

    Invoke-DuckDBQuery -Connection $Connection -Query @"
        INSERT INTO _load_metadata (table_name, last_loaded, rows_loaded, status, error_msg)
        VALUES ('$TableName', TIMESTAMP '$ts', $RowsLoaded, '$Status', '$err')
        ON CONFLICT (table_name) DO UPDATE SET
            last_loaded = excluded.last_loaded,
            rows_loaded = excluded.rows_loaded,
            status = excluded.status,
            error_msg = excluded.error_msg
"@

}