From cfb81696c82059ca8ff31caefdc0ab32cb76105a Mon Sep 17 00:00:00 2001 From: aleksandr 'sasha' shtifanov Date: Wed, 25 Mar 2026 11:29:04 +0100 Subject: [PATCH] Add integration test for a case when compiled query (with QueryPlanning) contains filtering by string colleciton --- ...search_by_string_and_string_collections.cs | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/LinqTests/Bugs/compiled_query_problem_with_search_by_string_and_string_collections.cs diff --git a/src/LinqTests/Bugs/compiled_query_problem_with_search_by_string_and_string_collections.cs b/src/LinqTests/Bugs/compiled_query_problem_with_search_by_string_and_string_collections.cs new file mode 100644 index 0000000000..7ea86f8c03 --- /dev/null +++ b/src/LinqTests/Bugs/compiled_query_problem_with_search_by_string_and_string_collections.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Marten; +using Marten.Linq; +using Marten.Testing.Documents; +using Marten.Testing.Harness; +using Shouldly; + +namespace LinqTests.Bugs; + +public class compiled_query_problem_with_search_by_string_and_string_collections(DefaultStoreFixture fixture): IntegrationContext(fixture) +{ + protected override async Task fixtureSetup() + { + await theStore.Advanced.ResetAllData(); + } + + public class IssuesByTitles: ICompiledListQuery, IQueryPlanning + { + [Marten.Events.CodeGeneration.MartenIgnore] + public required string[] Titles { get; set; } + public required string Status { get; set; } + + public Expression, IEnumerable>> QueryIs() + { + return query => query.Where(x => x.Status == Status && x.Title.IsOneOf(Titles)); + } + void IQueryPlanning.SetUniqueValuesForQueryPlanning() + { + Status = "status"; + Titles = ["title"]; + } + } + + [Fact] + public async Task can_search_isOneOf_strings_with_compiled_queries_and_query_planning() + { + var issue1 = new Issue { Title = "Issue1", Status = "Open" }; + var issue2 = new Issue { Title = "Issue2", Status = "Open"}; + var issue3 = new Issue { Title = "Issue3", Status = "Open" }; + + theSession.Store(issue1, issue2, issue3); + await theSession.SaveChangesAsync(); + + await using var session = theStore.QuerySession(); + var query = new IssuesByTitles { Titles = [issue1.Title, issue2.Title], Status = issue1.Status }; + var issues = await session.QueryAsync(query); + + issues.Count().ShouldBe(2); + } +}