Fix CPU usage on PostgreSQL

pull/2712/head
Chocobozzz 2020-02-21 14:11:11 +01:00
parent c06be12950
commit 49be0fd325
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 20 additions and 32 deletions

View File

@ -136,8 +136,7 @@ import {
MVideoThumbnailBlacklist,
MVideoWithAllFiles,
MVideoWithFile,
MVideoWithRights,
MStreamingPlaylistFiles
MVideoWithRights
} from '../../typings/models'
import { MVideoFile, MVideoFileStreamingPlaylistVideo } from '../../typings/models/video/video-file'
import { MThumbnail } from '../../typings/models/video/thumbnail'
@ -437,42 +436,31 @@ export type AvailableForListIDsOptions = {
}
if (options.followerActorId) {
let localVideosReq: WhereOptions = {}
let localVideosReq = ''
if (options.includeLocalVideos === true) {
localVideosReq = { remote: false }
localVideosReq = ' UNION ALL SELECT "video"."id" FROM "video" WHERE remote IS FALSE'
}
// Force actorId to be a number to avoid SQL injections
const actorIdNumber = parseInt(options.followerActorId.toString(), 10)
whereAnd.push({
[Op.or]: [
{
id: {
[ Op.in ]: Sequelize.literal(
'(' +
'SELECT "videoShare"."videoId" AS "id" FROM "videoShare" ' +
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "videoShare"."actorId" ' +
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
')'
)
}
},
{
id: {
[ Op.in ]: Sequelize.literal(
'(' +
'SELECT "video"."id" AS "id" FROM "video" ' +
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
'INNER JOIN "account" ON "account"."id" = "videoChannel"."accountId" ' +
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "actor"."id" ' +
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
')'
)
}
},
localVideosReq
]
id: {
[Op.in]: Sequelize.literal(
'(' +
'SELECT "videoShare"."videoId" AS "id" FROM "videoShare" ' +
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "videoShare"."actorId" ' +
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
' UNION ALL ' +
'SELECT "video"."id" AS "id" FROM "video" ' +
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
'INNER JOIN "account" ON "account"."id" = "videoChannel"."accountId" ' +
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "actor"."id" ' +
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
localVideosReq +
')'
)
}
})
}