Skip to content

Commit 9fbc7a5

Browse files
authored
SqlDatabase: Fix compatbility level error (#2456) (#2458)
1 parent 449a501 commit 9fbc7a5

3 files changed

Lines changed: 55 additions & 34 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414
- Fixed `Test-TargetResource` to return `$false` (instead of throwing) when
1515
the SQL script file is missing, enabling `DependsOn` scenarios where the file
1616
is created at runtime.
17+
- SqlDatabase
18+
- Fixed logic in `Set-SqlDscDatabaseProperty` so pipeline input is properly
19+
handled in the cmdlet's `Process` block. ([issue #2456](https://github.com/dsccommunity/SqlServerDsc/issues/2456))
1720

1821
### Changed
1922

source/Public/Set-SqlDscDatabaseProperty.ps1

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -676,15 +676,36 @@ function Set-SqlDscDatabaseProperty
676676
{
677677
$ConfirmPreference = 'None'
678678
}
679+
}
679680

680-
# Get the server object based on parameter set
681-
$serverInstance = if ($PSCmdlet.ParameterSetName -eq 'DatabaseObjectSet')
682-
{
683-
$DatabaseObject.Parent
684-
}
685-
else
681+
process
682+
{
683+
# Get the database object based on the parameter set
684+
switch ($PSCmdlet.ParameterSetName)
686685
{
687-
$ServerObject
686+
'ServerObjectSet'
687+
{
688+
Write-Verbose -Message ($script:localizedData.Database_Set -f $Name, $ServerObject.InstanceName)
689+
690+
$previousErrorActionPreference = $ErrorActionPreference
691+
$ErrorActionPreference = 'Stop'
692+
693+
$serverInstance = $ServerObject
694+
695+
$sqlDatabaseObject = $ServerObject |
696+
Get-SqlDscDatabase -Name $Name -Refresh:$Refresh -ErrorAction 'Stop'
697+
698+
$ErrorActionPreference = $previousErrorActionPreference
699+
}
700+
701+
'DatabaseObjectSet'
702+
{
703+
Write-Verbose -Message ($script:localizedData.Database_Set -f $DatabaseObject.Name, $DatabaseObject.Parent.InstanceName)
704+
705+
$serverInstance = $DatabaseObject.Parent
706+
707+
$sqlDatabaseObject = $DatabaseObject
708+
}
688709
}
689710

690711
# Validate compatibility level if specified
@@ -724,33 +745,6 @@ function Set-SqlDscDatabaseProperty
724745
)
725746
}
726747
}
727-
}
728-
729-
process
730-
{
731-
# Get the database object based on the parameter set
732-
switch ($PSCmdlet.ParameterSetName)
733-
{
734-
'ServerObjectSet'
735-
{
736-
Write-Verbose -Message ($script:localizedData.Database_Set -f $Name, $ServerObject.InstanceName)
737-
738-
$previousErrorActionPreference = $ErrorActionPreference
739-
$ErrorActionPreference = 'Stop'
740-
741-
$sqlDatabaseObject = $ServerObject |
742-
Get-SqlDscDatabase -Name $Name -Refresh:$Refresh -ErrorAction 'Stop'
743-
744-
$ErrorActionPreference = $previousErrorActionPreference
745-
}
746-
747-
'DatabaseObjectSet'
748-
{
749-
Write-Verbose -Message ($script:localizedData.Database_Set -f $DatabaseObject.Name, $DatabaseObject.Parent.InstanceName)
750-
751-
$sqlDatabaseObject = $DatabaseObject
752-
}
753-
}
754748

755749
# Remove common parameters and function-specific parameters, leaving only database properties
756750
$boundParameters = Remove-CommonParameter -Hashtable $PSBoundParameters

tests/Integration/Commands/Set-SqlDscDatabaseProperty.Integration.Tests.ps1

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,30 @@ Describe 'Set-SqlDscDatabaseProperty' -Tag @('Integration_SQL2017', 'Integration
192192
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
193193
$updatedDb.RecoveryModel | Should -Be 'BulkLogged'
194194
}
195+
196+
It 'Should set compatibility level successfully using pipeline database object' {
197+
# Use Version140 which is supported on all tested versions (SQL 2017+)
198+
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
199+
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version140' -Force -ErrorAction 'Stop'
200+
201+
# Verify the change
202+
$updatedDb140 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
203+
$updatedDb140.CompatibilityLevel | Should -Be 'Version140'
204+
}
205+
206+
It 'Should change compatibility level successfully using pipeline database object' {
207+
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
208+
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version130' -Force -ErrorAction 'Stop'
209+
210+
# Verify Version130 is set
211+
$updatedDb140 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
212+
$updatedDb140.CompatibilityLevel | Should -Be 'Version130'
213+
214+
# Change to Version140 which is supported on all tested versions (SQL 2017+)
215+
$databaseObject | Set-SqlDscDatabaseProperty -CompatibilityLevel 'Version140' -Force -ErrorAction 'Stop'
216+
$updatedDb160 = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
217+
$updatedDb160.CompatibilityLevel | Should -Be 'Version140'
218+
}
195219
}
196220

197221
Context 'When using the Refresh parameter' {

0 commit comments

Comments
 (0)