Parse indexes and enums from dbml

This commit is contained in:
1ilit 2025-01-30 16:26:05 +04:00
parent d76a9e9ff8
commit 7fa23fc13b

View File

@ -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);