mirror of
https://github.com/drawdb-io/drawdb.git
synced 2026-02-11 02:00:37 +08:00
Export sqlite
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { dbToTypes, defaultTypes } from "../data/datatypes";
|
||||
import { isFunction, isKeyword, strHasQuotes } from "./utils";
|
||||
import { dbToTypes, defaultTypes } from "../../data/datatypes";
|
||||
import { parseDefault } from "./shared";
|
||||
|
||||
export function getJsonType(f) {
|
||||
if (!Object.keys(defaultTypes).includes(f.type)) {
|
||||
@@ -137,33 +137,6 @@ export function getTypeString(
|
||||
}
|
||||
}
|
||||
|
||||
export function hasQuotes(type) {
|
||||
return [
|
||||
"CHAR",
|
||||
"VARCHAR",
|
||||
"BINARY",
|
||||
"VARBINARY",
|
||||
"ENUM",
|
||||
"DATE",
|
||||
"TIME",
|
||||
"TIMESTAMP",
|
||||
"DATETIME",
|
||||
].includes(type);
|
||||
}
|
||||
|
||||
export function parseDefault(field) {
|
||||
if (
|
||||
strHasQuotes(field.default) ||
|
||||
isFunction(field.default) ||
|
||||
isKeyword(field.default) ||
|
||||
!hasQuotes(field.type)
|
||||
) {
|
||||
return field.default;
|
||||
}
|
||||
|
||||
return `'${field.default}'`;
|
||||
}
|
||||
|
||||
export function jsonToMySQL(obj) {
|
||||
return `${obj.tables
|
||||
.map(
|
||||
@@ -178,7 +151,7 @@ export function jsonToMySQL(obj) {
|
||||
}\` ${getTypeString(field, obj.database)}${field.notNull ? " NOT NULL" : ""}${
|
||||
field.increment ? " AUTO_INCREMENT" : ""
|
||||
}${field.unique ? " UNIQUE" : ""}${
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field, obj.database)}` : ""
|
||||
}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[obj.database][field.type].hasCheck
|
||||
@@ -277,7 +250,7 @@ export function jsonToPostgreSQL(obj) {
|
||||
}" ${getTypeString(field, obj.database, "postgres")}${
|
||||
field.notNull ? " NOT NULL" : ""
|
||||
}${
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field, obj.database)}` : ""
|
||||
}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[obj.database][field.type].hasCheck
|
||||
@@ -378,7 +351,7 @@ export function jsonToSQLite(obj) {
|
||||
field.name
|
||||
}" ${getSQLiteType(field)}${field.notNull ? " NOT NULL" : ""}${
|
||||
field.unique ? " UNIQUE" : ""
|
||||
}${field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""}${
|
||||
}${field.default !== "" ? ` DEFAULT ${parseDefault(field, obj.database)}` : ""}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[obj.database][field.type].hasCheck
|
||||
? ""
|
||||
@@ -424,7 +397,7 @@ export function jsonToMariaDB(obj) {
|
||||
}\` ${getTypeString(field, obj.database)}${field.notNull ? " NOT NULL" : ""}${
|
||||
field.increment ? " AUTO_INCREMENT" : ""
|
||||
}${field.unique ? " UNIQUE" : ""}${
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field, obj.database)}` : ""
|
||||
}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[obj.database][field.type].hasCheck
|
||||
@@ -498,7 +471,7 @@ export function jsonToSQLServer(obj) {
|
||||
}${field.increment ? " IDENTITY" : ""}${
|
||||
field.unique ? " UNIQUE" : ""
|
||||
}${
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||
field.default !== "" ? ` DEFAULT ${parseDefault(field, obj.database)}` : ""
|
||||
}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[obj.database][field.type].hasCheck
|
||||
19
src/utils/exportSQL/index.js
Normal file
19
src/utils/exportSQL/index.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import { DB } from "../../data/constants";
|
||||
import { toSqlite } from "./sqlite";
|
||||
|
||||
export function exportSQL(diagram) {
|
||||
switch (diagram.database) {
|
||||
case DB.SQLITE:
|
||||
return toSqlite(diagram);
|
||||
case DB.MYSQL:
|
||||
return "hi from mysql";
|
||||
case DB.POSTGRES:
|
||||
return "hi from postgres";
|
||||
case DB.MARIADB:
|
||||
return "hi from mariadb";
|
||||
case DB.MSSQL:
|
||||
return "hi from mssql";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
16
src/utils/exportSQL/shared.js
Normal file
16
src/utils/exportSQL/shared.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { DB } from "../../data/constants";
|
||||
import { dbToTypes } from "../../data/datatypes";
|
||||
import { isFunction, isKeyword, strHasQuotes } from "../utils";
|
||||
|
||||
export function parseDefault(field, database = DB.GENERIC) {
|
||||
if (
|
||||
strHasQuotes(field.default) ||
|
||||
isFunction(field.default) ||
|
||||
isKeyword(field.default) ||
|
||||
!dbToTypes[database][field.type].hasQuotes
|
||||
) {
|
||||
return field.default;
|
||||
}
|
||||
|
||||
return `'${field.default}'`;
|
||||
}
|
||||
62
src/utils/exportSQL/sqlite.js
Normal file
62
src/utils/exportSQL/sqlite.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import { dbToTypes } from "../../data/datatypes";
|
||||
import { parseDefault } from "./shared";
|
||||
|
||||
export function toSqlite(diagram) {
|
||||
return diagram.tables
|
||||
.map((table) => {
|
||||
const inlineFK = getInlineFK(table, diagram);
|
||||
return `${
|
||||
table.comment === "" ? "" : `/* ${table.comment} */\n`
|
||||
}CREATE TABLE IF NOT EXISTS "${table.name}" (\n${table.fields
|
||||
.map(
|
||||
(field) =>
|
||||
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t"${
|
||||
field.name
|
||||
}" ${field.type}${field.notNull ? " NOT NULL" : ""}${
|
||||
field.unique ? " UNIQUE" : ""
|
||||
}${field.default !== "" ? ` DEFAULT ${parseDefault(field, diagram.database)}` : ""}${
|
||||
field.check === "" ||
|
||||
!dbToTypes[diagram.database][field.type].hasCheck
|
||||
? ""
|
||||
: ` CHECK(${field.check})`
|
||||
}`,
|
||||
)
|
||||
.join(",\n")}${
|
||||
table.fields.filter((f) => f.primary).length > 0
|
||||
? `,\n\tPRIMARY KEY(${table.fields
|
||||
.filter((f) => f.primary)
|
||||
.map((f) => `"${f.name}"`)
|
||||
.join(", ")})${inlineFK !== "" ? ",\n" : ""}`
|
||||
: ""
|
||||
}\t${inlineFK}\n);\n${
|
||||
table.indices.length > 0
|
||||
? `${table.indices
|
||||
.map(
|
||||
(i) =>
|
||||
`\nCREATE ${i.unique ? "UNIQUE " : ""}INDEX IF NOT EXISTS "${
|
||||
i.name
|
||||
}"\nON "${table.name}" (${i.fields
|
||||
.map((f) => `"${f}"`)
|
||||
.join(", ")});`,
|
||||
)
|
||||
.join("\n")}`
|
||||
: ""
|
||||
}`;
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
export function getInlineFK(table, obj) {
|
||||
let fk = "";
|
||||
obj.references.forEach((r) => {
|
||||
if (fk !== "") return;
|
||||
if (r.startTableId === table.id) {
|
||||
fk = `FOREIGN KEY ("${table.fields[r.startFieldId].name}") REFERENCES "${
|
||||
obj.tables[r.endTableId].name
|
||||
}"("${
|
||||
obj.tables[r.endTableId].fields[r.endFieldId].name
|
||||
}")\n\tON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()}`;
|
||||
}
|
||||
});
|
||||
return fk;
|
||||
}
|
||||
Reference in New Issue
Block a user