Skip to content

Commit 793b8c4

Browse files
Copilotjohlju
andcommitted
Add version validation for IsLedger parameter (requires SQL Server 2022+)
Co-authored-by: johlju <[email protected]>
1 parent 4b7708d commit 793b8c4

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

source/Public/New-SqlDscDatabase.ps1

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,24 @@ function New-SqlDscDatabase
266266
}
267267
}
268268

269+
# Validate IsLedger if specified (requires SQL Server 2022+)
270+
if ($PSBoundParameters.ContainsKey('IsLedger'))
271+
{
272+
if ($ServerObject.VersionMajor -lt 16)
273+
{
274+
$errorMessage = $script:localizedData.Database_IsLedgerNotSupported -f $ServerObject.InstanceName, $ServerObject.VersionMajor
275+
276+
$PSCmdlet.ThrowTerminatingError(
277+
[System.Management.Automation.ErrorRecord]::new(
278+
[System.InvalidOperationException]::new($errorMessage),
279+
'NSD0007', # cspell: disable-line
280+
[System.Management.Automation.ErrorCategory]::InvalidOperation,
281+
$IsLedger
282+
)
283+
)
284+
}
285+
}
286+
269287
# Validate source database exists when creating a snapshot
270288
if ($PSCmdlet.ParameterSetName -eq 'Snapshot')
271289
{

source/en-US/SqlServerDsc.strings.psd1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ ConvertFrom-StringData @'
358358
Database_InvalidCompatibilityLevel = The specified compatibility level '{0}' is not a valid compatibility level for the instance '{1}'.
359359
Database_InvalidCollation = The specified collation '{0}' is not a valid collation for the instance '{1}'.
360360
Database_CatalogCollationNotSupported = The parameter CatalogCollation is not supported on SQL Server instance '{0}' with version '{1}'. This parameter requires SQL Server 2019 (version 15) or later.
361+
Database_IsLedgerNotSupported = The parameter IsLedger is not supported on SQL Server instance '{0}' with version '{1}'. This parameter requires SQL Server 2022 (version 16) or later.
361362
Database_SnapshotSourceDatabaseNotFound = The source database '{0}' for the database snapshot does not exist on instance '{1}'.
362363
Database_CreatingSnapshot = Creating database snapshot '{0}' from source database '{1}'.
363364
Database_Create_ShouldProcessVerboseDescription = Creating the database '{0}' on the instance '{1}'.

tests/Unit/Public/New-SqlDscDatabase.Tests.ps1

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,17 @@ Describe 'New-SqlDscDatabase' -Tag 'Public' {
104104
}
105105

106106
It 'Should create a ledger database with IsLedger set to true' {
107-
$result = New-SqlDscDatabase -ServerObject $mockServerObject -Name 'LedgerDatabase' -IsLedger $true -Force
107+
# Create a mock server for SQL Server 2022 (version 16) which supports IsLedger
108+
$mockServerObject2022 = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Server'
109+
$mockServerObject2022 | Add-Member -MemberType 'NoteProperty' -Name 'InstanceName' -Value 'TestInstance2022' -Force
110+
$mockServerObject2022 | Add-Member -MemberType 'NoteProperty' -Name 'VersionMajor' -Value 16 -Force
111+
$mockServerObject2022 | Add-Member -MemberType 'ScriptProperty' -Name 'Databases' -Value {
112+
return @{} | Add-Member -MemberType 'ScriptMethod' -Name 'Refresh' -Value {
113+
# Mock implementation
114+
} -PassThru -Force
115+
} -Force
116+
117+
$result = New-SqlDscDatabase -ServerObject $mockServerObject2022 -Name 'LedgerDatabase' -IsLedger $true -Force
108118

109119
$result | Should -Not -BeNullOrEmpty
110120
$result.Name | Should -Be 'LedgerDatabase'
@@ -160,6 +170,16 @@ Describe 'New-SqlDscDatabase' -Tag 'Public' {
160170
$errorRecord.CategoryInfo.Category | Should -Be 'InvalidArgument'
161171
$errorRecord.CategoryInfo.TargetName | Should -Be 'InvalidCollation'
162172
}
173+
174+
It 'Should throw error when IsLedger is used on SQL Server version older than 2022' {
175+
$errorRecord = { New-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDB' -IsLedger $true -Force } |
176+
Should -Throw -ExpectedMessage '*IsLedger is not supported*' -PassThru
177+
178+
$errorRecord.Exception.Message | Should -BeLike '*IsLedger is not supported*'
179+
$errorRecord.FullyQualifiedErrorId | Should -Be 'NSD0007,New-SqlDscDatabase'
180+
$errorRecord.CategoryInfo.Category | Should -Be 'InvalidOperation'
181+
$errorRecord.CategoryInfo.TargetName | Should -Be 'True'
182+
}
163183
}
164184

165185
Context 'Parameter validation' {

0 commit comments

Comments
 (0)