diff --git a/src/components/EditorHeader/Modal/Modal.jsx b/src/components/EditorHeader/Modal/Modal.jsx index 8b634c1..037097a 100644 --- a/src/components/EditorHeader/Modal/Modal.jsx +++ b/src/components/EditorHeader/Modal/Modal.jsx @@ -10,6 +10,7 @@ import { useState } from "react"; import { db } from "../../../data/db"; import { useAreas, + useEnums, useNotes, useSettings, useTables, @@ -34,6 +35,7 @@ import { json } from "@codemirror/lang-json"; import { githubLight } from "@uiw/codemirror-theme-github"; import { useTranslation } from "react-i18next"; import { importSQL } from "../../../utils/importSQL"; +import { databases } from "../../../data/databases"; const languageExtension = { sql: [sql()], @@ -58,6 +60,7 @@ export default function Modal({ const { setAreas } = useAreas(); const { setTypes } = useTypes(); const { settings } = useSettings(); + const { setEnums } = useEnums(); const { setTransform } = useTransform(); const { setUndoStack, setRedoStack } = useUndoRedo(); const [importSource, setImportSource] = useState({ @@ -149,7 +152,8 @@ export default function Modal({ setTransform((prev) => ({ ...prev, pan: { x: 0, y: 0 } })); setNotes([]); setAreas([]); - setTypes(d.types ?? []); + if (databases[database].hasTypes) setTypes(d.types ?? []); + if (databases[database].hasEnums) setEnums(d.enums ?? []); setUndoStack([]); setRedoStack([]); } else { diff --git a/src/utils/importSQL/postgres.js b/src/utils/importSQL/postgres.js index 089c303..1b2f16a 100644 --- a/src/utils/importSQL/postgres.js +++ b/src/utils/importSQL/postgres.js @@ -21,6 +21,7 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { const tables = []; const relationships = []; const types = []; + const enums = []; ast.forEach((e) => { if (e.type === "create") { @@ -176,6 +177,14 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { }); if (found !== -1) tables[found].indices.forEach((i, j) => (i.id = j)); + } else if (e.keyword === "type") { + if (e.resource === "enum") { + const newEnum = { + name: e.name.name, + values: e.create_definitions.value.map((x) => x.value), + }; + enums.push(newEnum); + } } } else if (e.type === "alter") { e.expr.forEach((expr) => { @@ -242,5 +251,5 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { relationships.forEach((r, i) => (r.id = i)); - return { tables, relationships, types }; + return { tables, relationships, types, enums }; } diff --git a/src/utils/issues.js b/src/utils/issues.js index f24a3dd..e2a4fdf 100644 --- a/src/utils/issues.js +++ b/src/utils/issues.js @@ -9,6 +9,8 @@ function checkDefault(field, database) { if (!field.notNull && field.default.toLowerCase() === "null") return true; + if(!dbToTypes[database][field.type].checkDefault) return true; + return dbToTypes[database][field.type].checkDefault(field); }