Private/duckdb/Invoke-BufferedWrite.ps1
|
function Invoke-BufferedWrite { <# .SYNOPSIS Internal helper: writes a buffer to DuckDB (table creation + schema sync + repair + upsert). #> [CmdletBinding()] param( [Parameter(Mandatory)] [DuckDB.NET.Data.DuckDBConnection]$Connection, [Parameter(Mandatory)] [string]$TableName, [Parameter(Mandatory)] $Data, [string[]]$PKColumns = @() ) if ($Data.Count -eq 0) { return } # 1. Create table if it does not exist Initialize-DuckDBTable -Connection $Connection -TableName $TableName ` -SampleRow $Data[0] -PKColumns $PKColumns # 2. Extend schema with new columns Sync-DuckDBSchema -Connection $Connection -TableName $TableName -SampleRow $Data[0] # 3. Normalize missing columns $expectedCols = Get-DuckDBColumns -Connection $Connection -TableName $TableName $normalizedData = $Data | ForEach-Object { Repair-DuckDBRow -Row $_ -ExpectedColumns $expectedCols } # 4. UPSERT or INSERT Invoke-DuckDBUpsert -Connection $Connection -TableName $TableName ` -Data $normalizedData -PKColumns $PKColumns } |