Index: Ringtoets/Migration/src/Ringtoets.Migration.Core/EmbeddedResources/Migration_17.3_18.1.sql =================================================================== diff -u -r0ffee99dd2d541d798adb7b0a09f6f6ef5371e34 -r5d48e0aa51c523ad324f95fab597df31511ed06e --- Ringtoets/Migration/src/Ringtoets.Migration.Core/EmbeddedResources/Migration_17.3_18.1.sql (.../Migration_17.3_18.1.sql) (revision 0ffee99dd2d541d798adb7b0a09f6f6ef5371e34) +++ Ringtoets/Migration/src/Ringtoets.Migration.Core/EmbeddedResources/Migration_17.3_18.1.sql (.../Migration_17.3_18.1.sql) (revision 5d48e0aa51c523ad324f95fab597df31511ed06e) @@ -120,7 +120,29 @@ 1 FROM [SOURCEPROJECT].DuneErosionSectionResultEntity; INSERT INTO DuneLocationEntity SELECT * FROM [SOURCEPROJECT].DuneLocationEntity; -INSERT INTO FailureMechanismEntity SELECT * FROM [SOURCEPROJECT].FailureMechanismEntity; +INSERT INTO FailureMechanismEntity ( + [FailureMechanismEntityId], + [AssessmentSectionEntityId], + [CalculationGroupEntityId], + [FailureMechanismType], + [IsRelevant], + [FailureMechanismSectionCollectionSourcePath], + [InputComments], + [OutputComments], + [NotRelevantComments]) +SELECT + [FailureMechanismEntityId], + [AssessmentSectionEntityId], + [CalculationGroupEntityId], + [FailureMechanismType], + [IsRelevant], + CASE WHEN COUNT([FailureMechanismSectionEntityId]) THEN "" ELSE NULL END, + [InputComments], + [OutputComments], + [NotRelevantComments] +FROM [SOURCEPROJECT].FailureMechanismEntity +LEFT JOIN [SOURCEPROJECT].FailureMechanismSectionEntity USING (FailureMechanismEntityId) +GROUP BY FailureMechanismEntityId; INSERT INTO FailureMechanismSectionEntity ( [FailureMechanismSectionEntityId], [FailureMechanismEntityId], Index: Ringtoets/Migration/test/Ringtoets.Migration.Core.Test/test-data/MigrationTestProject181.rtd =================================================================== diff -u -r3f2f54a462f170710ac0b783c08da29584ed8041 -r5d48e0aa51c523ad324f95fab597df31511ed06e Binary files differ Index: Ringtoets/Migration/test/Ringtoets.Migration.Integration.Test/MigrationTo181IntegrationTest.cs =================================================================== diff -u -r3f2f54a462f170710ac0b783c08da29584ed8041 -r5d48e0aa51c523ad324f95fab597df31511ed06e --- Ringtoets/Migration/test/Ringtoets.Migration.Integration.Test/MigrationTo181IntegrationTest.cs (.../MigrationTo181IntegrationTest.cs) (revision 3f2f54a462f170710ac0b783c08da29584ed8041) +++ Ringtoets/Migration/test/Ringtoets.Migration.Integration.Test/MigrationTo181IntegrationTest.cs (.../MigrationTo181IntegrationTest.cs) (revision 5d48e0aa51c523ad324f95fab597df31511ed06e) @@ -84,6 +84,7 @@ AssertHydraulicBoundaryLocationsProperties(reader, sourceFilePath); AssertHydraulicBoundaryLocationsOnAssessmentSection(reader, sourceFilePath); AssertHydraulicBoundaryLocationsOnGrassCoverErosionOutwardsFailureMechanism(reader, sourceFilePath); + AssertFailureMechanisms(reader, sourceFilePath); AssertPipingSoilLayers(reader); AssertStabilityStoneCoverFailureMechanism(reader); @@ -488,6 +489,37 @@ reader.AssertReturnedDataIsValid(validateForeignKeys); } + private static void AssertFailureMechanisms(MigratedDatabaseReader reader, string sourceFilePath) + { + const string validateFailureMechanismSectionsSourcePath = + "SELECT SUM([IsInvalid]) = 0 " + + "FROM (SELECT " + + "CASE WHEN " + + "COUNT([FailureMechanismSectionEntityId]) AND [FailureMechanismSectionCollectionSourcePath] IS NULL " + + "OR " + + "[FailureMechanismSectionCollectionSourcePath] IS NOT NULL AND NOT COUNT([FailureMechanismSectionEntityId]) " + + "THEN 1 ELSE 0 END AS [IsInvalid] " + + "FROM [FailureMechanismEntity] " + + "LEFT JOIN [FailureMechanismSectionEntity] USING([FailureMechanismEntityId]) " + + "GROUP BY [FailureMechanismEntityId]);"; + reader.AssertReturnedDataIsValid(validateFailureMechanismSectionsSourcePath); + + string validateFailureMechanisms = + $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " + + "SELECT COUNT() = (SELECT COUNT() FROM [SOURCEPROJECT].FailureMechanismEntity) " + + "FROM FailureMechanismEntity NEW " + + "JOIN [SOURCEPROJECT].FailureMechanismEntity OLD USING (FailureMechanismEntityId) " + + "WHERE NEW.AssessmentSectionEntityId = OLD.AssessmentSectionEntityId " + + "AND NEW.CalculationGroupEntityId IS OLD.CalculationGroupEntityId " + + "AND NEW.FailureMechanismType = OLD.FailureMechanismType " + + "AND NEW.IsRelevant = OLD.IsRelevant " + + "AND NEW.InputComments IS OLD.InputComments " + + "AND NEW.OutputComments IS OLD.OutputComments " + + "AND NEW.NotRelevantComments IS OLD.NotRelevantComments; " + + "DETACH DATABASE SOURCEPROJECT;"; + reader.AssertReturnedDataIsValid(validateFailureMechanisms); + } + private static void AssertPipingSoilLayers(MigratedDatabaseReader reader) { const string validateBelowPhreaticLevel =