From 6080cca9ca1de60a5d4a1ef06d4873eca07d9ef2 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 24 Jan 2020 14:25:31 +0300 Subject: scrap counter cache system; rework counters to sum() booleans instead --- classes/ccache.php | 211 ----------------------------------------------------- 1 file changed, 211 deletions(-) delete mode 100644 classes/ccache.php (limited to 'classes/ccache.php') diff --git a/classes/ccache.php b/classes/ccache.php deleted file mode 100644 index 2f19140e0..000000000 --- a/classes/ccache.php +++ /dev/null @@ -1,211 +0,0 @@ -prepare("UPDATE ttrss_counters_cache SET - value = 0 WHERE owner_uid = ?"); - $sth->execute([$owner_uid]); - - $sth = $pdo->prepare("UPDATE ttrss_cat_counters_cache SET - value = 0 WHERE owner_uid = ?"); - $sth->execute([$owner_uid]); - } - - static function remove($feed_id, $owner_uid, $is_cat = false) { - - $feed_id = (int) $feed_id; - - if (!$is_cat) { - $table = "ttrss_counters_cache"; - } else { - $table = "ttrss_cat_counters_cache"; - } - - $pdo = Db::pdo(); - - $sth = $pdo->prepare("DELETE FROM $table WHERE - feed_id = ? AND owner_uid = ?"); - $sth->execute([$feed_id, $owner_uid]); - - } - - static function update_all($owner_uid) { - - $pdo = Db::pdo(); - - if (get_pref('ENABLE_FEED_CATS', $owner_uid)) { - - $sth = $pdo->prepare("SELECT feed_id FROM ttrss_cat_counters_cache - WHERE feed_id > 0 AND owner_uid = ?"); - $sth->execute([$owner_uid]); - - while ($line = $sth->fetch()) { - CCache::update($line["feed_id"], $owner_uid, true); - } - - /* We have to manually include category 0 */ - - CCache::update(0, $owner_uid, true); - - } else { - $sth = $pdo->prepare("SELECT feed_id FROM ttrss_counters_cache - WHERE feed_id > 0 AND owner_uid = ?"); - $sth->execute([$owner_uid]); - - while ($line = $sth->fetch()) { - print CCache::update($line["feed_id"], $owner_uid); - - } - - } - } - - static function find($feed_id, $owner_uid, $is_cat = false, - $no_update = false) { - - // "" (null) is valid and should be cast to 0 (uncategorized) - // everything else i.e. tags are not - if (!is_numeric($feed_id) && $feed_id) - return; - - $feed_id = (int) $feed_id; - - if (!$is_cat) { - $table = "ttrss_counters_cache"; - } else { - $table = "ttrss_cat_counters_cache"; - } - - $pdo = Db::pdo(); - - $sth = $pdo->prepare("SELECT value FROM $table - WHERE owner_uid = ? AND feed_id = ? - LIMIT 1"); - - $sth->execute([$owner_uid, $feed_id]); - - if ($row = $sth->fetch()) { - return $row["value"]; - } else { - if ($no_update) { - return -1; - } else { - return CCache::update($feed_id, $owner_uid, $is_cat); - } - } - - } - - static function update($feed_id, $owner_uid, $is_cat = false, - $update_pcat = true, $pcat_fast = false) { - - // "" (null) is valid and should be cast to 0 (uncategorized) - // everything else i.e. tags are not - if (!is_numeric($feed_id) && $feed_id) - return; - - $feed_id = (int) $feed_id; - - $prev_unread = CCache::find($feed_id, $owner_uid, $is_cat, true); - - /* When updating a label, all we need to do is recalculate feed counters - * because labels are not cached */ - - if ($feed_id < 0) { - CCache::update_all($owner_uid); - return; - } - - if (!$is_cat) { - $table = "ttrss_counters_cache"; - } else { - $table = "ttrss_cat_counters_cache"; - } - - $pdo = Db::pdo(); - - if ($is_cat && $feed_id >= 0) { - /* Recalculate counters for child feeds */ - - if (!$pcat_fast) { - $sth = $pdo->prepare("SELECT id FROM ttrss_feeds - WHERE owner_uid = :uid AND - (cat_id = :cat OR (:cat = 0 AND cat_id IS NULL))"); - $sth->execute([":uid" => $owner_uid, ":cat" => $feed_id]); - - while ($line = $sth->fetch()) { - CCache::update((int)$line["id"], $owner_uid, false, false); - } - } - - $sth = $pdo->prepare("SELECT SUM(value) AS sv - FROM ttrss_counters_cache, ttrss_feeds - WHERE ttrss_feeds.id = feed_id AND - (cat_id = :cat OR (:cat = 0 AND cat_id IS NULL)) AND - ttrss_counters_cache.owner_uid = :uid AND - ttrss_feeds.owner_uid = :uid"); - $sth->execute([":uid" => $owner_uid, ":cat" => $feed_id]); - $row = $sth->fetch(); - - $unread = (int) $row["sv"]; - - } else { - $unread = (int) Feeds::getFeedArticles($feed_id, $is_cat, true, $owner_uid); - } - - $tr_in_progress = false; - - try { - $pdo->beginTransaction(); - } catch (Exception $e) { - $tr_in_progress = true; - } - - $sth = $pdo->prepare("SELECT feed_id FROM $table - WHERE owner_uid = ? AND feed_id = ? LIMIT 1"); - $sth->execute([$owner_uid, $feed_id]); - - if ($sth->fetch()) { - - $sth = $pdo->prepare("UPDATE $table SET - value = ?, updated = NOW() WHERE - feed_id = ? AND owner_uid = ?"); - - $sth->execute([$unread, $feed_id, $owner_uid]); - - } else { - $sth = $pdo->prepare("INSERT INTO $table - (feed_id, value, owner_uid, updated) - VALUES - (?, ?, ?, NOW())"); - $sth->execute([$feed_id, $unread, $owner_uid]); - } - - if (!$tr_in_progress) $pdo->commit(); - - if ($feed_id > 0 && $prev_unread != $unread) { - - if (!$is_cat) { - - /* Update parent category */ - - if ($update_pcat) { - - $sth = $pdo->prepare("SELECT cat_id FROM ttrss_feeds - WHERE owner_uid = ? AND id = ?"); - $sth->execute([$owner_uid, $feed_id]); - - if ($row = $sth->fetch()) { - CCache::update((int)$row["cat_id"], $owner_uid, true, true, true); - } - } - } - } else if ($feed_id < 0) { - CCache::update_all($owner_uid); - } - - return $unread; - } - -} \ No newline at end of file -- cgit v1.2.3