From edc78a5a4c5e8fbc85517da261e3a22596b6b46a Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 22 Jan 2025 12:26:06 +0100 Subject: [PATCH] Handles migration case where an expected constraint is renamed but the constraint does not exist. (#18063) --- .../Upgrade/V_13_3_0/AlignUpgradedDatabase.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs index 6ee48ce0e7..f45b5d371b 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs @@ -1,4 +1,4 @@ -using NPoco; +using NPoco; using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.Dtos; using ColumnInfo = Umbraco.Cms.Infrastructure.Persistence.SqlSyntax.ColumnInfo; @@ -153,16 +153,26 @@ SELECT obj_Constraint.NAME AS 'constraintName' "); var currentConstraintName = Database.ExecuteScalar(constraintNameQuery); - - // only rename the constraint if necessary + // Only rename the constraint if necessary. if (currentConstraintName == expectedConstraintName) { return; } - Sql renameConstraintQuery = Database.SqlContext.Sql( - $"EXEC sp_rename N'{currentConstraintName}', N'{expectedConstraintName}', N'OBJECT'"); - Database.Execute(renameConstraintQuery); + if (currentConstraintName is null) + { + // Constraint does not exist, so we need to create it. + Sql createConstraintStatement = Database.SqlContext.Sql(@$" +ALTER TABLE umbracoContentVersion ADD CONSTRAINT [DF_umbracoContentVersion_versionDate] DEFAULT (getdate()) FOR [versionDate]"); + Database.Execute(createConstraintStatement); + } + else + { + // Constraint exists, and differs from the expected name, so we need to rename it. + Sql renameConstraintQuery = Database.SqlContext.Sql( + $"EXEC sp_rename N'{currentConstraintName}', N'{expectedConstraintName}', N'OBJECT'"); + Database.Execute(renameConstraintQuery); + } } private void UpdateExternalLoginIndexes(IEnumerable> indexes)