Skip to content

Commit 8b88fbd

Browse files
committed
fix: fix conditional lookup field
1 parent 0dc138b commit 8b88fbd

2 files changed

Lines changed: 9 additions & 4 deletions

File tree

apps/nestjs-backend/src/features/record/query-builder/field-cte-visitor.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,9 +1352,14 @@ export class FieldCteVisitor implements IFieldVisitor<ICteResult> {
13521352
if (isDateLikeField(foreignField) || isDateLikeField(hostField)) {
13531353
return { ok: false, residual: null };
13541354
}
1355+
// When the foreign scope is the same table, compare the host record's fieldId
1356+
// against the foreign row's referenced field so "Field A is {Field B}" reads as
1357+
// host.FieldA = foreign.FieldB instead of the reverse.
1358+
const hostJoinField = foreignTable.id === table.id ? foreignField : hostField;
1359+
const foreignJoinField = foreignTable.id === table.id ? hostField : foreignField;
13551360
const joinKey = this.buildConditionalEqualityJoinKey(
1356-
hostField,
1357-
foreignField,
1361+
hostJoinField,
1362+
foreignJoinField,
13581363
mainAlias,
13591364
foreignAlias
13601365
);

apps/nestjs-backend/test/conditional-lookup.e2e-spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,15 +1146,15 @@ describe('OpenAPI Conditional Lookup field (e2e)', () => {
11461146
await permanentDeleteTable(baseId, table.id);
11471147
});
11481148

1149-
it('should return Title2 from foreign rows where Name2 equals host Name', async () => {
1149+
it('should return Title2 from foreign rows where host Name2 matches foreign Name', async () => {
11501150
const records = await getRecords(table.id, { fieldKeyType: FieldKeyType.Id });
11511151
const row1 = records.records.find((r) => r.id === row1Id)!;
11521152
const row2 = records.records.find((r) => r.id === row2Id)!;
11531153
const row3 = records.records.find((r) => r.id === row3Id)!;
11541154
const row4 = records.records.find((r) => r.id === row4Id)!;
11551155

11561156
expect(row1.fields[lookupAltTitleField.id]).toEqual(['00001']);
1157-
expect(row2.fields[lookupAltTitleField.id]).toEqual(['00002']);
1157+
expect(row2.fields[lookupAltTitleField.id] ?? []).toEqual([]);
11581158
expect(row3.fields[lookupAltTitleField.id] ?? []).toEqual([]);
11591159
expect(row4.fields[lookupAltTitleField.id] ?? []).toEqual([]);
11601160
});

0 commit comments

Comments
 (0)