- if (($stage == 7) OR ($stage == 0)) {
- logger("Deleting orphaned data from term table");
- if ($db->q("SELECT `oid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`)", true)) {
- $count = $db->num_rows();
- logger("found term orphans: ".$count);
- while ($orphan = $db->qfetch()) {
- q("DELETE FROM `term` WHERE `oid` = %d", intval($orphan["oid"]));
+ if ($count < $limit) {
+ Config::set('system', 'finished-dbclean-7', true);
+ }
+ } elseif ($stage == 8) {
+ if ($days <= 0) {
+ return;
+ }
+
+ $last_id = Config::get('system', 'dbclean-last-id-8', 0);
+
+ logger("Deleting expired threads. Last ID: ".$last_id);
+ $r = dba::p("SELECT `thread`.`iid` FROM `thread`
+ INNER JOIN `contact` ON `thread`.`contact-id` = `contact`.`id` AND NOT `notify_new_posts`
+ WHERE `thread`.`received` < UTC_TIMESTAMP() - INTERVAL ? DAY
+ AND NOT `thread`.`mention` AND NOT `thread`.`starred`
+ AND NOT `thread`.`wall` AND NOT `thread`.`origin`
+ AND `thread`.`uid` != 0 AND `thread`.`iid` >= ?
+ AND NOT `thread`.`iid` IN (SELECT `parent` FROM `item`
+ WHERE (`item`.`starred` OR (`item`.`resource-id` != '')
+ OR (`item`.`file` != '') OR (`item`.`event-id` != '')
+ OR (`item`.`attach` != '') OR `item`.`wall` OR `item`.`origin`)
+ AND `item`.`parent` = `thread`.`iid`)
+ ORDER BY `thread`.`iid` LIMIT 1000", $days, $last_id);
+ $count = dba::num_rows($r);
+ if ($count > 0) {
+ logger("found expired threads: ".$count);
+ while ($thread = dba::fetch($r)) {
+ $last_id = $thread["iid"];
+ dba::delete('thread', array('iid' => $thread["iid"]));