diff --git a/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs b/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs index 2dfca5b3..0be39cde 100644 --- a/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs +++ b/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs @@ -1,10 +1,9 @@ +using Baseline; +using Shouldly; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Baseline; -using Castle.Components.DictionaryAdapter; -using Shouldly; using Weasel.Postgresql.Tables; using Xunit; @@ -32,8 +31,7 @@ public detecting_table_deltas() : base("deltas") theTable.AddColumn("first_name"); theTable.AddColumn("last_name"); theTable.AddColumn("user_name"); - theTable.AddColumn("data", "jsonb"); - + theTable.AddColumn("data", "jsonb"); ResetSchema().GetAwaiter().GetResult(); } @@ -121,8 +119,7 @@ public async Task extra_column() delta.Difference.ShouldBe(SchemaPatchDifference.Update); await AssertNoDeltasAfterPatching(); - } - + } [Fact] public async Task detect_new_index() @@ -140,7 +137,6 @@ public async Task detect_new_index() delta.Difference.ShouldBe(SchemaPatchDifference.Update); await AssertNoDeltasAfterPatching(); - } [Fact] @@ -188,7 +184,6 @@ public async Task detect_different_index() [Fact] public async Task detect_extra_index() { - theTable.ModifyColumn("user_name").AddIndex(i => i.IsUnique = true); await CreateSchemaObjectInDatabase(theTable); @@ -217,7 +212,6 @@ public async Task matching_index_ddl(string description, Action configure // The index DDL should match what the database thinks it is in order to match - var expected = existing!.Indexes.Single(); var actual = theTable.Indexes.Single(); @@ -226,7 +220,6 @@ public async Task matching_index_ddl(string description, Action
configure // And no deltas var delta = await theTable.FindDelta(theConnection); delta.Indexes.Matched.Count.ShouldBe(1); - } public static IEnumerable IndexTestData() @@ -312,7 +305,6 @@ public static IEnumerable IndexTestData() } - [Fact] public async Task detect_all_new_foreign_key() { @@ -374,8 +366,7 @@ public async Task detect_extra_foreign_key() delta.Difference.ShouldBe(SchemaPatchDifference.Update); await AssertNoDeltasAfterPatching(table); - } - + } [Fact] public async Task match_foreign_key() @@ -407,8 +398,7 @@ public async Task match_foreign_key() delta.Difference.ShouldBe(SchemaPatchDifference.None); await AssertNoDeltasAfterPatching(table); - } - + } [Fact] public async Task match_foreign_key_with_inherited_foreign_key_class() @@ -487,8 +477,7 @@ public async Task detect_primary_key_change() delta.HasChanges().ShouldBeTrue(); await AssertNoDeltasAfterPatching(theTable); - } - + } [Fact] public async Task detect_new_primary_key_change() @@ -510,7 +499,6 @@ public async Task detect_new_primary_key_change() await AssertNoDeltasAfterPatching(theTable); } - [Fact] public async Task detect_new_primary_key_constraint_name_change() { @@ -527,6 +515,31 @@ public async Task detect_new_primary_key_constraint_name_change() await AssertNoDeltasAfterPatching(theTable); } + [Fact] + public async Task detect_new_primary_key_constraint_name_change_when_also_used_as_foreign_key() + { + var dudeTable = new Table("deltas.dudes"); + dudeTable.AddColumn("id").AsPrimaryKey(); + dudeTable.AddColumn("first_name"); + + await CreateSchemaObjectInDatabase(dudeTable); + + var carTable = new Table("deltas.cars"); + carTable.AddColumn("id").AsPrimaryKey(); + carTable.AddColumn("dude_id").ForeignKeyTo(dudeTable, "id"); + + await CreateSchemaObjectInDatabase(carTable); + + dudeTable.PrimaryKeyName = "pk_newchange"; + + var delta = await dudeTable.FindDelta(theConnection); + + delta.PrimaryKeyDifference.ShouldBe(SchemaPatchDifference.Update); + + delta.HasChanges().ShouldBeTrue(); + + await AssertNoDeltasAfterPatching(dudeTable); + } [Fact] public async Task equivalency_with_the_postgres_synonym_issue() @@ -579,7 +592,5 @@ public async Task patching_and_detecting_deltas_with_computed_indexes() await AssertNoDeltasAfterPatching(table); } - - } } \ No newline at end of file diff --git a/src/Weasel.Postgresql/Tables/TableDelta.cs b/src/Weasel.Postgresql/Tables/TableDelta.cs index ccc6a036..22b507f7 100644 --- a/src/Weasel.Postgresql/Tables/TableDelta.cs +++ b/src/Weasel.Postgresql/Tables/TableDelta.cs @@ -113,6 +113,12 @@ public override void WriteUpdate(DdlRules rules, TextWriter writer) { case SchemaPatchDifference.Invalid: case SchemaPatchDifference.Update: + if (Expected.PrimaryKeyColumns.SequenceEqual(Actual?.PrimaryKeyColumns)) + { + //for when PK constraint name changes only + writer.WriteLine($"alter table {Expected.Identifier} rename constraint {Actual!.PrimaryKeyName} to {Expected.PrimaryKeyName};"); + break; + } writer.WriteLine($"alter table {Expected.Identifier} drop constraint {Actual!.PrimaryKeyName};"); writer.WriteLine($"alter table {Expected.Identifier} add {Expected.PrimaryKeyDeclaration()};"); break;