From 3fa71a8d8b039a1f23ae21c9c02cffdc070c4ef6 Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Sun, 28 Dec 2025 00:43:55 +0100 Subject: [PATCH] Fixed datapoint stale reference causing issues when updating datapoint text and probmethod or similaritymethod, fixe probmethod and similaritymethod not being applied in-memory --- src/Server/Helper/SearchdomainHelper.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Server/Helper/SearchdomainHelper.cs b/src/Server/Helper/SearchdomainHelper.cs index 4012689..2e0d6b4 100644 --- a/src/Server/Helper/SearchdomainHelper.cs +++ b/src/Server/Helper/SearchdomainHelper.cs @@ -149,8 +149,9 @@ public class SearchdomainHelper(ILogger logger, DatabaseHelp } // Datapoint - foreach (Datapoint datapoint in preexistingEntity.datapoints.ToList()) + foreach (Datapoint datapoint_ in preexistingEntity.datapoints.ToList()) { + Datapoint datapoint = datapoint_; // To enable replacing the datapoint reference as foreach iterators cannot be overwritten bool newEntityHasDatapoint = jsonEntity.Datapoints.Any(x => x.Name == datapoint.name); if (!newEntityHasDatapoint) { @@ -180,6 +181,7 @@ public class SearchdomainHelper(ILogger logger, DatabaseHelp preexistingEntity.datapoints.Remove(datapoint); Datapoint newDatapoint = DatabaseInsertDatapointWithEmbeddings(helper, searchdomain, newEntityDatapoint, (int)preexistingEntityID); preexistingEntity.datapoints.Add(newDatapoint); + datapoint = newDatapoint; invalidateSearchCache = true; } if (newEntityDatapoint is not null && (newEntityDatapoint.Probmethod_embedding != datapoint.probMethod.probMethodEnum || newEntityDatapoint.SimilarityMethod != datapoint.similarityMethod.similarityMethodEnum)) @@ -194,8 +196,8 @@ public class SearchdomainHelper(ILogger logger, DatabaseHelp }; helper.ExecuteSQLNonQuery("UPDATE datapoint SET probmethod_embedding=@probmethod, similaritymethod=@similaritymethod WHERE id_entity=@entityId AND name=@datapointName", parameters); Datapoint preexistingDatapoint = preexistingEntity.datapoints.First(x => x == datapoint); // The for loop is a copy. This retrieves the original such that it can be updated. - preexistingDatapoint.probMethod = datapoint.probMethod; - preexistingDatapoint.similarityMethod = datapoint.similarityMethod; + preexistingDatapoint.probMethod = new(newEntityDatapoint.Probmethod_embedding, _logger); + preexistingDatapoint.similarityMethod = new(newEntityDatapoint.SimilarityMethod, _logger); invalidateSearchCache = true; } }