Skip to content

Commit 9ccc5df

Browse files
committed
Update parameter descriptions and usage for IsPrimaryFile in New-SqlDscDataFile and related tests
1 parent 3dbc133 commit 9ccc5df

12 files changed

+151
-36
lines changed

source/Classes/002.DatabaseFileSpec.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
If not specified, defaults to KB.
3434
3535
.PARAMETER IsPrimaryFile
36-
Specifies whether this file is the primary file in the PRIMARY file group.
36+
Specifies that this file is the primary file in the PRIMARY file group.
3737
Only one file in the PRIMARY file group should be marked as the primary file.
3838
This property is typically used for the first file in the PRIMARY file group.
3939

source/Public/New-SqlDscDataFile.ps1

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
DatabaseFileSpec object.
5252
5353
.PARAMETER IsPrimaryFile
54-
Specifies whether this data file is the primary file in the PRIMARY filegroup.
54+
Specifies that this data file is the primary file in the PRIMARY filegroup.
5555
Only valid when used with the -AsSpec parameter to create a DatabaseFileSpec
5656
object.
5757
@@ -94,7 +94,7 @@
9494
or passed to New-SqlDscDatabase.
9595
9696
.EXAMPLE
97-
$dataFileSpec = New-SqlDscDataFile -Name 'MyDB_Primary' -FileName 'D:\SQLData\MyDB.mdf' -Size 102400 -MaxSize 5242880 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile $true -AsSpec
97+
$dataFileSpec = New-SqlDscDataFile -Name 'MyDB_Primary' -FileName 'D:\SQLData\MyDB.mdf' -Size 102400 -MaxSize 5242880 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile -AsSpec
9898
9999
Creates a DatabaseFileSpec object with all properties set directly via parameters.
100100
@@ -152,7 +152,7 @@ function New-SqlDscDataFile
152152
$GrowthType,
153153

154154
[Parameter(ParameterSetName = 'AsSpec')]
155-
[System.Boolean]
155+
[System.Management.Automation.SwitchParameter]
156156
$IsPrimaryFile,
157157

158158
[Parameter(ParameterSetName = 'Standard')]
@@ -195,14 +195,32 @@ function New-SqlDscDataFile
195195
$fileSpec.GrowthType = $GrowthType
196196
}
197197

198-
if ($PSBoundParameters.ContainsKey('IsPrimaryFile'))
198+
if ($IsPrimaryFile.IsPresent)
199199
{
200-
$fileSpec.IsPrimaryFile = $IsPrimaryFile
200+
$fileSpec.IsPrimaryFile = $true
201201
}
202202

203203
return $fileSpec
204204
}
205205

