Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed `Test-TargetResource` to return `$false` (instead of throwing) when
the SQL script file is missing, enabling `DependsOn` scenarios where the file
is created at runtime.
- SqlDatabase
- Fixed logic in `Set-SqlDscDatabaseProperty` so pipeline input is properly
handled in the cmdlet's `Process` block. ([issue #2456](https://github.com/dsccommunity/SqlServerDsc/issues/2456))

### Changed

Expand Down
62 changes: 28 additions & 34 deletions source/Public/Set-SqlDscDatabaseProperty.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -676,15 +676,36 @@ function Set-SqlDscDatabaseProperty
{
$ConfirmPreference = 'None'
}
}

# Get the server object based on parameter set
$serverInstance = if ($PSCmdlet.ParameterSetName -eq 'DatabaseObjectSet')
{
$DatabaseObject.Parent
}
else
process
{
# Get the database object based on the parameter set
switch ($PSCmdlet.ParameterSetName)
{
$ServerObject
'ServerObjectSet'
{
Write-Verbose -Message ($script:localizedData.Database_Set -f $Name, $ServerObject.InstanceName)

$previousErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'Stop'

$serverInstance = $ServerObject

$sqlDatabaseObject = $ServerObject |
Get-SqlDscDatabase -Name $Name -Refresh:$Refresh -ErrorAction 'Stop'

$ErrorActionPreference = $previousErrorActionPreference
}

'DatabaseObjectSet'
{
Write-Verbose -Message ($script:localizedData.Database_Set -f $DatabaseObject.Name, $DatabaseObject.Parent.InstanceName)

$serverInstance = $DatabaseObject.Parent

$sqlDatabaseObject = $DatabaseObject
}
}

# Validate compatibility level if specified
Expand Down Expand Up @@ -724,33 +745,6 @@ function Set-SqlDscDatabaseProperty
)
}
}
}

process
{
# Get the database object based on the parameter set
switch ($PSCmdlet.ParameterSetName)
{
'ServerObjectSet'
{
Write-Verbose -Message ($script:localizedData.Database_Set -f $Name, $ServerObject.InstanceName)

$previousErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'Stop'

$sqlDatabaseObject = $ServerObject |
Get-SqlDscDatabase -Name $Name -Refresh:$Refresh -ErrorAction 'Stop'

$ErrorActionPreference = $previousErrorActionPreference
}

'DatabaseObjectSet'
{
Write-Verbose -Message ($script:localizedData.Database_Set -f $DatabaseObject.Name, $DatabaseObject.Parent.InstanceName)

$sqlDatabaseObject = $DatabaseObject
}
}

# Remove common parameters and function-specific parameters, leaving only database properties
$boundParameters = Remove-CommonParameter -Hashtable $PSBoundParameters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,30 @@ Describe 'Set-SqlDscDatabaseProperty' -Tag @('Integration_SQL2017', 'Integration
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb.RecoveryModel | Should -Be 'BulkLogged'
}

It 'Should set compatibility level successfully when passing database object down pipeline' {
# Use Version140 which is supported on all tested versions (SQL 2017+)
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version140' -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb140 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb140.CompatibilityLevel | Should -Be 'Version140'
}

It 'Should change compatibility level successfully when passing database object down pipeline' {
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version130' -Force -ErrorAction 'Stop'

# Verify Version130 is set
$updatedDb140 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb140.CompatibilityLevel | Should -Be 'Version130'

# Change to Version140 which is supported on all tested versions (SQL 2017+)
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version140' -Force -ErrorAction 'Stop'
$updatedDb160 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb160.CompatibilityLevel | Should -Be 'Version140'
}
}

Context 'When using the Refresh parameter' {
Expand Down
Loading