aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJPVenson <github@jpb.email>2024-11-14 20:36:27 +0000
committerJPVenson <github@jpb.email>2024-11-14 20:36:27 +0000
commit30ba35aa0ce10916c6bd4cb6b33d573af52219ec (patch)
treec53afef12faf7a47c4b0a18b974a12422ee78396
parentb60cd378d983555430b181259604a465883d6bac (diff)
attempted to fix multi insert for Itemvalues
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs15
1 files changed, 11 insertions, 4 deletions
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index dae35b1a0..9f41922b1 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -373,6 +373,8 @@ public sealed class BaseItemRepository(
tuples[i] = (item, ancestorIds, topParent, userdataKey, inheritedTags);
}
+ var localFuckingItemValueCache = new Dictionary<(int MagicNumber, string Value), Guid>();
+
using var context = dbProvider.CreateDbContext();
using var transaction = context.Database.BeginTransaction();
foreach (var item in tuples)
@@ -416,10 +418,14 @@ public sealed class BaseItemRepository(
context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete();
foreach (var itemValue in itemValuesToSave)
{
- var refValue = context.ItemValues
- .Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber)
- .Select(e => e.ItemValueId)
- .FirstOrDefault();
+ if (!localFuckingItemValueCache.TryGetValue(itemValue, out var refValue))
+ {
+ refValue = context.ItemValues
+ .Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber)
+ .Select(e => e.ItemValueId)
+ .FirstOrDefault();
+ }
+
if (refValue.IsEmpty())
{
context.ItemValues.Add(new ItemValue()
@@ -429,6 +435,7 @@ public sealed class BaseItemRepository(
ItemValueId = refValue = Guid.NewGuid(),
Value = itemValue.Value
});
+ localFuckingItemValueCache[itemValue] = refValue;
}
context.ItemValuesMap.Add(new ItemValueMap()