Skip to content

Commit 317c3cc

Browse files
committed
Fix invalid sql after swapping fields (#287)
1 parent cd26273 commit 317c3cc

File tree

3 files changed

+48
-7
lines changed

3 files changed

+48
-7
lines changed

src/components/EditorSidePanel/TablesTab/TableInfo.jsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ import ColorPalette from "../../ColorPicker";
1414
import TableField from "./TableField";
1515
import IndexDetails from "./IndexDetails";
1616
import { useTranslation } from "react-i18next";
17+
import { dbToTypes } from "../../../data/datatypes";
1718

1819
export default function TableInfo({ data }) {
1920
const { t } = useTranslation();
2021
const [indexActiveKey, setIndexActiveKey] = useState("");
21-
const { deleteTable, updateTable, updateField, setRelationships } =
22+
const { deleteTable, updateTable, updateField, setRelationships, database } =
2223
useDiagram();
2324
const { setUndoStack, setRedoStack } = useUndoRedo();
2425
const [editField, setEditField] = useState({});
@@ -106,8 +107,20 @@ export default function TableInfo({ data }) {
106107
const a = data.fields[index];
107108
const b = data.fields[j];
108109

109-
updateField(data.id, index, { ...b, id: index });
110-
updateField(data.id, j, { ...a, id: j });
110+
updateField(data.id, index, {
111+
...b,
112+
...(!dbToTypes[database][b.type].isSized && { size: "" }),
113+
...(!dbToTypes[database][b.type].hasCheck && { check: "" }),
114+
...(dbToTypes[database][b.type].noDefault && { default: "" }),
115+
id: index,
116+
});
117+
updateField(data.id, j, {
118+
...a,
119+
...(!dbToTypes[database][a.type].isSized && { size: "" }),
120+
...(!dbToTypes[database][a.type].hasCheck && { check: "" }),
121+
...(!dbToTypes[database][a.type].noDefault && { default: "" }),
122+
id: j,
123+
});
111124

112125
setRelationships((prev) =>
113126
prev.map((e) => {

src/utils/exportSQL/mariadb.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
import { parseDefault } from "./shared";
22

33
import { dbToTypes } from "../../data/datatypes";
4+
import { DB } from "../../data/constants";
5+
6+
function parseType(field) {
7+
let res = field.type;
8+
9+
if (field.type === "SET" || field.type === "ENUM") {
10+
res += `${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}`;
11+
}
12+
13+
if (dbToTypes[DB.MARIADB][field.type].isSized) {
14+
res += `${field.size && field.size !== "" ? "(" + field.size + ")" : ""}`;
15+
}
16+
17+
return res;
18+
}
419

520
export function toMariaDB(diagram) {
621
return `${diagram.tables
@@ -9,9 +24,7 @@ export function toMariaDB(diagram) {
924
`CREATE OR REPLACE TABLE \`${table.name}\` (\n${table.fields
1025
.map(
1126
(field) =>
12-
`\t\`${
13-
field.name
14-
}\` ${field.type}${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}${field.unsigned ? " UNSIGNED" : ""}${field.notNull ? " NOT NULL" : ""}${
27+
`\t\`${field.name}\` ${parseType(field)}${field.unsigned ? " UNSIGNED" : ""}${field.notNull ? " NOT NULL" : ""}${
1528
field.increment ? " AUTO_INCREMENT" : ""
1629
}${field.unique ? " UNIQUE" : ""}${
1730
field.default !== ""

src/utils/exportSQL/mysql.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
import { parseDefault } from "./shared";
22

33
import { dbToTypes } from "../../data/datatypes";
4+
import { DB } from "../../data/constants";
5+
6+
function parseType(field) {
7+
let res = field.type;
8+
9+
if (field.type === "SET" || field.type === "ENUM") {
10+
res += `${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}`;
11+
}
12+
13+
if (dbToTypes[DB.MYSQL][field.type].isSized) {
14+
res += `${field.size && field.size !== "" ? "(" + field.size + ")" : ""}`;
15+
}
16+
17+
return res;
18+
}
419

520
export function toMySQL(diagram) {
621
return `${diagram.tables
@@ -9,7 +24,7 @@ export function toMySQL(diagram) {
924
`CREATE TABLE \`${table.name}\` (\n${table.fields
1025
.map(
1126
(field) =>
12-
`\t\`${field.name}\` ${field.type}${field.values ? "(" + field.values.map((value) => "'" + value + "'").join(", ") + ")" : ""}${field.unsigned ? " UNSIGNED" : ""}${field.size !== undefined && field.size !== "" ? "(" + field.size + ")" : ""}${
27+
`\t\`${field.name}\` ${parseType(field)}${field.unsigned ? " UNSIGNED" : ""}${
1328
field.notNull ? " NOT NULL" : ""
1429
}${
1530
field.increment ? " AUTO_INCREMENT" : ""

0 commit comments

Comments
 (0)