From 1e6ecd0695acb76b5405bac50928d0bc6491233a Mon Sep 17 00:00:00 2001 From: AndriySvyryd Date: Tue, 3 Mar 2020 18:41:50 -0800 Subject: [PATCH] Store null index filters Fixes #20136 --- .../Extensions/RelationalIndexExtensions.cs | 4 ++-- ...RelationalMetadataBuilderExtensionsTest.cs | 21 +++++++++++++++++++ .../RelationalMetadataExtensionsTest.cs | 8 +++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/EFCore.Relational/Extensions/RelationalIndexExtensions.cs b/src/EFCore.Relational/Extensions/RelationalIndexExtensions.cs index 5605eaaf79b..04e055798d7 100644 --- a/src/EFCore.Relational/Extensions/RelationalIndexExtensions.cs +++ b/src/EFCore.Relational/Extensions/RelationalIndexExtensions.cs @@ -86,7 +86,7 @@ public static string GetFilter([NotNull] this IIndex index) /// The index. /// The value to set. public static void SetFilter([NotNull] this IMutableIndex index, [CanBeNull] string value) - => index.SetOrRemoveAnnotation( + => index.SetAnnotation( RelationalAnnotationNames.Filter, Check.NullButNotEmpty(value, nameof(value))); @@ -97,7 +97,7 @@ public static void SetFilter([NotNull] this IMutableIndex index, [CanBeNull] str /// The value to set. /// Indicates whether the configuration was specified using a data annotation. public static void SetFilter([NotNull] this IConventionIndex index, [CanBeNull] string value, bool fromDataAnnotation = false) - => index.SetOrRemoveAnnotation( + => index.SetAnnotation( RelationalAnnotationNames.Filter, Check.NullButNotEmpty(value, nameof(value)), fromDataAnnotation); diff --git a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataBuilderExtensionsTest.cs b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataBuilderExtensionsTest.cs index 4bb07599ebc..bc7e5808c21 100644 --- a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataBuilderExtensionsTest.cs +++ b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataBuilderExtensionsTest.cs @@ -155,6 +155,27 @@ public void Can_access_index() Assert.Null(indexBuilder.HasName("Splod")); Assert.Equal("Splow", indexBuilder.Metadata.GetName()); + + Assert.NotNull(indexBuilder.HasName(null, fromDataAnnotation: true)); + Assert.Equal("IX_Splot_Id", indexBuilder.Metadata.GetName()); + + Assert.NotNull(indexBuilder.HasName("Splod")); + Assert.Equal("Splod", indexBuilder.Metadata.GetName()); + + Assert.NotNull(indexBuilder.HasFilter("Splew")); + Assert.Equal("Splew", indexBuilder.Metadata.GetFilter()); + + Assert.NotNull(indexBuilder.HasFilter("Splow", fromDataAnnotation: true)); + Assert.Equal("Splow", indexBuilder.Metadata.GetFilter()); + + Assert.Null(indexBuilder.HasFilter("Splod")); + Assert.Equal("Splow", indexBuilder.Metadata.GetFilter()); + + Assert.NotNull(indexBuilder.HasFilter(null, fromDataAnnotation: true)); + Assert.Null(indexBuilder.Metadata.GetFilter()); + + Assert.Null(indexBuilder.HasFilter("Splod")); + Assert.Null(indexBuilder.Metadata.GetFilter()); } [ConditionalFact] diff --git a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs index 8534ad255f0..7ef93e4acb4 100644 --- a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs +++ b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs @@ -42,17 +42,17 @@ public void Can_get_and_set_index_filter() { var modelBuilder = new ModelBuilder(new ConventionSet()); - var property = modelBuilder + var index = modelBuilder .Entity() .HasIndex(e => e.Id) .HasFilter("[Id] % 2 = 0") .Metadata; - Assert.Equal("[Id] % 2 = 0", property.GetFilter()); + Assert.Equal("[Id] % 2 = 0", index.GetFilter()); - property.SetFilter("[Id] % 3 = 0"); + index.SetFilter("[Id] % 3 = 0"); - Assert.Equal("[Id] % 3 = 0", property.GetFilter()); + Assert.Equal("[Id] % 3 = 0", index.GetFilter()); } [ConditionalFact]