|
|
@@ -9,12 +9,10 @@ import {
|
|
|
} from '@vendure/common/lib/generated-types';
|
|
|
import { ID } from '@vendure/common/lib/shared-types';
|
|
|
import { unique } from '@vendure/common/lib/unique';
|
|
|
-import { QueryBuilder, SelectQueryBuilder } from 'typeorm';
|
|
|
+import { Brackets, QueryBuilder, SelectQueryBuilder } from 'typeorm';
|
|
|
|
|
|
import { SearchIndexItem } from '../entities/search-index-item.entity';
|
|
|
|
|
|
-import { identifierFields } from './search-strategy-common';
|
|
|
-
|
|
|
/**
|
|
|
* Maps a raw database result to a SearchResult.
|
|
|
*/
|
|
|
@@ -131,31 +129,34 @@ export function applyLanguageConstraints(
|
|
|
defaultLanguageCode: LanguageCode,
|
|
|
) {
|
|
|
const lcEscaped = qb.escape('languageCode');
|
|
|
+ const ciEscaped = qb.escape('channelId');
|
|
|
+ const pviEscaped = qb.escape('productVariantId');
|
|
|
+
|
|
|
if (languageCode === defaultLanguageCode) {
|
|
|
- qb.andWhere(`si.${lcEscaped} = :languageCode`, { languageCode });
|
|
|
+ qb.andWhere(`si.${lcEscaped} = :languageCode`, {
|
|
|
+ languageCode,
|
|
|
+ });
|
|
|
} else {
|
|
|
qb.andWhere(`si.${lcEscaped} IN (:...languageCodes)`, {
|
|
|
languageCodes: [languageCode, defaultLanguageCode],
|
|
|
});
|
|
|
|
|
|
- const joinFieldConditions = identifierFields
|
|
|
- .map(field => `si.${qb.escape(field)} = sil.${qb.escape(field)}`)
|
|
|
- .join(' AND ');
|
|
|
-
|
|
|
qb.leftJoin(
|
|
|
SearchIndexItem,
|
|
|
'sil',
|
|
|
- `
|
|
|
- ${joinFieldConditions}
|
|
|
- AND si.${lcEscaped} != sil.${lcEscaped}
|
|
|
- AND sil.${lcEscaped} = :languageCode
|
|
|
- `,
|
|
|
+ `sil.${lcEscaped} = :languageCode AND sil.${ciEscaped} = si.${ciEscaped} AND sil.${pviEscaped} = si.${pviEscaped}`,
|
|
|
{
|
|
|
languageCode,
|
|
|
},
|
|
|
);
|
|
|
|
|
|
- qb.andWhere(`sil.${lcEscaped} IS NULL`);
|
|
|
+ qb.andWhere(
|
|
|
+ new Brackets(qb1 => {
|
|
|
+ qb1.where(`si.${lcEscaped} = :languageCode1`, {
|
|
|
+ languageCode1: languageCode,
|
|
|
+ }).orWhere(`sil.${lcEscaped} IS NULL`);
|
|
|
+ }),
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
return qb;
|