Managers/SqlManager.ps1

. ($PSScriptRoot + "\Core.ps1")

function CheckAndCreateTable([string]$SqlServerInstance,[string]$SqlServerDatabase,[string]$SqlServerSchema,[string]$SqlServerTable)
{
    $databaseExists=$(Test-SqlDatabase -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase)
    if($databaseExists -eq $false)
    {
        Write-Host "Database $SqlServerDatabase on the instance $SqlServerInstance doesn't exist please create it"
    }
    else
    {
        $tableExists=Test-SQLTable -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable
        if ($tableExists -eq $false)
        {
            Write-Verbose "Table doesn't exist creating"
            New-SQLTable -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable
            New-SqlColumn -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -ColumnName "Key" -Type "VARCHAR(100)"
            New-SqlColumn -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -ColumnName "Value" -Type "VARCHAR(1000)"
            New-SqlColumn -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -ColumnName "Category" -Type "VARCHAR(1000)"
        }
    }
}

function Set-ConfigurationSqlSource()
{
    [cmdletbinding()]
    param ([string]$SqlServerInstance,[string]$SqlServerDatabase,[string]$SqlServerSchema="dbo",[string]$SqlServerTable)

    CheckAndCreateTable -SqlServerInstance $SqlServerInstance -SqlServerDatabase $SqlServerDatabase -SqlServerSchema $SqlServerSchema -SqlServerTable $SqlServerTable

    $Object = New-Object PSObject                                       
    $Object | add-member Noteproperty Mode       "SQL"                 
    $Object | add-member Noteproperty SqlServerInstance   "$SqlServerInstance"
    $Object | add-member Noteproperty SqlServerDatabase   "$SqlServerDatabase"
    $Object | add-member Noteproperty SqlServerSchema     "$SqlServerSchema"
    $Object | add-member Noteproperty SqlServerTable      "$SqlServerTable"

    $conf=ConvertTo-Json -InputObject $Object
    
    SetConfiguration $conf
    CheckAndCreateTable -SqlServerInstance $SqlServerInstance -SqlServerDatabase $SqlServerDatabase -SqlServerSchema $SqlServerSchema -SqlServerTable $SqlServerTable
}

function GetSQLConfigurationAll()
{
    [cmdletbinding()]
    param ([string]$SqlInstance,[string]$DatabaseName,[string]$SchemaName,[string]$TableName)

    $query="SELECT [Key], [Value], [Category] FROM [$SchemaName].[$TableName]"
    $result=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query    -Verbose:$VerbosePreference
    $objectList=@()
    foreach($item in $result)
    {
        $object = New-Object �TypeName PSObject
        $object | Add-Member �MemberType NoteProperty �Name Key �Value $item.Key
        $object | Add-Member �MemberType NoteProperty �Name Value �Value $item.Value
        $object | Add-Member �MemberType NoteProperty �Name Category �Value $item.Category
        $objectList+=$object
    }
    return $objectList
}

function GetSQLValue()
{
    [cmdletbinding()]
    param ([string]$SqlInstance,[string]$DatabaseName,[string]$SchemaName,[string]$TableName,[string]$Key)

    if ($key -eq "")
    {
        $result=GetSQLConfigurationAll -SqlInstance $SqlInstance -DatabaseName $DatabaseName -SchemaName $SchemaName -TableName $TableName -Verbose:$VerbosePreference
    }
    else
    {
        $query="SELECT [Value] FROM [$SchemaName].[$TableName] WHERE [Key]='$Key'"
        $queryresult=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query    -Verbose:$VerbosePreference
        $result=$queryresult.value

    }
    return $result
}

function SetSQLValue()
{
    [cmdletbinding()]
    param ([string]$SqlInstance,[string]$DatabaseName,[string]$SchemaName, [string]$TableName,[string]$Key,[string]$Value,[string]$category)
    
    $currentValue=GetSQLValue -SqlInstance $SqlInstance -DatabaseName $DatabaseName -SchemaName $SchemaName -TableName $TableName -Key $Key
    if ($currentValue -eq $null) {
        $query="INSERT INTO [$SchemaName].[$TableName]([Key],[Value],[Category]) VALUES('$Key','$Value','$category')"
        $result=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query    -Verbose:$VerbosePreference
    }
    else {
        $query="UPDATE [$SchemaName].[$TableName] SET [Value] ='$Value',[Category]='$category' WHERE [Key]='$Key'"     
        $result=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query    -Verbose:$VerbosePreference
    }
}


function ClearConfigurationByKeySQL()
{
    [cmdletbinding()]
    param ([string]$SqlInstance,[string]$DatabaseName,[string]$SchemaName, [string]$TableName,[string]$Key)

      $query="DELETE [$SchemaName].[$TableName] WHERE [Key]='$Key'"
      $result=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query -Verbose:$VerbosePreference

}

function ClearConfigurationByCategorySQL()
{
    [cmdletbinding()]
    param ([string]$SqlInstance,[string]$DatabaseName,[string]$SchemaName, [string]$TableName,[string]$Category)

      $query="DELETE [$SchemaName].[$TableName] WHERE [Category]='$Category'"
      $result=Invoke-SQLQuery -SqlInstance $SqlInstance -DatabaseName $DatabaseName -Query $query    -Verbose:$VerbosePreference
}