From f40761d9889d6db52152ad851494810fe0176d31 Mon Sep 17 00:00:00 2001 From: Jonas Osburg Date: Fri, 19 Jul 2024 12:29:06 +0200 Subject: [PATCH] perf(core): Improve hydrator performance for customFields (#2961) Remove a workaround that led to refetching relations in customFields. Prevent refetching of customFields during hydration --- .../helpers/entity-hydrator/entity-hydrator.service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts b/packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts index d57ce4da34..14845e2275 100644 --- a/packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts +++ b/packages/core/src/service/helpers/entity-hydrator/entity-hydrator.service.ts @@ -200,11 +200,16 @@ export class EntityHydrator { const missingRelations: string[] = []; for (const relation of options.relations.slice().sort()) { if (typeof relation === 'string') { - const parts = !relation.startsWith('customFields') ? relation.split('.') : [relation]; + const parts = relation.split('.'); let entity: Record | undefined = target; const path = []; for (const part of parts) { path.push(part); + // null = the relation has been fetched but was null in the database. + // undefined = the relation has not been fetched. + if (entity && entity[part] === null) { + break; + } if (entity && entity[part]) { entity = Array.isArray(entity[part]) ? entity[part][0] : entity[part]; } else {