Change sql code for updateTermEmbeddingCache, a=chris

Chris Pollett [2022-12-14 03:Dec:th]
Change sql code for updateTermEmbeddingCache, a=chris
Filename
src/library/media_jobs/RecommendationJob.php
diff --git a/src/library/media_jobs/RecommendationJob.php b/src/library/media_jobs/RecommendationJob.php
index 4c060f141..1a67be9ab 100644
--- a/src/library/media_jobs/RecommendationJob.php
+++ b/src/library/media_jobs/RecommendationJob.php
@@ -1310,12 +1310,14 @@ class RecommendationJob extends MediaJob
         $db = $this->db;
         $evicted_item = $this->lru_cache->put($term_id, $term_embedding);
         if (isset($evicted_item)) {
-            $sql = "DELETE FROM RECOMMENDATION_TERM_EMBEDDING " .
-                "WHERE ITEM_TYPE = ? AND ID = ?";
-            $db->execute($sql, [$item_type, $evicted_item[0]]);
-            $sql = "INSERT INTO RECOMMENDATION_TERM_EMBEDDING VALUES (?, ?, ?)";
+            $on_conflict = in_array($db->to_upper_dbms, ["MYSQL"]) ?
+                " ON DUPLICATE KEY " :
+                " ON CONFLICT (ITEM_TYPE, ID) DO UPDATE ";
+            $sql = "INSERT INTO RECOMMENDATION_TERM_EMBEDDING VALUES ".
+                "(?, ?, ?) $on_conflict SET VECTOR = ?";
+            $vector = base64_encode($evicted_item[1]);
             $db->execute($sql, [$evicted_item[0], $item_type,
-                base64_encode($evicted_item[1])]);
+                $vector, $vector]);
         }
     }
     /**
ViewGit