From 548b7f43a5f22fa4eea917de1ed3de7588ac294d Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Mon, 8 Aug 2022 20:00:21 +0000
Subject: [PATCH] Improve SQL-Queries / fixed "fetch_parents" setting

---
 src/Protocol/ActivityPub/Processor.php |  2 +-
 src/Worker/RemoveUnusedAvatars.php     |  2 +-
 src/Worker/RemoveUnusedContacts.php    |  2 +-
 src/Worker/UpdateContacts.php          | 10 +++++-----
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php
index 7b2f2ab0c..f142b7e91 100644
--- a/src/Protocol/ActivityPub/Processor.php
+++ b/src/Protocol/ActivityPub/Processor.php
@@ -345,7 +345,7 @@ class Processor
 			return [];
 		}
 
-		if (!in_array(0, $activity['receiver']) && !DI::config()->get('system', 'fetch_parents')) {
+		if (!in_array(0, $activity['receiver']) || !DI::config()->get('system', 'fetch_parents')) {
 			$fetch_parents = false;
 		}
 
diff --git a/src/Worker/RemoveUnusedAvatars.php b/src/Worker/RemoveUnusedAvatars.php
index da9ca7b04..8adc7d76d 100644
--- a/src/Worker/RemoveUnusedAvatars.php
+++ b/src/Worker/RemoveUnusedAvatars.php
@@ -39,7 +39,7 @@ class RemoveUnusedAvatars
 				AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
 				AND NOT `contact`.`id` IN (SELECT `author-id` FROM `post-user`)
 				AND NOT `contact`.`id` IN (SELECT `owner-id` FROM `post-user`)
-				AND NOT `contact`.`id` IN (SELECT `causer-id` FROM `post-user`)
+				AND NOT `contact`.`id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL)
 				AND NOT `contact`.`id` IN (SELECT `cid` FROM `post-tag`)
 				AND NOT `contact`.`id` IN (SELECT `contact-id` FROM `post-user`);";
 
diff --git a/src/Worker/RemoveUnusedContacts.php b/src/Worker/RemoveUnusedContacts.php
index 850760254..324ec2419 100644
--- a/src/Worker/RemoveUnusedContacts.php
+++ b/src/Worker/RemoveUnusedContacts.php
@@ -40,7 +40,7 @@ class RemoveUnusedContacts
 		$condition = ["`id` != ? AND `uid` = ? AND NOT `self` AND NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` != ?)
 			AND (NOT `network` IN (?, ?, ?, ?, ?, ?) OR (`archive` AND `success_update` < ?))
 			AND NOT `id` IN (SELECT `author-id` FROM `post-user`) AND NOT `id` IN (SELECT `owner-id` FROM `post-user`)
-			AND NOT `id` IN (SELECT `causer-id` FROM `post-user`) AND NOT `id` IN (SELECT `cid` FROM `post-tag`)
+			AND NOT `id` IN (SELECT `causer-id` FROM `post-user` WHERE `causer-id` IS NOT NULL) AND NOT `id` IN (SELECT `cid` FROM `post-tag`)
 			AND NOT `id` IN (SELECT `contact-id` FROM `post-user`) AND NOT `id` IN (SELECT `cid` FROM `user-contact`)
 			AND NOT `id` IN (SELECT `cid` FROM `event`) AND NOT `id` IN (SELECT `contact-id` FROM `group_member`)
 			AND `created` < ?",
diff --git a/src/Worker/UpdateContacts.php b/src/Worker/UpdateContacts.php
index 9dc0bacca..d5fe2f207 100644
--- a/src/Worker/UpdateContacts.php
+++ b/src/Worker/UpdateContacts.php
@@ -55,11 +55,11 @@ class UpdateContacts
 		$ids = self::getContactsToUpdate($condition, $limit, []);
 		Logger::info('Fetched federated user contacts', ['count' => count($ids)]);
 
-		$conditions = ["`id` IN (SELECT `author-id` FROM `post` WHERE `author-id` = `contact`.`id`)",
-			"`id` IN (SELECT `owner-id` FROM `post` WHERE `owner-id` = `contact`.`id`)",
-			"`id` IN (SELECT `causer-id` FROM `post` WHERE `causer-id` = `contact`.`id`)",
-			"`id` IN (SELECT `cid` FROM `post-tag` WHERE `cid` = `contact`.`id`)",
-			"`id` IN (SELECT `cid` FROM `user-contact` WHERE `cid` = `contact`.`id`)"];
+		$conditions = ["`id` IN (SELECT `author-id` FROM `post`)",
+			"`id` IN (SELECT `owner-id` FROM `post`)",
+			"`id` IN (SELECT `causer-id` FROM `post` WHERE NOT `causer-id` IS NULL)",
+			"`id` IN (SELECT `cid` FROM `post-tag`)",
+			"`id` IN (SELECT `cid` FROM `user-contact`)"];
 
 		foreach ($conditions as $contact_condition) {
 			$condition = DBA::mergeConditions($base_condition,