206+
# Validate that primary files can only be in the PRIMARY filegroup
207+
if ($PSCmdlet.ParameterSetName -in @('FromSpec'))
208+
{
209+
$isPrimary = $null -ne $DataFileSpec -and $DataFileSpec.IsPrimaryFile
210+
211+
if ($isPrimary -and $FileGroup.Name -ne 'PRIMARY')
212+
{
213+
$PSCmdlet.ThrowTerminatingError(
214+
[System.Management.Automation.ErrorRecord]::new(
215+
($script:localizedData.DataFile_PrimaryFileMustBeInPrimaryFileGroup),
216+
'NSDDF0003',
217+
[System.Management.Automation.ErrorCategory]::InvalidArgument,
218+
$FileGroup
219+
)
220+
)
221+
}
222+
}
223+
206224
# Determine the data file name based on parameter set
207225
$dataFileName = if ($PSCmdlet.ParameterSetName -eq 'FromSpec')
208226
{
@@ -223,8 +241,8 @@ function New-SqlDscDataFile
223241
{
224242
Write-Verbose -Message (' Creating data file: {0}' -f $DataFileSpec.Name)
225243

226-
# Use the spec object's method to create the SMO DataFile
227-
$dataFileObject = $DataFileSpec.ToSmoDataFile($FileGroup)
244+
# Convert the spec object to SMO DataFile
245+
$dataFileObject = ConvertTo-SqlDscDataFile -FileGroupObject $FileGroup -DataFileSpec $DataFileSpec
228246
}
229247
else
230248
{

source/Public/New-SqlDscDatabase.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
.EXAMPLE
8585
$serverObject = Connect-SqlDscDatabaseEngine -InstanceName 'MyInstance'
8686
87-
$primaryFile = New-SqlDscDataFile -Name 'MyDatabase_Primary' -FileName 'D:\SQLData\MyDatabase.mdf' -Size 102400 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile $true -AsSpec
87+
$primaryFile = New-SqlDscDataFile -Name 'MyDatabase_Primary' -FileName 'D:\SQLData\MyDatabase.mdf' -Size 102400 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile -AsSpec
8888
$primaryFileGroup = New-SqlDscFileGroup -Name 'PRIMARY' -Files @($primaryFile) -IsDefault $true -AsSpec
8989
9090
$secondaryFile = New-SqlDscDataFile -Name 'MyDatabase_Secondary' -FileName 'E:\SQLData\MyDatabase.ndf' -Size 204800 -AsSpec

source/Public/New-SqlDscFileGroup.ps1

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
Creates a DatabaseFileGroupSpec object that can be passed to New-SqlDscDatabase.
7171
7272
.EXAMPLE
73-
$primaryFile = New-SqlDscDataFile -Name 'MyDB_Primary' -FileName 'D:\SQLData\MyDB.mdf' -Size 102400 -IsPrimaryFile $true -AsSpec
73+
$primaryFile = New-SqlDscDataFile -Name 'MyDB_Primary' -FileName 'D:\SQLData\MyDB.mdf' -Size 102400 -IsPrimaryFile -AsSpec
7474
$fileGroupSpec = New-SqlDscFileGroup -Name 'PRIMARY' -Files @($primaryFile) -IsDefault $true -AsSpec
7575
7676
Creates a DatabaseFileGroupSpec object with files and properties set directly via parameters.
@@ -110,11 +110,11 @@ function New-SqlDscFileGroup
110110
$Files,
111111

112112
[Parameter(ParameterSetName = 'AsSpec')]
113-
[System.Boolean]
113+
[System.Management.Automation.SwitchParameter]
114114
$ReadOnly,
115115

116116
[Parameter(ParameterSetName = 'AsSpec')]
117-
[System.Boolean]
117+
[System.Management.Automation.SwitchParameter]
118118
$IsDefault,
119119

120120
[Parameter(ParameterSetName = 'AsSpec')]
@@ -194,14 +194,14 @@ function New-SqlDscFileGroup
194194
$fileGroupObject.Files = $Files
195195
}
196196

197-
if ($PSBoundParameters.ContainsKey('ReadOnly'))
197+
if ($ReadOnly.IsPresent)
198198
{
199-
$fileGroupObject.ReadOnly = $ReadOnly
199+
$fileGroupObject.ReadOnly = $true
200200
}
201201

202-
if ($PSBoundParameters.ContainsKey('IsDefault'))
202+
if ($IsDefault.IsPresent)
203203
{
204-
$fileGroupObject.IsDefault = $IsDefault
204+
$fileGroupObject.IsDefault = $true
205205
}
206206
}
207207
else

source/en-US/SqlServerDsc.strings.psd1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ ConvertFrom-StringData @'
381381
DataFile_Create_ShouldProcessConfirmation = Are you sure you want to create the data file '{0}'? (NSDDF0002)
382382
# This string shall not end with full stop (.) since it is used as a title of ShouldProcess messages.
383383
DataFile_Create_ShouldProcessCaption = Create data file for filegroup
384+
DataFile_PrimaryFileMustBeInPrimaryFileGroup = The primary file must reside in the PRIMARY filegroup. (NSDDF0003)
384385
385386
## Set-SqlDscDatabaseProperty
386387
Database_Set = Setting properties of database '{0}' on instance '{1}'. (SSDDP0001)

tests/Integration/Commands/ConvertTo-SqlDscDataFile.Integration.Tests.ps1

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,12 @@ Describe 'ConvertTo-SqlDscDataFile' -Tag @('Integration_SQL2017', 'Integration_S
117117
}
118118

