From 1c58423f6c42f494ea6358043bcb5a735b7bd5d7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 20 Aug 2020 08:52:16 +0200 Subject: Optimize comment RSS sql query --- server/models/utils.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'server/models/utils.ts') diff --git a/server/models/utils.ts b/server/models/utils.ts index d706d9ea8..6e5522346 100644 --- a/server/models/utils.ts +++ b/server/models/utils.ts @@ -129,6 +129,30 @@ function buildBlockedAccountSQL (blockerIds: number[]) { 'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')' } +function buildBlockedAccountSQLOptimized (columnNameJoin: string, blockerIds: number[]) { + const blockerIdsString = blockerIds.join(', ') + + return [ + literal( + `NOT EXISTS (` + + ` SELECT 1 FROM "accountBlocklist" ` + + ` WHERE "targetAccountId" = ${columnNameJoin} ` + + ` AND "accountId" IN (${blockerIdsString})` + + `)` + ), + + literal( + `NOT EXISTS (` + + ` SELECT 1 FROM "account" ` + + ` INNER JOIN "actor" ON account."actorId" = actor.id ` + + ` INNER JOIN "serverBlocklist" ON "actor"."serverId" = "serverBlocklist"."targetServerId" ` + + ` WHERE "account"."id" = ${columnNameJoin} ` + + ` AND "serverBlocklist"."accountId" IN (${blockerIdsString})` + + `)` + ) + ] +} + function buildServerIdsFollowedBy (actorId: any) { const actorIdNumber = parseInt(actorId + '', 10) @@ -201,6 +225,7 @@ function searchAttribute (sourceField?: string, targetField?: string) { export { buildBlockedAccountSQL, + buildBlockedAccountSQLOptimized, buildLocalActorIdsIn, SortType, buildLocalAccountIdsIn, -- cgit v1.2.3