Fix languageOneOf filter with only _unknown
authorChocobozzz <me@florianbigard.com>
Thu, 16 Apr 2020 15:00:40 +0000 (17:00 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 16 Apr 2020 15:00:40 +0000 (17:00 +0200)
server/models/video/video-query-builder.ts

index 655abf19871f7e23991e59fc5f5feac6a1a80bf5..015bf43de1ebce7bcbf2fd1de51a45f0a965c0b5 100644 (file)
@@ -203,23 +203,28 @@ function buildListQuery (model: typeof Model, options: BuildVideosQueryOptions)
   }
 
   if (options.languageOneOf) {
-    replacements.languageOneOf = options.languageOneOf.filter(l => l && l !== '_unknown')
-
-    let languagesQuery = '("video"."language" IN (:languageOneOf) OR '
+    const languages = options.languageOneOf.filter(l => l && l !== '_unknown')
+    const languagesQueryParts: string[] = []
+
+    if (languages.length !== 0) {
+      languagesQueryParts.push('("video"."language" IN (:languageOneOf)')
+      replacements.languageOneOf = languages
+
+      languagesQueryParts.push(
+        '  EXISTS (' +
+        '    SELECT 1 FROM "videoCaption" WHERE "videoCaption"."language" ' +
+        '    IN (' + createSafeIn(model, languages) + ') AND ' +
+        '    "videoCaption"."videoId" = "video"."id"' +
+        '  )' +
+        ')'
+      )
+    }
 
     if (options.languageOneOf.includes('_unknown')) {
-      languagesQuery += '"video"."language" IS NULL OR '
+      languagesQueryParts.push('"video"."language" IS NULL')
     }
 
-    and.push(
-      languagesQuery +
-      '  EXISTS (' +
-      '    SELECT 1 FROM "videoCaption" WHERE "videoCaption"."language" ' +
-      '    IN (' + createSafeIn(model, options.languageOneOf) + ') AND ' +
-      '    "videoCaption"."videoId" = "video"."id"' +
-      '  )' +
-      ')'
-    )
+    and.push(languagesQueryParts.join(' OR '))
   }
 
   // We don't exclude results in this if so if we do a count we don't need to add this complex clauses