db optimizations around names and case-sensitivity (#2749)

* generate (case-insensitive) unique names for fields that should be unique

* move name case-insensitivity down to schema level

* update changelog
This commit is contained in:
Jason Dove
2026-01-02 09:25:23 -06:00
committed by GitHub
parent 80f6e468eb
commit bcd2ea7db3
79 changed files with 29898 additions and 360 deletions
@@ -176,10 +176,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
Option<Playlist> maybePlaylist = await dbContext.Playlists
.AsNoTracking()
.SelectOneAsync(
p => p.Name,
p => EF.Functions.Collate(p.Name, TvContext.CaseInsensitiveCollation) == name,
cancellationToken);
.SingleOrDefaultAsync(p => p.Name == name, cancellationToken);
foreach (Playlist playlist in maybePlaylist)
{
@@ -360,10 +357,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
Option<Collection> maybeCollection = await dbContext.Collections
.AsNoTracking()
.SelectOneAsync(
c => c.Name,
c => EF.Functions.Collate(c.Name, TvContext.CaseInsensitiveCollation) == name,
cancellationToken);
.SingleOrDefaultAsync(c => c.Name == name, cancellationToken);
foreach (Collection collection in maybeCollection)
{
@@ -416,10 +410,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
Option<MultiCollection> maybeCollection = await dbContext.MultiCollections
.AsNoTracking()
.SelectOneAsync(
mc => mc.Name,
mc => EF.Functions.Collate(mc.Name, TvContext.CaseInsensitiveCollation) == name,
cancellationToken);
.SingleOrDefaultAsync(mc => mc.Name == name, cancellationToken);
foreach (MultiCollection collection in maybeCollection)
{
@@ -451,10 +442,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
Option<SmartCollection> maybeCollection = await dbContext.SmartCollections
.AsNoTracking()
.SelectOneAsync(
sc => sc.Name,
sc => EF.Functions.Collate(sc.Name, TvContext.CaseInsensitiveCollation) == name,
cancellationToken);
.SingleOrDefaultAsync(sc => sc.Name == name, cancellationToken);
foreach (SmartCollection collection in maybeCollection)
{
@@ -694,8 +682,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository
List<int> nextIds = await dbContext.ShowMetadata
.AsNoTracking()
.Filter(sm =>
sm.Guids.Any(g => EF.Functions.Collate(g.Guid, TvContext.CaseInsensitiveCollation) == guid))
.Filter(sm => sm.Guids.Any(g => g.Guid == guid))
.Map(sm => sm.ShowId)
.ToListAsync();