Skip to content
This repository was archived by the owner on Mar 1, 2026. It is now read-only.

Commit 6780461

Browse files
committed
fix(cli): improve field matching logic during db pull
1 parent c2d4b36 commit 6780461

1 file changed

Lines changed: 42 additions & 24 deletions

File tree

  • packages/cli/src/actions

packages/cli/src/actions/db.ts

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -241,19 +241,30 @@ async function runPull(options: PullOptions) {
241241
}
242242

243243
newDataModel.fields.forEach((f) => {
244-
const originalFields = originalDataModel.fields.filter((d) => {
245-
return (
246-
getDbName(d) === getDbName(f) ||
247-
(getRelationFkName(d as any) === getRelationFkName(f as any) &&
244+
// Prioritized matching: exact db name > relation FK name > type reference
245+
let originalFields = originalDataModel.fields.filter((d) => getDbName(d) === getDbName(f));
246+
247+
if (originalFields.length === 0) {
248+
// Try matching by relation FK name
249+
originalFields = originalDataModel.fields.filter(
250+
(d) =>
251+
getRelationFkName(d as any) === getRelationFkName(f as any) &&
248252
!!getRelationFkName(d as any) &&
249-
!!getRelationFkName(f as any)) ||
250-
(f.$type === 'DataField' &&
253+
!!getRelationFkName(f as any),
254+
);
255+
}
256+
257+
if (originalFields.length === 0) {
258+
// Try matching by type reference
259+
originalFields = originalDataModel.fields.filter(
260+
(d) =>
261+
f.$type === 'DataField' &&
251262
d.$type === 'DataField' &&
252263
f.type.reference?.ref &&
253264
d.type.reference?.ref &&
254-
getDbName(f.type.reference.ref) === getDbName(d.type.reference.ref))
265+
getDbName(f.type.reference.ref) === getDbName(d.type.reference.ref),
255266
);
256-
});
267+
}
257268

258269
if (originalFields.length > 1) {
259270
console.warn(
@@ -297,22 +308,29 @@ async function runPull(options: PullOptions) {
297308
});
298309
});
299310
originalDataModel.fields
300-
.filter(
301-
(f) =>
302-
!newDataModel.fields.find((d) => {
303-
return (
304-
getDbName(d) === getDbName(f) ||
305-
(getRelationFkName(d as any) === getRelationFkName(f as any) &&
306-
!!getRelationFkName(d as any) &&
307-
!!getRelationFkName(f as any)) ||
308-
(f.$type === 'DataField' &&
309-
d.$type === 'DataField' &&
310-
f.type.reference?.ref &&
311-
d.type.reference?.ref &&
312-
getDbName(f.type.reference.ref) === getDbName(d.type.reference.ref))
313-
);
314-
}),
315-
)
311+
.filter((f) => {
312+
// Prioritized matching: exact db name > relation FK name > type reference
313+
const matchByDbName = newDataModel.fields.find((d) => getDbName(d) === getDbName(f));
314+
if (matchByDbName) return false;
315+
316+
const matchByFkName = newDataModel.fields.find(
317+
(d) =>
318+
getRelationFkName(d as any) === getRelationFkName(f as any) &&
319+
!!getRelationFkName(d as any) &&
320+
!!getRelationFkName(f as any),
321+
);
322+
if (matchByFkName) return false;
323+
324+
const matchByTypeRef = newDataModel.fields.find(
325+
(d) =>
326+
f.$type === 'DataField' &&
327+
d.$type === 'DataField' &&
328+
f.type.reference?.ref &&
329+
d.type.reference?.ref &&
330+
getDbName(f.type.reference.ref) === getDbName(d.type.reference.ref),
331+
);
332+
return !matchByTypeRef;
333+
})
316334
.forEach((f) => {
317335
const _model = f.$container;
318336
const index = _model.fields.findIndex((d) => d === f);

0 commit comments

Comments
 (0)