const languagesQueryParts: string[] = []
if (languages.length !== 0) {
- languagesQueryParts.push('("video"."language" IN (:languageOneOf)')
+ 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"' +
- ' )' +
+ 'EXISTS (' +
+ ' SELECT 1 FROM "videoCaption" WHERE "videoCaption"."language" ' +
+ ' IN (' + createSafeIn(model, languages) + ') AND ' +
+ ' "videoCaption"."videoId" = "video"."id"' +
')'
)
}
languagesQueryParts.push('"video"."language" IS NULL')
}
- and.push(languagesQueryParts.join(' OR '))
+ if (languagesQueryParts.length !== 0) {
+ 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
if (options.isCount !== true) {
if (exists(options.sort)) {
+ if (options.sort === '-originallyPublishedAt' || options.sort === 'originallyPublishedAt') {
+ attributes.push('COALESCE("video"."originallyPublishedAt", "video"."publishedAt") AS "publishedAtForOrder"')
+ }
+
order = buildOrder(model, options.sort)
suffix += `${order} `
}
if (field.toLowerCase() === 'match') { // Search
firstSort = '"similarity"'
+ } else if (field === 'originallyPublishedAt') {
+ firstSort = '"publishedAtForOrder"'
} else if (field.includes('.')) {
firstSort = field
} else {