mirror of
https://github.com/drawdb-io/drawdb.git
synced 2025-05-24 10:29:11 +00:00
Parse indexes and enums from dbml
This commit is contained in:
parent
d76a9e9ff8
commit
7fa23fc13b
@ -35,19 +35,21 @@ export function fromDBML(src) {
|
|||||||
const ast = parser.parse(src, "dbml");
|
const ast = parser.parse(src, "dbml");
|
||||||
|
|
||||||
const tables = [];
|
const tables = [];
|
||||||
|
const enums = [];
|
||||||
|
|
||||||
for (const schema of ast.schemas) {
|
for (const schema of ast.schemas) {
|
||||||
for (const table of schema.tables) {
|
for (const table of schema.tables) {
|
||||||
let parsedTable = {};
|
let parsedTable = {};
|
||||||
parsedTable.id = tables.length;
|
parsedTable.id = tables.length;
|
||||||
parsedTable.name = table.name;
|
parsedTable.name = table.name;
|
||||||
parsedTable.comment = "";
|
parsedTable.comment = table.note ?? "";
|
||||||
parsedTable.color = "#175e7a";
|
parsedTable.color = "#175e7a";
|
||||||
parsedTable.fields = [];
|
parsedTable.fields = [];
|
||||||
parsedTable.indices = [];
|
parsedTable.indices = [];
|
||||||
|
|
||||||
for (const column of table.fields) {
|
for (const column of table.fields) {
|
||||||
const field = {};
|
const field = {};
|
||||||
|
|
||||||
field.id = parsedTable.fields.length;
|
field.id = parsedTable.fields.length;
|
||||||
field.name = column.name;
|
field.name = column.name;
|
||||||
field.type = column.type.type_name.toUpperCase();
|
field.type = column.type.type_name.toUpperCase();
|
||||||
@ -62,15 +64,36 @@ export function fromDBML(src) {
|
|||||||
parsedTable.fields.push(field);
|
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);
|
console.log(table);
|
||||||
|
|
||||||
tables.push(parsedTable);
|
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);
|
console.log(ast);
|
||||||
|
|
||||||
const diagram = { tables };
|
const diagram = { tables, enums };
|
||||||
|
|
||||||
arrangeTables(diagram);
|
arrangeTables(diagram);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user