mirror of https://github.com/Chocobozzz/PeerTube
Optimize comment RSS sql query
parent
1c5c31a1ce
commit
1c58423f6c
|
@ -129,6 +129,30 @@ function buildBlockedAccountSQL (blockerIds: number[]) {
|
||||||
'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')'
|
'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) {
|
function buildServerIdsFollowedBy (actorId: any) {
|
||||||
const actorIdNumber = parseInt(actorId + '', 10)
|
const actorIdNumber = parseInt(actorId + '', 10)
|
||||||
|
|
||||||
|
@ -201,6 +225,7 @@ function searchAttribute (sourceField?: string, targetField?: string) {
|
||||||
|
|
||||||
export {
|
export {
|
||||||
buildBlockedAccountSQL,
|
buildBlockedAccountSQL,
|
||||||
|
buildBlockedAccountSQLOptimized,
|
||||||
buildLocalActorIdsIn,
|
buildLocalActorIdsIn,
|
||||||
SortType,
|
SortType,
|
||||||
buildLocalAccountIdsIn,
|
buildLocalAccountIdsIn,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import * as Bluebird from 'bluebird'
|
import * as Bluebird from 'bluebird'
|
||||||
import { uniq } from 'lodash'
|
import { uniq } from 'lodash'
|
||||||
import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction } from 'sequelize'
|
import { FindOptions, Op, Order, ScopeOptions, Sequelize, Transaction, WhereOptions } from 'sequelize'
|
||||||
import {
|
import {
|
||||||
AllowNull,
|
AllowNull,
|
||||||
BelongsTo,
|
BelongsTo,
|
||||||
|
@ -40,7 +40,7 @@ import {
|
||||||
import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse'
|
import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse'
|
||||||
import { AccountModel } from '../account/account'
|
import { AccountModel } from '../account/account'
|
||||||
import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
|
import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
|
||||||
import { buildBlockedAccountSQL, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
|
import { buildBlockedAccountSQL, buildBlockedAccountSQLOptimized, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
|
||||||
import { VideoModel } from './video'
|
import { VideoModel } from './video'
|
||||||
import { VideoChannelModel } from './video-channel'
|
import { VideoChannelModel } from './video-channel'
|
||||||
|
|
||||||
|
@ -460,19 +460,20 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
|
||||||
const serverActor = await getServerActor()
|
const serverActor = await getServerActor()
|
||||||
const { start, count, videoId, accountId, videoChannelId } = parameters
|
const { start, count, videoId, accountId, videoChannelId } = parameters
|
||||||
|
|
||||||
const accountExclusion = {
|
const whereAnd: WhereOptions[] = buildBlockedAccountSQLOptimized(
|
||||||
[Op.notIn]: Sequelize.literal(
|
'"VideoCommentModel"."accountId"',
|
||||||
'(' + buildBlockedAccountSQL([ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]) + ')'
|
[ serverActor.Account.id, '"Video->VideoChannel"."accountId"' ]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (accountId) {
|
||||||
|
whereAnd.push({
|
||||||
|
[Op.eq]: accountId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const accountWhere = {
|
||||||
|
[Op.and]: whereAnd
|
||||||
}
|
}
|
||||||
const accountWhere = accountId
|
|
||||||
? {
|
|
||||||
[Op.and]: {
|
|
||||||
...accountExclusion,
|
|
||||||
[Op.eq]: accountId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: accountExclusion
|
|
||||||
|
|
||||||
const videoChannelWhere = videoChannelId ? { id: videoChannelId } : undefined
|
const videoChannelWhere = videoChannelId ? { id: videoChannelId } : undefined
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue