Skip to content

Commit be399cd

Browse files
authored
feat: Configurable database-version table-name (#449)
* Configurable database-version table-name * fix: use param
1 parent 6cfcc31 commit be399cd

2 files changed

Lines changed: 22 additions & 17 deletions

File tree

src/Arcus.Scripting.Sql/Arcus.Scripting.Sql.psm1

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ class DatabaseVersion : System.IComparable {
8484
8585
.Parameter DatabaseSchema
8686
The database schema to use when running SQL commands on the target database.
87+
88+
.Parameter DatabaseVersionTable
89+
The name of the table in the database that keeps track of the applied database-migrations.
8790
#>
8891
function Invoke-AzSqlDatabaseMigration {
8992
param(
@@ -94,10 +97,11 @@ function Invoke-AzSqlDatabaseMigration {
9497
[Parameter(Mandatory = $false)][switch] $TrustServerCertificate,
9598
[Parameter(Mandatory = $false)][string] $ScriptsFolder = "$PSScriptRoot/sqlScripts",
9699
[Parameter(Mandatory = $false)][string] $ScriptsFileFilter = "*.sql",
97-
[Parameter(Mandatory = $false)][string] $DatabaseSchema = "dbo"
100+
[Parameter(Mandatory = $false)][string] $DatabaseSchema = "dbo",
101+
[Parameter(Mandatory = $false)][string] $DatabaseVersionTable = "DatabaseVersion"
98102
)
99103

100-
. $PSScriptRoot\Scripts\Invoke-AzSqlDatabaseMigration.ps1 -ServerName $ServerName -DatabaseName $DatabaseName -UserName $UserName -Password $Password -TrustServerCertificate $TrustServerCertificate -ScriptsFolder $ScriptsFolder -ScriptsFileFilter $ScriptsFileFilter -DatabaseSchema $DatabaseSchema
104+
. $PSScriptRoot\Scripts\Invoke-AzSqlDatabaseMigration.ps1 -ServerName $ServerName -DatabaseName $DatabaseName -UserName $UserName -Password $Password -TrustServerCertificate $TrustServerCertificate -ScriptsFolder $ScriptsFolder -ScriptsFileFilter $ScriptsFileFilter -DatabaseSchema $DatabaseSchema -DatabaseVersionTable $DatabaseVersionTable
101105
}
102106

103107
Export-ModuleMember -Function Invoke-AzSqlDatabaseMigration

src/Arcus.Scripting.Sql/Scripts/Invoke-AzSqlDatabaseMigration.ps1

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ param(
66
[Parameter(Mandatory = $false)][bool] $TrustServerCertificate = $false,
77
[Parameter(Mandatory = $false)][string] $ScriptsFolder = "$PSScriptRoot/sqlScripts",
88
[Parameter(Mandatory = $false)][string] $ScriptsFileFilter = "*.sql",
9-
[Parameter(Mandatory = $false)][string] $DatabaseSchema = "dbo"
9+
[Parameter(Mandatory = $false)][string] $DatabaseSchema = "dbo",
10+
[Parameter(Mandatory = $false)][string] $DatabaseVersionTable = "DatabaseVersion"
1011
)
1112

1213
Write-Verbose "Looking for SQL scripts in folder: $ScriptsFolder..."
@@ -51,41 +52,41 @@ function Get-SqlScriptFileText([string] $scriptPath, [string] $fileName) {
5152

5253
$params = Create-DbParams $DatabaseName $ServerName $UserName $Password $TrustServerCertificate
5354

54-
$createDatabaseVersionTable = "IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DatabaseVersion' AND TABLE_SCHEMA = '$DatabaseSchema' ) " +
55+
$createDatabaseVersionTable = "IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '$DatabaseVersionTable' AND TABLE_SCHEMA = '$DatabaseSchema' ) " +
5556
"BEGIN " +
56-
"CREATE TABLE [$DatabaseSchema].[DatabaseVersion] " +
57+
"CREATE TABLE [$DatabaseSchema].[$DatabaseVersionTable] " +
5758
"( " +
5859
" [MajorVersionNumber] INT NOT NULL, " +
5960
" [MinorVersionNumber] INT NOT NULL, " +
6061
" [PatchVersionNumber] INT NOT NULL, " +
6162
" [MigrationDescription] [nvarchar](256) NOT NULL, " +
6263
" [MigrationDate] DATETIME NOT NULL " +
63-
" CONSTRAINT [PK_DatabaseVersion] PRIMARY KEY CLUSTERED ([MajorVersionNumber],[MinorVersionNumber],[PatchVersionNumber]) " +
64+
" CONSTRAINT [PK_$DatabaseVersionTable] PRIMARY KEY CLUSTERED ([MajorVersionNumber],[MinorVersionNumber],[PatchVersionNumber]) " +
6465
" WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) " +
6566
") " +
6667
"END " +
6768
"ELSE " +
6869
"BEGIN " +
69-
" IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'DatabaseVersion' AND COLUMN_NAME = 'CurrentVersionNumber' ) " +
70+
" IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$DatabaseVersionTable' AND COLUMN_NAME = 'CurrentVersionNumber' ) " +
7071
" BEGIN " +
71-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] " +
72+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] " +
7273
" ADD [MajorVersionNumber] INT NULL, " +
7374
" [MinorVersionNumber] INT NULL, " +
7475
" [PatchVersionNumber] INT NULL, " +
7576
" [MigrationDate] DATETIME NULL " +
76-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] DROP CONSTRAINT [PKDatabaseVersion] " +
77-
" EXEC ('UPDATE [$DatabaseSchema].[DatabaseVersion] SET MajorVersionNumber = CurrentVersionNumber, MinorVersionNumber = 0, PatchVersionNumber = 0') " +
78-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] ALTER COLUMN [MajorVersionNumber] INT NOT NULL " +
79-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] ALTER COLUMN [MinorVersionNumber] INT NOT NULL " +
80-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] ALTER COLUMN [PatchVersionNumber] INT NOT NULL " +
81-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] DROP COLUMN [CurrentVersionNumber] " +
82-
" ALTER TABLE [$DatabaseSchema].[DatabaseVersion] ADD CONSTRAINT [PK_DatabaseVersion] PRIMARY KEY CLUSTERED ([MajorVersionNumber],[MinorVersionNumber],[PatchVersionNumber]) " +
77+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] DROP CONSTRAINT [PKDatabaseVersion] " +
78+
" EXEC ('UPDATE [$DatabaseSchema].[$DatabaseVersionTable] SET MajorVersionNumber = CurrentVersionNumber, MinorVersionNumber = 0, PatchVersionNumber = 0') " +
79+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] ALTER COLUMN [MajorVersionNumber] INT NOT NULL " +
80+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] ALTER COLUMN [MinorVersionNumber] INT NOT NULL " +
81+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] ALTER COLUMN [PatchVersionNumber] INT NOT NULL " +
82+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] DROP COLUMN [CurrentVersionNumber] " +
83+
" ALTER TABLE [$DatabaseSchema].[$DatabaseVersionTable] ADD CONSTRAINT [PK_$DatabaseVersionTable] PRIMARY KEY CLUSTERED ([MajorVersionNumber],[MinorVersionNumber],[PatchVersionNumber]) " +
8384
" END " +
8485
"END"
8586

