From deb7633c4932d1838cb0a67aebdab5e37aae7206 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 17 Nov 2025 13:48:48 +0100 Subject: Change SQL update query (#6957) * Change SQL update query for MariaDB / MySQL fix https://github.com/FreshRSS/FreshRSS/issues/5707 * No change for SQLite * Fix merge error * Update MySQL version on the model of PostgreSQL Performance to be tested * Fix LEFT JOIN, also for PostgreSQL / SQLite * Fix alias * Reduce MySQL deadlock * Fix compatibility with SQLite * Back to identical SQL for all databases --- app/Models/FeedDAO.php | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'app/Models/FeedDAO.php') diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 0353f9a05..ddc2057db 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -479,17 +479,38 @@ SQL; * Update cached values for selected feeds, or all feeds if no feed ID is provided. */ public function updateCachedValues(int ...$feedIds): int|false { - //2 sub-requests with FOREIGN KEY(e.id_feed), INDEX(e.is_read) faster than 1 request with GROUP BY or CASE + if (empty($feedIds)) { + $whereFeedIds = 'true'; + $whereEntryIdFeeds = 'true'; + } else { + $whereFeedIds = 'id IN (' . str_repeat('?,', count($feedIds) - 1) . '?)'; + $whereEntryIdFeeds = 'id_feed IN (' . str_repeat('?,', count($feedIds) - 1) . '?)'; + } $sql = << 0) { - $sql .= ' WHERE id IN (' . str_repeat('?,', count($feedIds) - 1) . '?)'; - } $stm = $this->pdo->prepare($sql); - if ($stm !== false && $stm->execute($feedIds)) { + if ($stm !== false && $stm->execute(array_merge($feedIds, $feedIds))) { return $stm->rowCount(); } else { $info = $stm === false ? $this->pdo->errorInfo() : $stm->errorInfo(); -- cgit v1.2.3