Change sql code for updateTermEmbeddingCache, a=chris
Change sql code for updateTermEmbeddingCache, a=chris
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]);
}
}
/**