mirror of
https://github.com/drawdb-io/drawdb.git
synced 2025-07-18 10:11:24 +00:00
Fix mysql decimal and dbml enum export (#499)
* Fix decimal and dbml enum export * Remove map
This commit is contained in:
@@ -1070,6 +1070,7 @@ export default function ControlPanel({
|
|||||||
tables,
|
tables,
|
||||||
relationships,
|
relationships,
|
||||||
enums,
|
enums,
|
||||||
|
database,
|
||||||
});
|
});
|
||||||
setExportData((prev) => ({
|
setExportData((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { Cardinality } from "../../data/constants";
|
import { Cardinality } from "../../data/constants";
|
||||||
|
import { dbToTypes } from "../../data/datatypes";
|
||||||
import i18n from "../../i18n/i18n";
|
import i18n from "../../i18n/i18n";
|
||||||
import { escapeQuotes, parseDefault } from "../exportSQL/shared";
|
import { escapeQuotes, parseDefault } from "../exportSQL/shared";
|
||||||
|
|
||||||
@@ -51,6 +52,15 @@ function cardinality(rel) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fieldSize(field, database) {
|
||||||
|
const typeMetadata = dbToTypes[database][field.type];
|
||||||
|
|
||||||
|
if ((typeMetadata.isSized || typeMetadata.hasPrecision) && field.size)
|
||||||
|
return `(${field.size})`;
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
export function toDBML(diagram) {
|
export function toDBML(diagram) {
|
||||||
const generateRelString = (rel) => {
|
const generateRelString = (rel) => {
|
||||||
const { fields: startTableFields, name: startTableName } =
|
const { fields: startTableFields, name: startTableName } =
|
||||||
@@ -68,21 +78,38 @@ export function toDBML(diagram) {
|
|||||||
return `Ref ${rel.name} {\n\t${startTableName}.${startFieldName} ${cardinality(rel)} ${endTableName}.${endFieldName} [ delete: ${rel.deleteConstraint.toLowerCase()}, update: ${rel.updateConstraint.toLowerCase()} ]\n}`;
|
return `Ref ${rel.name} {\n\t${startTableName}.${startFieldName} ${cardinality(rel)} ${endTableName}.${endFieldName} [ delete: ${rel.deleteConstraint.toLowerCase()}, update: ${rel.updateConstraint.toLowerCase()} ]\n}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let enumDefinitions = "";
|
||||||
|
|
||||||
|
for (const table of diagram.tables) {
|
||||||
|
for (const field of table.fields) {
|
||||||
|
if (
|
||||||
|
(field.type === "ENUM" || field.type === "SET") &&
|
||||||
|
Array.isArray(field.values)
|
||||||
|
) {
|
||||||
|
enumDefinitions += `enum ${field.name}_${field.values.join("_")}_t {\n\t${field.values.join("\n\t")}\n}\n\n`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return `${diagram.enums
|
return `${diagram.enums
|
||||||
.map(
|
.map(
|
||||||
(en) =>
|
(en) =>
|
||||||
`enum ${en.name} {\n${en.values.map((v) => `\t${v}`).join("\n")}\n}\n\n`,
|
`enum ${en.name} {\n${en.values.map((v) => `\t${v}`).join("\n")}\n}\n\n`,
|
||||||
)
|
)
|
||||||
.join("\n\n")}${diagram.tables
|
.join("\n\n")}${enumDefinitions}${diagram.tables
|
||||||
.map(
|
.map(
|
||||||
(table) =>
|
(table) =>
|
||||||
`Table ${table.name} {\n${table.fields
|
`Table ${table.name} {\n${table.fields
|
||||||
.map(
|
.map(
|
||||||
(field) =>
|
(field) =>
|
||||||
`\t${field.name} ${field.type.toLowerCase()}${columnSettings(
|
`\t${field.name} ${
|
||||||
|
field.type === "ENUM" || field.type === "SET"
|
||||||
|
? `${field.name}_${field.values.join("_")}_t`
|
||||||
|
: field.type.toLowerCase()
|
||||||
|
}${fieldSize(
|
||||||
field,
|
field,
|
||||||
diagram.database,
|
diagram.database,
|
||||||
)}`,
|
)}${columnSettings(field, diagram.database)}`,
|
||||||
)
|
)
|
||||||
.join("\n")}${
|
.join("\n")}${
|
||||||
table.indices.length > 0
|
table.indices.length > 0
|
||||||
|
@@ -10,7 +10,10 @@ function parseType(field) {
|
|||||||
res += `${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}`;
|
res += `${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dbToTypes[DB.MYSQL][field.type].isSized) {
|
if (
|
||||||
|
dbToTypes[DB.MYSQL][field.type].isSized ||
|
||||||
|
dbToTypes[DB.MYSQL][field.type].hasPrecision
|
||||||
|
) {
|
||||||
res += `${field.size && field.size !== "" ? "(" + field.size + ")" : ""}`;
|
res += `${field.size && field.size !== "" ? "(" + field.size + ")" : ""}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user