Skip to content

Commit 61772da

Browse files
authored
Merge pull request #629 from supabase/fix/sort-relationships-by-referenced-table
fix(typegen): sort relationships by (fkey name, referenced table)
2 parents b269dd3 + 72fe5c6 commit 61772da

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

src/server/templates/typescript.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,10 @@ export interface Database {
160160
relationship.schema === table.schema &&
161161
relationship.relation === table.name
162162
)
163-
.sort(({ foreign_key_name: a }, { foreign_key_name: b }) =>
164-
a.localeCompare(b)
163+
.sort(
164+
(a, b) =>
165+
a.foreign_key_name.localeCompare(b.foreign_key_name) ||
166+
a.referenced_relation.localeCompare(b.referenced_relation)
165167
)
166168
.map(
167169
(relationship) => `{

test/db/00-init.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,5 @@ create table user_details (
101101
user_id int8 references users(id) primary key,
102102
details text
103103
);
104+
105+
create view a_view as select id from users;

test/server/typegen.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ test('typegen', async () => {
8585
"user-id"?: number
8686
}
8787
Relationships: [
88+
{
89+
foreignKeyName: "todos_user-id_fkey"
90+
columns: ["user-id"]
91+
isOneToOne: false
92+
referencedRelation: "a_view"
93+
referencedColumns: ["id"]
94+
},
8895
{
8996
foreignKeyName: "todos_user-id_fkey"
9097
columns: ["user-id"]
@@ -115,6 +122,13 @@ test('typegen', async () => {
115122
user_id?: number
116123
}
117124
Relationships: [
125+
{
126+
foreignKeyName: "user_details_user_id_fkey"
127+
columns: ["user_id"]
128+
isOneToOne: true
129+
referencedRelation: "a_view"
130+
referencedColumns: ["id"]
131+
},
118132
{
119133
foreignKeyName: "user_details_user_id_fkey"
120134
columns: ["user_id"]
@@ -172,6 +186,18 @@ test('typegen', async () => {
172186
}
173187
}
174188
Views: {
189+
a_view: {
190+
Row: {
191+
id: number | null
192+
}
193+
Insert: {
194+
id?: number | null
195+
}
196+
Update: {
197+
id?: number | null
198+
}
199+
Relationships: []
200+
}
175201
todos_matview: {
176202
Row: {
177203
details: string | null
@@ -186,6 +212,13 @@ test('typegen', async () => {
186212
referencedRelation: "users"
187213
referencedColumns: ["id"]
188214
},
215+
{
216+
foreignKeyName: "todos_user-id_fkey"
217+
columns: ["user-id"]
218+
isOneToOne: false
219+
referencedRelation: "a_view"
220+
referencedColumns: ["id"]
221+
},
189222
{
190223
foreignKeyName: "todos_user-id_fkey"
191224
columns: ["user-id"]
@@ -219,6 +252,13 @@ test('typegen', async () => {
219252
referencedRelation: "users"
220253
referencedColumns: ["id"]
221254
},
255+
{
256+
foreignKeyName: "todos_user-id_fkey"
257+
columns: ["user-id"]
258+
isOneToOne: false
259+
referencedRelation: "a_view"
260+
referencedColumns: ["id"]
261+
},
222262
{
223263
foreignKeyName: "todos_user-id_fkey"
224264
columns: ["user-id"]

0 commit comments

Comments
 (0)