119119
It 'Should convert a DatabaseFileSpec with IsPrimaryFile to a DataFile object' {
120-
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\Data\TestFile.mdf' -IsPrimaryFile $true -AsSpec
120+
# IsPrimaryFile can only be set for files in the PRIMARY filegroup
121+
$primaryFileGroup = $script:testDatabase.FileGroups['PRIMARY']
121122

122-
$result = ConvertTo-SqlDscDataFile -FileGroupObject $script:mockFileGroup -DataFileSpec $fileSpec
123+
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\Data\TestFile.mdf' -IsPrimaryFile -AsSpec
124+
125+
$result = ConvertTo-SqlDscDataFile -FileGroupObject $primaryFileGroup -DataFileSpec $fileSpec
123126

124127
$result | Should -Not -BeNullOrEmpty
125128
$result.IsPrimaryFile | Should -Be $true

tests/Integration/Commands/ConvertTo-SqlDscFileGroup.Integration.Tests.ps1

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag @('Integration_SQL2017', 'Integration_
9393

9494
It 'Should convert a DatabaseFileGroupSpec with ReadOnly to a FileGroup object' {
9595
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\Data\TestFile.ndf' -AsSpec
96-
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec) -ReadOnly $true -AsSpec
96+
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec) -ReadOnly -AsSpec
9797

9898
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $script:testDatabase -FileGroupSpec $fileGroupSpec
9999

@@ -103,18 +103,18 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag @('Integration_SQL2017', 'Integration_
103103

104104
It 'Should convert a DatabaseFileGroupSpec with IsDefault to a FileGroup object' {
105105
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\Data\TestFile.ndf' -AsSpec
106-
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec) -IsDefault $true -AsSpec
106+
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec) -IsDefault -AsSpec
107107

108108
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $script:testDatabase -FileGroupSpec $fileGroupSpec
109109

110110
$result | Should -Not -BeNullOrEmpty
111111
$result.IsDefault | Should -Be $true
112112
}
113113