8687
Execute-DbCommand $params $createDatabaseVersionTable
8788

88-
$getCurrentDbVersionQuery = "SELECT TOP 1 MajorVersionNumber, MinorVersionNumber, PatchVersionNumber FROM [$DatabaseSchema].[DatabaseVersion] ORDER BY MajorVersionNumber DESC, MinorVersionNumber DESC, PatchVersionNumber DESC"
89+
$getCurrentDbVersionQuery = "SELECT TOP 1 MajorVersionNumber, MinorVersionNumber, PatchVersionNumber FROM [$DatabaseSchema].[$DatabaseVersionTable] ORDER BY MajorVersionNumber DESC, MinorVersionNumber DESC, PatchVersionNumber DESC"
8990

9091
$databaseVersionNumberDataRow = Execute-DbCommandWithResult $params $getCurrentDbVersionQuery
9192

@@ -139,7 +140,7 @@ for ($i = 0; $i -lt $files.Count; $i++) {
139140
$migrationDescription = $migrationDescription.Substring(0, 256)
140141
}
141142

142-
$updateVersionQuery = "INSERT INTO [$DatabaseSchema].[DatabaseVersion] ([MajorVersionNumber], [MinorVersionNumber], [PatchVersionNumber], [MigrationDescription], [MigrationDate]) " +
143+
$updateVersionQuery = "INSERT INTO [$DatabaseSchema].[$DatabaseVersionTable] ([MajorVersionNumber], [MinorVersionNumber], [PatchVersionNumber], [MigrationDescription], [MigrationDate]) " +
143144
"SELECT $($scriptVersionNumber.MajorVersionNumber), $($scriptVersionNumber.MinorVersionNumber), $($scriptVersionNumber.PatchVersionNumber), '$migrationDescription', getdate()"
144145

145146
Execute-DbCommand $params $updateVersionQuery

0 commit comments

Comments
 (0)