From 52cf96c6927706c46c04f647e767a08c7094d5a1 Mon Sep 17 00:00:00 2001 From: Jozef Jagla Date: Thu, 17 Apr 2025 14:41:25 +0200 Subject: [PATCH 1/2] Fix removing partitions by value --- .../Tables/Partitioning/ManagedListPartitions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Weasel.Postgresql/Tables/Partitioning/ManagedListPartitions.cs b/src/Weasel.Postgresql/Tables/Partitioning/ManagedListPartitions.cs index 487bffa..0a1849f 100644 --- a/src/Weasel.Postgresql/Tables/Partitioning/ManagedListPartitions.cs +++ b/src/Weasel.Postgresql/Tables/Partitioning/ManagedListPartitions.cs @@ -97,7 +97,7 @@ public async Task DropPartitionFromAllTablesForValue(PostgresqlDatabase database try { - var suffix = _partitions.Single(x => x.Value == value).Key; + var suffix = _partitions[value]; await DropPartitionFromAllTables(database, logger, [suffix], token).ConfigureAwait(false); } catch (InvalidOperationException) From 570ef81d0d619fbf4ca13b39b0f173280c93af24 Mon Sep 17 00:00:00 2001 From: Jozef Jagla Date: Thu, 17 Apr 2025 14:49:16 +0200 Subject: [PATCH 2/2] integration test for removing partitions by value --- .../partitioning/managed_list_partitions.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Weasel.Postgresql.Tests/Tables/partitioning/managed_list_partitions.cs b/src/Weasel.Postgresql.Tests/Tables/partitioning/managed_list_partitions.cs index eb89d31..27bcf28 100644 --- a/src/Weasel.Postgresql.Tests/Tables/partitioning/managed_list_partitions.cs +++ b/src/Weasel.Postgresql.Tests/Tables/partitioning/managed_list_partitions.cs @@ -148,6 +148,34 @@ public async Task remove_partitions_at_runtime_smoke_test() .ShouldBe(new []{"blue", "green", "purple"}); } + [Fact] + public async Task remove_partitions_by_value_at_runtime_smoke_test() + { + var database = new ManagedListDatabase(); + var partitions = new Dictionary { { "red", "red_suffix" }, { "green", "green_suffix" }, { "blue", "blue_suffix" }, }; + await database.Partitions.ResetValues(database, partitions, CancellationToken.None); + + await database.ApplyAllConfiguredChangesToDatabaseAsync(); + + await database.Partitions.AddPartitionToAllTables(database, "purple", "purple_suffix", CancellationToken.None); + + await database.Partitions.DropPartitionFromAllTablesForValue(database, NullLogger.Instance, "red", CancellationToken.None); + + var tables = await database.FetchExistingTablesAsync(); + + var teams = tables.Single(x => x.Identifier.Name == "teams"); + var partitioning = teams.Partitioning.ShouldBeOfType(); + partitioning.HasExistingDefault.ShouldBeFalse(); + partitioning.Partitions.Select(x => x.Suffix).OrderBy(x => x) + .ShouldBe(new []{"blue_suffix", "green_suffix", "purple_suffix"}); + + var players = tables.Single(x => x.Identifier.Name == "players"); + partitioning = players.Partitioning.ShouldBeOfType(); + partitioning.HasExistingDefault.ShouldBeFalse(); + partitioning.Partitions.Select(x => x.Suffix).OrderBy(x => x) + .ShouldBe(new []{"blue_suffix", "green_suffix", "purple_suffix"}); + } + [Fact] public async Task apply_additive_migration_2() {