114-
It 'Should convert a DatabaseFileGroupSpec with all optional properties to a FileGroup object' {
114+
It 'Should convert a DatabaseFileGroupSpec with multiple file properties to a FileGroup object' {
115115
$fileSpec1 = New-SqlDscDataFile -Name 'TestFile1' -FileName 'C:\Data\TestFile1.ndf' -Size 100 -MaxSize 1000 -AsSpec
116116
$fileSpec2 = New-SqlDscDataFile -Name 'TestFile2' -FileName 'C:\Data\TestFile2.ndf' -Growth 10 -GrowthType 'Percent' -AsSpec
117-
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec1, $fileSpec2) -ReadOnly $false -IsDefault $false -AsSpec
117+
$fileGroupSpec = New-SqlDscFileGroup -Name 'TestFileGroup' -Files @($fileSpec1, $fileSpec2) -AsSpec
118118

119119
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $script:testDatabase -FileGroupSpec $fileGroupSpec
120120

@@ -125,14 +125,12 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag @('Integration_SQL2017', 'Integration_
125125
$result.Files[0].MaxSize | Should -Be 1000
126126
$result.Files[1].Growth | Should -Be 10
127127
$result.Files[1].GrowthType | Should -Be 'Percent'
128-
$result.ReadOnly | Should -Be $false
129-
$result.IsDefault | Should -Be $false
130128
}
131129

132130
It 'Should preserve file properties when converting FileGroup with complex file configurations' {
133-
$primaryFile = New-SqlDscDataFile -Name 'PrimaryFile' -FileName 'C:\Data\Primary.mdf' -IsPrimaryFile $true -Size 200 -MaxSize 2000 -Growth 20 -GrowthType 'KB' -AsSpec
131+
$primaryFile = New-SqlDscDataFile -Name 'PrimaryFile' -FileName 'C:\Data\Primary.mdf' -IsPrimaryFile -Size 200 -MaxSize 2000 -Growth 20 -GrowthType 'KB' -AsSpec
134132
$secondaryFile = New-SqlDscDataFile -Name 'SecondaryFile' -FileName 'C:\Data\Secondary.ndf' -Size 100 -MaxSize 1000 -Growth 10 -GrowthType 'Percent' -AsSpec
135-
$fileGroupSpec = New-SqlDscFileGroup -Name 'ComplexFileGroup' -Files @($primaryFile, $secondaryFile) -AsSpec
133+
$fileGroupSpec = New-SqlDscFileGroup -Name 'PRIMARY' -Files @($primaryFile, $secondaryFile) -AsSpec
136134

137135
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $script:testDatabase -FileGroupSpec $fileGroupSpec
138136

tests/Integration/Commands/New-SqlDscDatabase.Integration.Tests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ Describe 'New-SqlDscDatabase' -Tag @('Integration_SQL2017', 'Integration_SQL2019
181181

182182
It 'Should create a database with custom file groups and data files' {
183183
# Create PRIMARY filegroup specification with data file using -AsSpec parameters
184-
$primaryFile = New-SqlDscDataFile -Name ($script:testDatabaseWithFileGroups + '_Primary') -FileName (Join-Path -Path $script:dataDirectory -ChildPath ($script:testDatabaseWithFileGroups + '_Primary.mdf')) -IsPrimaryFile $true -AsSpec
184+
$primaryFile = New-SqlDscDataFile -Name ($script:testDatabaseWithFileGroups + '_Primary') -FileName (Join-Path -Path $script:dataDirectory -ChildPath ($script:testDatabaseWithFileGroups + '_Primary.mdf')) -IsPrimaryFile -AsSpec
185185
$primaryFileGroup = New-SqlDscFileGroup -Name 'PRIMARY' -Files @($primaryFile) -AsSpec
186186

187187
# Create a secondary filegroup specification with data file using -AsSpec parameters

tests/Unit/Public/ConvertTo-SqlDscDataFile.Tests.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Describe 'ConvertTo-SqlDscDataFile' -Tag 'Public' {
8181
param ($mockFileGroup)
8282

8383
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\SQLData\TestFile.mdf' `
84-
-Size 102400 -MaxSize 512000 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile $true -AsSpec
84+
-Size 102400 -MaxSize 512000 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile -AsSpec
8585

8686
$result = ConvertTo-SqlDscDataFile -FileGroupObject $mockFileGroup -DataFileSpec $fileSpec
8787

@@ -158,7 +158,7 @@ Describe 'ConvertTo-SqlDscDataFile' -Tag 'Public' {
158158
} -ScriptBlock {
159159
param ($mockFileGroup)
160160

161-
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\SQLData\TestFile.mdf' -IsPrimaryFile $true -AsSpec
161+
$fileSpec = New-SqlDscDataFile -Name 'TestFile' -FileName 'C:\SQLData\TestFile.mdf' -IsPrimaryFile -AsSpec
162162

163163
$result = ConvertTo-SqlDscDataFile -FileGroupObject $mockFileGroup -DataFileSpec $fileSpec
164164

tests/Unit/Public/ConvertTo-SqlDscFileGroup.Tests.ps1

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag 'Public' {
7979
} -ScriptBlock {
8080
param ($mockDatabase)
8181

82-
$fileGroupSpec = New-SqlDscFileGroup -Name 'READONLY_FG' -ReadOnly $true -AsSpec
82+
$fileGroupSpec = New-SqlDscFileGroup -Name 'READONLY_FG' -ReadOnly -AsSpec
8383

8484
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $mockDatabase -FileGroupSpec $fileGroupSpec
8585

@@ -94,7 +94,7 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag 'Public' {
9494
} -ScriptBlock {
9595
param ($mockDatabase)
9696

97-
$fileGroupSpec = New-SqlDscFileGroup -Name 'PRIMARY' -IsDefault $true -AsSpec
97+
$fileGroupSpec = New-SqlDscFileGroup -Name 'PRIMARY' -IsDefault -AsSpec
9898

9999
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $mockDatabase -FileGroupSpec $fileGroupSpec
100100

@@ -149,18 +149,17 @@ Describe 'ConvertTo-SqlDscFileGroup' -Tag 'Public' {
149149
param ($mockDatabase)
150150

151151
$primaryFile = New-SqlDscDataFile -Name 'PrimaryFile' -FileName 'C:\SQLData\Primary.mdf' `
152-
-Size 102400 -MaxSize 512000 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile $true -AsSpec
152+
-Size 102400 -MaxSize 512000 -Growth 10240 -GrowthType 'KB' -IsPrimaryFile -AsSpec
153153

154154
$secondaryFile = New-SqlDscDataFile -Name 'SecondaryFile' -FileName 'C:\SQLData\Secondary.ndf' `
155155
-Size 204800 -MaxSize 1024000 -Growth 20480 -GrowthType 'KB' -AsSpec
156156

157157
$fileGroupSpec = New-SqlDscFileGroup -Name 'PRIMARY' -Files @($primaryFile, $secondaryFile) `
158-
-ReadOnly $false -IsDefault $true -AsSpec
158+
-IsDefault -AsSpec
159159

160160
$result = ConvertTo-SqlDscFileGroup -DatabaseObject $mockDatabase -FileGroupSpec $fileGroupSpec
161161

162162
$result.Name | Should -Be 'PRIMARY'
163-
$result.ReadOnly | Should -Be $false
164163
$result.IsDefault | Should -Be $true
165164
$result.Files.Count | Should -Be 2
166165
$result.Files[0].Name | Should -Be 'PrimaryFile'

0 commit comments

Comments
 (0)