From da9958ad73a01d4dac20ddbe0da7b36a952617a3 Mon Sep 17 00:00:00 2001 From: Alex Vorobiev Date: Thu, 4 Feb 2021 20:08:39 +0100 Subject: [PATCH] Added capability to do EM replacement tokens in Iteration migrations. Fixed Organizational participant bug. (#187) --- CDP4Orm/MigrationEngine/GenericMigration.cs | 16 +++++++++++++++- CDP4Orm/MigrationEngine/MigrationBase.cs | 7 ++++++- .../Iteration_20210109_6_5_0_0_Model_Updates.sql | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CDP4Orm/MigrationEngine/GenericMigration.cs b/CDP4Orm/MigrationEngine/GenericMigration.cs index 9cc77588..d74b500d 100644 --- a/CDP4Orm/MigrationEngine/GenericMigration.cs +++ b/CDP4Orm/MigrationEngine/GenericMigration.cs @@ -59,11 +59,25 @@ public override void ApplyMigration(NpgsqlTransaction transaction, IReadOnlyList foreach (var applicableSchema in applicableSchemas) { + var replaceList = new List>(); + // using the actual schema name in the generic script to execute var replace = new Tuple(SCHEMA_NAME_REPLACE, applicableSchema); + replaceList.Add(replace); + + // allow possibility of replacing engineeringmodel tokens in iterations + if (this.MigrationMetaData.MigrationScriptApplicationKind == MigrationScriptApplicationKind.Iteration) + { + if (applicableSchema.Contains("Iteration_")) + { + var applicableEngineeringModelSchema = applicableSchema.Replace("Iteration_", "EngineeringModel_"); + replaceList.Add(new Tuple(ENGINEERING_MODEL_REPLACE, applicableEngineeringModelSchema)); + } + } + using (var sqlCommand = new NpgsqlCommand()) { - sqlCommand.ReadSqlFromResource(this.MigrationMetaData.ResourceName, null, new [] { replace }); + sqlCommand.ReadSqlFromResource(this.MigrationMetaData.ResourceName, null, replaceList); sqlCommand.Connection = transaction.Connection; sqlCommand.Transaction = transaction; diff --git a/CDP4Orm/MigrationEngine/MigrationBase.cs b/CDP4Orm/MigrationEngine/MigrationBase.cs index 3f7f6bf3..531289fa 100644 --- a/CDP4Orm/MigrationEngine/MigrationBase.cs +++ b/CDP4Orm/MigrationEngine/MigrationBase.cs @@ -23,7 +23,12 @@ public abstract class MigrationBase /// The string to replace in the script for schema partition /// protected const string SCHEMA_NAME_REPLACE = "SchemaName_Replace"; - + + /// + /// The string to replace in the script for engineeringModel partition + /// + protected const string ENGINEERING_MODEL_REPLACE = "EngineeringModel_Replace"; + /// /// Initializes a new instance of the class /// diff --git a/CDP4Orm/MigrationScript/Iteration_20210109_6_5_0_0_Model_Updates.sql b/CDP4Orm/MigrationScript/Iteration_20210109_6_5_0_0_Model_Updates.sql index 8d766f89..df4a3122 100644 --- a/CDP4Orm/MigrationScript/Iteration_20210109_6_5_0_0_Model_Updates.sql +++ b/CDP4Orm/MigrationScript/Iteration_20210109_6_5_0_0_Model_Updates.sql @@ -50,7 +50,7 @@ CREATE TRIGGER elementdefinition_organizationalparticipant_apply_revision BEFORE INSERT OR UPDATE OR DELETE ON "SchemaName_Replace"."ElementDefinition_OrganizationalParticipant" FOR EACH ROW - EXECUTE PROCEDURE "SiteDirectory".revision_management('ElementDefinition', 'SchemaName_Replace'); + EXECUTE PROCEDURE "SiteDirectory".revision_management('ElementDefinition', 'EngineeringModel_Replace'); CREATE OR REPLACE FUNCTION "SchemaName_Replace"."ElementDefinition_OrganizationalParticipant_Data" () RETURNS SETOF "SchemaName_Replace"."ElementDefinition_OrganizationalParticipant" AS