Skip to content

Commit 07d7766

Browse files
committed
Recognize many to one relationships on sql import
1 parent d0b5f4c commit 07d7766

File tree

7 files changed

+73
-14
lines changed

7 files changed

+73
-14
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"jsonschema": "^1.4.1",
3131
"jspdf": "^2.5.1",
3232
"lexical": "^0.12.5",
33-
"node-sql-parser": "^5.0.0",
33+
"node-sql-parser": "^5.3.0",
3434
"react": "^18.2.0",
3535
"react-dom": "^18.2.0",
3636
"react-hotkeys-hook": "^4.4.1",

src/utils/importSQL/mariadb.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,13 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) {
149149

150150
relationship.updateConstraint = updateConstraint;
151151
relationship.deleteConstraint = deleteConstraint;
152-
relationship.cardinality = Cardinality.ONE_TO_ONE;
152+
153+
if (table.fields[startFieldId].unique) {
154+
relationship.cardinality = Cardinality.ONE_TO_ONE;
155+
} else {
156+
relationship.cardinality = Cardinality.MANY_TO_ONE;
157+
}
158+
153159
relationships.push(relationship);
154160
}
155161
}
@@ -231,7 +237,13 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) {
231237
relationship.endFieldId = endFieldId;
232238
relationship.updateConstraint = updateConstraint;
233239
relationship.deleteConstraint = deleteConstraint;
234-
relationship.cardinality = Cardinality.ONE_TO_ONE;
240+
241+
if (tables[startTableId].fields[startFieldId].unique) {
242+
relationship.cardinality = Cardinality.ONE_TO_ONE;
243+
} else {
244+
relationship.cardinality = Cardinality.MANY_TO_ONE;
245+
}
246+
235247
relationships.push(relationship);
236248

237249
relationships.forEach((r, i) => (r.id = i));

src/utils/importSQL/mssql.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,13 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) {
161161

162162
relationship.updateConstraint = updateConstraint;
163163
relationship.deleteConstraint = deleteConstraint;
164-
relationship.cardinality = Cardinality.ONE_TO_ONE;
164+
165+
if (table.fields[startFieldId].unique) {
166+
relationship.cardinality = Cardinality.ONE_TO_ONE;
167+
} else {
168+
relationship.cardinality = Cardinality.MANY_TO_ONE;
169+
}
170+
165171
relationships.push(relationship);
166172
}
167173
}
@@ -243,7 +249,13 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) {
243249
relationship.endFieldId = endFieldId;
244250
relationship.updateConstraint = updateConstraint;
245251
relationship.deleteConstraint = deleteConstraint;
246-
relationship.cardinality = Cardinality.ONE_TO_ONE;
252+
253+
if (tables[startTableId].fields[startFieldId].unique) {
254+
relationship.cardinality = Cardinality.ONE_TO_ONE;
255+
} else {
256+
relationship.cardinality = Cardinality.MANY_TO_ONE;
257+
}
258+
247259
relationships.push(relationship);
248260

249261
relationships.forEach((r, i) => (r.id = i));

src/utils/importSQL/mysql.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,13 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) {
149149

150150
relationship.updateConstraint = updateConstraint;
151151
relationship.deleteConstraint = deleteConstraint;
152-
relationship.cardinality = Cardinality.ONE_TO_ONE;
152+
153+
if (table.fields[startFieldId].unique) {
154+
relationship.cardinality = Cardinality.ONE_TO_ONE;
155+
} else {
156+
relationship.cardinality = Cardinality.MANY_TO_ONE;
157+
}
158+
153159
relationships.push(relationship);
154160
}
155161
}
@@ -231,7 +237,13 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) {
231237
relationship.endFieldId = endFieldId;
232238
relationship.updateConstraint = updateConstraint;
233239
relationship.deleteConstraint = deleteConstraint;
234-
relationship.cardinality = Cardinality.ONE_TO_ONE;
240+
241+
if (tables[startTableId].fields[startFieldId].unique) {
242+
relationship.cardinality = Cardinality.ONE_TO_ONE;
243+
} else {
244+
relationship.cardinality = Cardinality.MANY_TO_ONE;
245+
}
246+
235247
relationships.push(relationship);
236248

237249
relationships.forEach((r, i) => (r.id = i));

src/utils/importSQL/postgres.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,11 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) {
150150

151151
relationship.updateConstraint = updateConstraint;
152152
relationship.deleteConstraint = deleteConstraint;
153-
relationship.cardinality = Cardinality.ONE_TO_ONE;
153+
if (table.fields[startFieldId].unique) {
154+
relationship.cardinality = Cardinality.ONE_TO_ONE;
155+
} else {
156+
relationship.cardinality = Cardinality.MANY_TO_ONE;
157+
}
154158
relationships.push(relationship);
155159
}
156160
}
@@ -200,7 +204,13 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) {
200204
relationship.endFieldId = endFieldId;
201205
relationship.updateConstraint = updateConstraint;
202206
relationship.deleteConstraint = deleteConstraint;
203-
relationship.cardinality = Cardinality.ONE_TO_ONE;
207+
208+
if (table.fields[startFieldId].unique) {
209+
relationship.cardinality = Cardinality.ONE_TO_ONE;
210+
} else {
211+
relationship.cardinality = Cardinality.MANY_TO_ONE;
212+
}
213+
204214
relationships.push(relationship);
205215

206216
relationships.forEach((r, i) => (r.id = i));
@@ -292,6 +302,13 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) {
292302
relationship.updateConstraint = updateConstraint;
293303
relationship.deleteConstraint = deleteConstraint;
294304
relationship.cardinality = Cardinality.ONE_TO_ONE;
305+
306+
if (tables[startTableId].fields[startFieldId].unique) {
307+
relationship.cardinality = Cardinality.ONE_TO_ONE;
308+
} else {
309+
relationship.cardinality = Cardinality.MANY_TO_ONE;
310+
}
311+
295312
relationships.push(relationship);
296313

297314
relationships.forEach((r, i) => (r.id = i));

src/utils/importSQL/sqlite.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@ export function fromSQLite(ast, diagramDb = DB.GENERIC) {
166166

167167
relationship.updateConstraint = updateConstraint;
168168
relationship.deleteConstraint = deleteConstraint;
169-
relationship.cardinality = Cardinality.ONE_TO_ONE;
169+
170+
if (table.fields[startFieldId].unique) {
171+
relationship.cardinality = Cardinality.ONE_TO_ONE;
172+
} else {
173+
relationship.cardinality = Cardinality.MANY_TO_ONE;
174+
}
175+
170176
relationships.push(relationship);
171177
}
172178
}

0 commit comments

Comments
 (0)