@@ -154,12 +154,33 @@ export type Database = {
154154 relationship . referenced_schema === table . schema &&
155155 relationship . relation === table . name
156156 )
157- . sort (
158- ( a , b ) =>
159- a . foreign_key_name . localeCompare ( b . foreign_key_name ) ||
160- a . referenced_relation . localeCompare ( b . referenced_relation ) ||
161- a . referenced_columns [ 0 ] . localeCompare ( b . referenced_columns [ 0 ] )
162- )
157+ . sort ( ( a , b ) => {
158+ // First try to sort by foreign key name.
159+ const foreignKeyCompare = a . foreign_key_name . localeCompare (
160+ b . foreign_key_name
161+ )
162+ if ( foreignKeyCompare !== 0 ) return foreignKeyCompare
163+
164+ // Then try to sort by referenced relation.
165+ const referencedRelationCompare = a . referenced_relation . localeCompare (
166+ b . referenced_relation
167+ )
168+ if ( referencedRelationCompare !== 0 ) return referencedRelationCompare
169+
170+ // Then try to sort by referenced columns, finding the first difference.
171+ for (
172+ let i = 0 ;
173+ i < Math . min ( a . referenced_columns . length , b . referenced_columns . length ) ;
174+ i ++
175+ ) {
176+ const refColCompare = a . referenced_columns [ i ] . localeCompare (
177+ b . referenced_columns [ i ]
178+ )
179+ if ( refColCompare !== 0 ) return refColCompare
180+ }
181+ // If all referenced columns are the same, sort by the number of referenced columns.
182+ return a . referenced_columns . length - b . referenced_columns . length
183+ } )
163184 . map (
164185 ( relationship ) => `{
165186 foreignKeyName: ${ JSON . stringify ( relationship . foreign_key_name ) }
@@ -232,12 +253,33 @@ export type Database = {
232253 relationship . referenced_schema === view . schema &&
233254 relationship . relation === view . name
234255 )
235- . sort (
236- ( a , b ) =>
237- a . foreign_key_name . localeCompare ( b . foreign_key_name ) ||
238- a . referenced_relation . localeCompare ( b . referenced_relation ) ||
239- a . referenced_columns [ 0 ] . localeCompare ( b . referenced_columns [ 0 ] )
240- )
256+ . sort ( ( a , b ) => {
257+ // First try to sort by foreign key name.
258+ const foreignKeyCompare = a . foreign_key_name . localeCompare (
259+ b . foreign_key_name
260+ )
261+ if ( foreignKeyCompare !== 0 ) return foreignKeyCompare
262+
263+ // Then try to sort by referenced relation.
264+ const referencedRelationCompare = a . referenced_relation . localeCompare (
265+ b . referenced_relation
266+ )
267+ if ( referencedRelationCompare !== 0 ) return referencedRelationCompare
268+
269+ // Then try to sort by referenced columns, finding the first difference.
270+ for (
271+ let i = 0 ;
272+ i < Math . min ( a . referenced_columns . length , b . referenced_columns . length ) ;
273+ i ++
274+ ) {
275+ const refColCompare = a . referenced_columns [ i ] . localeCompare (
276+ b . referenced_columns [ i ]
277+ )
278+ if ( refColCompare !== 0 ) return refColCompare
279+ }
280+ // If all referenced columns are the same, sort by the number of referenced columns.
281+ return a . referenced_columns . length - b . referenced_columns . length
282+ } )
241283 . map (
242284 ( relationship ) => `{
243285 foreignKeyName: ${ JSON . stringify ( relationship . foreign_key_name ) }
0 commit comments