Public/Set-SqliteRow.ps1

function Set-SqliteRow {
  [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "", Justification = "Creates in-memory object only.")]
  [CmdletBinding()][OutputType([void])]
  param (
    [Parameter(Mandatory = $true)]
    [SQLiteDBConfig]
    $SqliteDBConfig,

    [Parameter(Mandatory = $true)]
    [string]
    $TableName,

    [Parameter(Mandatory = $true)]
    [System.Collections.IDictionary]
    $RowData,

    [Parameter()]
    [System.Collections.IDictionary]
    $ClauseData = @{},

    [Parameter()]
    [switch]
    $CaseSensitive,

    [Parameter()]
    [Microsoft.Data.Sqlite.SqliteConnection]
    $SqliteConnection,

    [Parameter()]
    [switch]
    $KeepAlive,

    [Parameter()]
    [ValidateSet('UPDATE', 'UPSERT')]
    [string]
    $OnConflict = 'UPDATE'
  )

  if ($CaseSensitive) {
    Write-Warning 'CaseSensitive is currently not implemented in SqliteHelper.SetRow(). Using default matching behavior.'
  }
  if ($OnConflict -eq 'UPSERT') {
    Write-Warning 'OnConflict=UPSERT is not yet implemented in SqliteHelper.SetRow(). Falling back to UPDATE semantics.'
  }

  $ownsConnection = $false
  if (!$PSBoundParameters.ContainsKey('SqliteConnection') -or $null -eq $SqliteConnection) {
    $SqliteConnection = [SqliteHelper]::NewConnection($SqliteDBConfig.ConnectionString)
    $ownsConnection = $true
  }

  try {
    [SqliteHelper]::SetRow($SqliteDBConfig, $TableName, [hashtable]$RowData, [hashtable]$ClauseData, $SqliteConnection)
  } finally {
    if ($ownsConnection -and !$KeepAlive) {
      [SqliteHelper]::CloseConnection($SqliteConnection)
    }
  }
}