From d1aa44cbbc97dce95eeba6fa9cb82feada12b259 Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Thu, 28 May 2026 11:09:54 +0200 Subject: [PATCH 1/3] Add commits order index --- Directory.Packages.props | 1 + .../DbContextTests.VerifyModel.verified.txt | 1 + src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs | 8 ++++++++ src/SIL.Harmony/SIL.Harmony.csproj | 1 + 4 files changed, 11 insertions(+) diff --git a/Directory.Packages.props b/Directory.Packages.props index 0fafb5c4..a7a4243a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,5 +26,6 @@ + \ No newline at end of file diff --git a/src/SIL.Harmony.Tests/DbContextTests.VerifyModel.verified.txt b/src/SIL.Harmony.Tests/DbContextTests.VerifyModel.verified.txt index 018dda9e..d02fa1a2 100644 --- a/src/SIL.Harmony.Tests/DbContextTests.VerifyModel.verified.txt +++ b/src/SIL.Harmony.Tests/DbContextTests.VerifyModel.verified.txt @@ -24,6 +24,7 @@ Keys: Id PK Annotations: + CustomIndex:CompositeIndexes: [{"paths":["HybridDateTime.DateTime","HybridDateTime.Counter","Id"],"unique":false,"name":"IX_Commits_DateTime_Counter_Id"}] Relational:FunctionName: Relational:Schema: Relational:SqlQuery: diff --git a/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs b/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs index 9694bb55..2355e077 100644 --- a/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs +++ b/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using EFCore.ComplexIndexes; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -21,6 +22,13 @@ public void Configure(EntityTypeBuilder builder) .HasColumnName("DateTime"); hybridEntity.Property(h => h.Counter).HasColumnName("Counter"); }); + // Supports Harmony's DefaultOrder (ASC) directly and DefaultOrderDescending via reverse scan. + // EF Core 10 cannot express indexes mixing ComplexProperty members + scalars (efcore#11336, targeted for 11). + // We use EFCore.ComplexIndexes instead. The package doesn't support column direction, + // but an ASC index works equivalently for reverse scans on SQLite and Postgres. + builder.HasComplexCompositeIndex( + c => new { c.HybridDateTime.DateTime, c.HybridDateTime.Counter, c.Id }, + indexName: "IX_Commits_DateTime_Counter_Id"); builder.Property(c => c.Metadata) .HasColumnType("jsonb") .HasConversion( diff --git a/src/SIL.Harmony/SIL.Harmony.csproj b/src/SIL.Harmony/SIL.Harmony.csproj index d731f077..f5ff35f2 100644 --- a/src/SIL.Harmony/SIL.Harmony.csproj +++ b/src/SIL.Harmony/SIL.Harmony.csproj @@ -15,6 +15,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + From 263927cd509eff03b1bf52ba5c6ea6ee8b4c913a Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Wed, 3 Jun 2026 12:21:44 +0200 Subject: [PATCH 2/3] Bump EFCore.ComplexIndexes to 2.0.5 Co-Authored-By: Claude Opus 4.8 (1M context) --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index a7a4243a..884f3c92 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,6 +26,6 @@ - + \ No newline at end of file From bbf37e2189b4706ef6a995b069074e61f5d86cc7 Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Tue, 9 Jun 2026 09:54:52 +0200 Subject: [PATCH 3/3] Bump EFCore.ComplexIndexes to 3.1.5 (#69) 3.1.0 added per-column sort direction support, so update the comment to reflect that we don't need it (both Harmony sorts are uniform-direction) rather than that the package can't express it. Co-authored-by: Claude --- Directory.Packages.props | 2 +- src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 884f3c92..6c90d982 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,6 +26,6 @@ - + \ No newline at end of file diff --git a/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs b/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs index 2355e077..eb42691c 100644 --- a/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs +++ b/src/SIL.Harmony/Db/EntityConfig/CommitEntityConfig.cs @@ -24,8 +24,8 @@ public void Configure(EntityTypeBuilder builder) }); // Supports Harmony's DefaultOrder (ASC) directly and DefaultOrderDescending via reverse scan. // EF Core 10 cannot express indexes mixing ComplexProperty members + scalars (efcore#11336, targeted for 11). - // We use EFCore.ComplexIndexes instead. The package doesn't support column direction, - // but an ASC index works equivalently for reverse scans on SQLite and Postgres. + // We use EFCore.ComplexIndexes instead. Both Harmony sorts are uniform-direction, so a single + // ASC index covers both — SQLite and Postgres reverse-scan it for the descending case. builder.HasComplexCompositeIndex( c => new { c.HybridDateTime.DateTime, c.HybridDateTime.Counter, c.Id }, indexName: "IX_Commits_DateTime_Counter_Id");