Litte SQL optimzation in videos list
This commit is contained in:
parent
5def76ebba
commit
1c5fed88c5
|
@ -143,6 +143,7 @@ import { MThumbnail } from '../../typings/models/video/thumbnail'
|
||||||
import { VideoFile } from '@shared/models/videos/video-file.model'
|
import { VideoFile } from '@shared/models/videos/video-file.model'
|
||||||
import { getHLSDirectory, getTorrentFileName, getTorrentFilePath, getVideoFilename, getVideoFilePath } from '@server/lib/video-paths'
|
import { getHLSDirectory, getTorrentFileName, getTorrentFilePath, getVideoFilename, getVideoFilePath } from '@server/lib/video-paths'
|
||||||
import * as validator from 'validator'
|
import * as validator from 'validator'
|
||||||
|
import { ActorFollowModel } from '@server/models/activitypub/actor-follow'
|
||||||
|
|
||||||
// FIXME: Define indexes here because there is an issue with TS and Sequelize.literal when called directly in the annotation
|
// FIXME: Define indexes here because there is an issue with TS and Sequelize.literal when called directly in the annotation
|
||||||
const indexes: (ModelIndexesOptions & { where?: WhereOptions })[] = [
|
const indexes: (ModelIndexesOptions & { where?: WhereOptions })[] = [
|
||||||
|
@ -440,19 +441,16 @@ export type AvailableForListIDsOptions = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.followerActorId) {
|
if (options.followerActorId) {
|
||||||
let localVideosReq = ''
|
let localVideosReq: WhereOptions = {}
|
||||||
if (options.includeLocalVideos === true) {
|
if (options.includeLocalVideos === true) {
|
||||||
localVideosReq = ' UNION ALL ' +
|
localVideosReq = { remote: false }
|
||||||
'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" ' +
|
|
||||||
'WHERE "actor"."serverId" IS NULL'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force actorId to be a number to avoid SQL injections
|
// Force actorId to be a number to avoid SQL injections
|
||||||
const actorIdNumber = parseInt(options.followerActorId.toString(), 10)
|
const actorIdNumber = parseInt(options.followerActorId.toString(), 10)
|
||||||
whereAnd.push({
|
whereAnd.push({
|
||||||
|
[Op.or]: [
|
||||||
|
{
|
||||||
id: {
|
id: {
|
||||||
[ Op.in ]: Sequelize.literal(
|
[ Op.in ]: Sequelize.literal(
|
||||||
'(' +
|
'(' +
|
||||||
|
@ -466,10 +464,12 @@ export type AvailableForListIDsOptions = {
|
||||||
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
|
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
|
||||||
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "actor"."id" ' +
|
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "actor"."id" ' +
|
||||||
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
|
'WHERE "actorFollow"."actorId" = ' + actorIdNumber +
|
||||||
localVideosReq +
|
|
||||||
')'
|
')'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
localVideosReq
|
||||||
|
]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue