Optimize local sql query
authorChocobozzz <me@florianbigard.com>
Mon, 23 Dec 2019 10:24:54 +0000 (11:24 +0100)
committerChocobozzz <me@florianbigard.com>
Mon, 23 Dec 2019 12:44:23 +0000 (13:44 +0100)
server/models/video/video.ts

index 316a66f35a03f148a31fb21bbdf9454f64fcb779..913d2d4a90a9f22c6c868d615539a220057b2e59 100644 (file)
@@ -143,7 +143,6 @@ import { MThumbnail } from '../../typings/models/video/thumbnail'
 import { VideoFile } from '@shared/models/videos/video-file.model'
 import { getHLSDirectory, getTorrentFileName, getTorrentFilePath, getVideoFilename, getVideoFilePath } from '@server/lib/video-paths'
 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
 const indexes: (ModelIndexesOptions & { where?: WhereOptions })[] = [
@@ -216,7 +215,6 @@ export enum ScopeNames {
   WITH_WEBTORRENT_FILES = 'WITH_WEBTORRENT_FILES',
   WITH_SCHEDULED_UPDATE = 'WITH_SCHEDULED_UPDATE',
   WITH_BLACKLISTED = 'WITH_BLACKLISTED',
-  WITH_BLOCKLIST = 'WITH_BLOCKLIST',
   WITH_USER_HISTORY = 'WITH_USER_HISTORY',
   WITH_STREAMING_PLAYLISTS = 'WITH_STREAMING_PLAYLISTS',
   WITH_USER_ID = 'WITH_USER_ID',
@@ -399,7 +397,13 @@ export type AvailableForListIDsOptions = {
       query.subQuery = false
     }
 
-    if (options.filter || options.accountId || options.videoChannelId) {
+    if (options.filter && (options.filter === 'local' || options.filter === 'all-local')) {
+      whereAnd.push({
+        remote: false
+      })
+    }
+
+    if (options.accountId || options.videoChannelId) {
       const videoChannelInclude: IncludeOptions = {
         attributes: [],
         model: VideoChannelModel.unscoped(),
@@ -412,28 +416,14 @@ export type AvailableForListIDsOptions = {
         }
       }
 
-      if (options.filter || options.accountId) {
+      if (options.accountId) {
         const accountInclude: IncludeOptions = {
           attributes: [],
           model: AccountModel.unscoped(),
           required: true
         }
 
-        if (options.filter) {
-          accountInclude.include = [
-            {
-              attributes: [],
-              model: ActorModel.unscoped(),
-              required: true,
-              where: VideoModel.buildActorWhereWithFilter(options.filter)
-            }
-          ]
-        }
-
-        if (options.accountId) {
-          accountInclude.where = { id: options.accountId }
-        }
-
+        accountInclude.where = { id: options.accountId }
         videoChannelInclude.include = [ accountInclude ]
       }
 
@@ -592,9 +582,6 @@ export type AvailableForListIDsOptions = {
     }
 
     return query
-  },
-  [ScopeNames.WITH_BLOCKLIST]: {
-
   },
   [ ScopeNames.WITH_THUMBNAILS ]: {
     include: [
@@ -1713,16 +1700,6 @@ export class VideoModel extends Model<VideoModel> {
     }
   }
 
-  private static buildActorWhereWithFilter (filter?: VideoFilter) {
-    if (filter && (filter === 'local' || filter === 'all-local')) {
-      return {
-        serverId: null
-      }
-    }
-
-    return {}
-  }
-
   private static async getAvailableForApi (
     query: FindOptions & { where?: null }, // Forbid where field in query
     options: AvailableForListIDsOptions,