@@ -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