From 07d7766fa8e3153d258b187fe363b519e89d48db Mon Sep 17 00:00:00 2001 From: 1ilit <1ilit@proton.me> Date: Tue, 6 Aug 2024 14:33:35 +0300 Subject: [PATCH] Recognize many to one relationships on sql import --- package-lock.json | 8 ++++---- package.json | 2 +- src/utils/importSQL/mariadb.js | 16 ++++++++++++++-- src/utils/importSQL/mssql.js | 16 ++++++++++++++-- src/utils/importSQL/mysql.js | 16 ++++++++++++++-- src/utils/importSQL/postgres.js | 21 +++++++++++++++++++-- src/utils/importSQL/sqlite.js | 8 +++++++- 7 files changed, 73 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd67469..4227343 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "jsonschema": "^1.4.1", "jspdf": "^2.5.1", "lexical": "^0.12.5", - "node-sql-parser": "^5.0.0", + "node-sql-parser": "^5.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hotkeys-hook": "^4.4.1", @@ -4421,9 +4421,9 @@ "dev": true }, "node_modules/node-sql-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-5.0.0.tgz", - "integrity": "sha512-hkNU1gIT8BNe8vmcsU7uYie0gzow/6AIj5KnGRBJQSZlgEu1NNuLVS11it5gAEdpmvJHelc34BwR439Iela+zQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-5.3.0.tgz", + "integrity": "sha512-KjomhTRfjmzvUNZ40BBF96ZII8ME68AyQXALeTQ3zEEfqup1zhhM91XDpuG+GEEO5urmWgxMJMJ9u3xmL+MzMw==", "dependencies": { "@types/pegjs": "^0.10.0", "big-integer": "^1.6.48" diff --git a/package.json b/package.json index d50364d..99810fe 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "jsonschema": "^1.4.1", "jspdf": "^2.5.1", "lexical": "^0.12.5", - "node-sql-parser": "^5.0.0", + "node-sql-parser": "^5.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hotkeys-hook": "^4.4.1", diff --git a/src/utils/importSQL/mariadb.js b/src/utils/importSQL/mariadb.js index eb430f3..393bae6 100644 --- a/src/utils/importSQL/mariadb.js +++ b/src/utils/importSQL/mariadb.js @@ -149,7 +149,13 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); } } @@ -231,7 +237,13 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) { relationship.endFieldId = endFieldId; relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (tables[startTableId].fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); relationships.forEach((r, i) => (r.id = i)); diff --git a/src/utils/importSQL/mssql.js b/src/utils/importSQL/mssql.js index 4b63685..f74d43f 100644 --- a/src/utils/importSQL/mssql.js +++ b/src/utils/importSQL/mssql.js @@ -161,7 +161,13 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); } } @@ -243,7 +249,13 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) { relationship.endFieldId = endFieldId; relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (tables[startTableId].fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); relationships.forEach((r, i) => (r.id = i)); diff --git a/src/utils/importSQL/mysql.js b/src/utils/importSQL/mysql.js index caa06d6..ecf40e8 100644 --- a/src/utils/importSQL/mysql.js +++ b/src/utils/importSQL/mysql.js @@ -149,7 +149,13 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); } } @@ -231,7 +237,13 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) { relationship.endFieldId = endFieldId; relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (tables[startTableId].fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); relationships.forEach((r, i) => (r.id = i)); diff --git a/src/utils/importSQL/postgres.js b/src/utils/importSQL/postgres.js index d3ded42..88e100c 100644 --- a/src/utils/importSQL/postgres.js +++ b/src/utils/importSQL/postgres.js @@ -150,7 +150,11 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } relationships.push(relationship); } } @@ -200,7 +204,13 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { relationship.endFieldId = endFieldId; relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); relationships.forEach((r, i) => (r.id = i)); @@ -292,6 +302,13 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (tables[startTableId].fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); relationships.forEach((r, i) => (r.id = i)); diff --git a/src/utils/importSQL/sqlite.js b/src/utils/importSQL/sqlite.js index 2885f11..6c8bae9 100644 --- a/src/utils/importSQL/sqlite.js +++ b/src/utils/importSQL/sqlite.js @@ -166,7 +166,13 @@ export function fromSQLite(ast, diagramDb = DB.GENERIC) { relationship.updateConstraint = updateConstraint; relationship.deleteConstraint = deleteConstraint; - relationship.cardinality = Cardinality.ONE_TO_ONE; + + if (table.fields[startFieldId].unique) { + relationship.cardinality = Cardinality.ONE_TO_ONE; + } else { + relationship.cardinality = Cardinality.MANY_TO_ONE; + } + relationships.push(relationship); } }