Skip to content

Commit 08d428c

Browse files
authored
fix(server): duplicate faces, face insert query failing (immich-app#13294)
fix duplicate faces, query failing
1 parent 9d0f038 commit 08d428c

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

server/src/repositories/person.repository.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ export class PersonRepository implements IPersonRepository {
279279
faceIdsToRemove: string[],
280280
embeddingsToAdd?: FaceSearchEntity[],
281281
): Promise<void> {
282-
const query = this.faceSearchRepository.createQueryBuilder().select('1');
282+
const query = this.faceSearchRepository.createQueryBuilder().select('1').fromDummy();
283283
if (facesToAdd.length > 0) {
284284
const insertCte = this.assetFaceRepository.createQueryBuilder().insert().values(facesToAdd);
285285
query.addCommonTableExpression(insertCte, 'added');
@@ -296,6 +296,7 @@ export class PersonRepository implements IPersonRepository {
296296
if (embeddingsToAdd?.length) {
297297
const embeddingCte = this.faceSearchRepository.createQueryBuilder().insert().values(embeddingsToAdd).orIgnore();
298298
query.addCommonTableExpression(embeddingCte, 'embeddings');
299+
query.getQuery(); // typeorm mixes up parameters without this
299300
}
300301

301302
await query.execute();

server/src/services/person.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ export class PersonService extends BaseService {
325325

326326
if (match && !mlFaceIds.delete(match.id)) {
327327
embeddings.push({ faceId: match.id, embedding });
328-
} else {
328+
} else if (!match) {
329329
const faceId = this.cryptoRepository.randomUUID();
330330
facesToAdd.push({
331331
id: faceId,

0 commit comments

Comments
 (0)