mirror of https://github.com/Chocobozzz/PeerTube
Optimize videos list SQL query (another time)
parent
dbfd3e9bfe
commit
8d194d9a5c
|
@ -199,6 +199,8 @@ type AvailableForListOptions = {
|
||||||
|
|
||||||
// Force actorId to be a number to avoid SQL injections
|
// Force actorId to be a number to avoid SQL injections
|
||||||
const actorIdNumber = parseInt(options.actorId.toString(), 10)
|
const actorIdNumber = parseInt(options.actorId.toString(), 10)
|
||||||
|
|
||||||
|
// FIXME: It would be more efficient to use a CTE so we join AFTER the filters, but sequelize does not support it...
|
||||||
const query: IFindOptions<VideoModel> = {
|
const query: IFindOptions<VideoModel> = {
|
||||||
where: {
|
where: {
|
||||||
id: {
|
id: {
|
||||||
|
@ -215,8 +217,14 @@ type AvailableForListOptions = {
|
||||||
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
|
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
|
||||||
'INNER JOIN "account" ON "account"."id" = "videoChannel"."accountId" ' +
|
'INNER JOIN "account" ON "account"."id" = "videoChannel"."accountId" ' +
|
||||||
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
|
'INNER JOIN "actor" ON "account"."actorId" = "actor"."id" ' +
|
||||||
'LEFT JOIN "actorFollow" ON "actorFollow"."targetActorId" = "actor"."id" ' +
|
'WHERE "actor"."serverId" IS NULL ' +
|
||||||
'WHERE "actor"."serverId" IS NULL OR "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 +
|
||||||
')'
|
')'
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue