From 7fa23fc13b20db745d4ae7d1ee60aa925a0fc48b Mon Sep 17 00:00:00 2001 From: 1ilit <1ilit@proton.me> Date: Thu, 30 Jan 2025 16:26:05 +0400 Subject: [PATCH] Parse indexes and enums from dbml --- src/utils/dbml/fromDBML.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/utils/dbml/fromDBML.js b/src/utils/dbml/fromDBML.js index 49c11d3..714696b 100644 --- a/src/utils/dbml/fromDBML.js +++ b/src/utils/dbml/fromDBML.js @@ -35,19 +35,21 @@ export function fromDBML(src) { const ast = parser.parse(src, "dbml"); const tables = []; + const enums = []; for (const schema of ast.schemas) { for (const table of schema.tables) { let parsedTable = {}; parsedTable.id = tables.length; parsedTable.name = table.name; - parsedTable.comment = ""; + parsedTable.comment = table.note ?? ""; parsedTable.color = "#175e7a"; parsedTable.fields = []; parsedTable.indices = []; for (const column of table.fields) { const field = {}; + field.id = parsedTable.fields.length; field.name = column.name; field.type = column.type.type_name.toUpperCase(); @@ -62,15 +64,36 @@ export function fromDBML(src) { parsedTable.fields.push(field); } + for (const idx of table.indexes) { + const parsedIndex = {}; + + parsedIndex.id = idx.id - 1; + parsedIndex.fields = idx.columns.map((x) => x.value); + parsedIndex.name = + idx.name ?? `${parsedTable.name}_index_${parsedIndex.id}`; + parsedIndex.unique = !!idx.unique; + + parsedTable.indices.push(parsedIndex); + } + console.log(table); tables.push(parsedTable); } + + for (const schemaEnum of schema.enums) { + const parsedEnum = {}; + + parsedEnum.name = schemaEnum.name; + parsedEnum.values = schemaEnum.values.map((x) => x.name); + + enums.push(parsedEnum); + } } console.log(ast); - const diagram = { tables }; + const diagram = { tables, enums }; arrangeTables(diagram);