From 157386b42f7d1fb01b105c1f8cdce86e37595b90 Mon Sep 17 00:00:00 2001 From: ludengke Date: Wed, 24 Jun 2026 13:59:26 +0800 Subject: [PATCH 1/2] fix: resolve export SQL crash and VARCHAR mapped to JSON - DBML import now strips parentheses from type_name and uses args for size - jsonToMySQL/jsonToMariaDB: guard generateSchema against undefined types when obj.types is empty or the custom type is not found Fixes #1051 --- src/utils/exportSQL/generic.js | 10 ++++++++-- src/utils/importFrom/dbml.js | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/utils/exportSQL/generic.js b/src/utils/exportSQL/generic.js index ce859d8ab..798fcc672 100644 --- a/src/utils/exportSQL/generic.js +++ b/src/utils/exportSQL/generic.js @@ -207,7 +207,10 @@ export function jsonToMySQL(obj) { }${ field.check === "" || !dbToTypes[obj.database][field.type].hasCheck - ? !Object.keys(defaultTypes).includes(field.type) + ? !Object.keys(defaultTypes).includes(field.type) && + obj.types.find( + (t) => t.name === field.type.toLowerCase(), + ) ? ` CHECK(\n\t\tJSON_SCHEMA_VALID("${generateSchema( obj.types.find( (t) => t.name === field.type.toLowerCase(), @@ -458,7 +461,10 @@ export function jsonToMariaDB(obj) { }${ field.check === "" || !dbToTypes[obj.database][field.type].hasCheck - ? !Object.keys(defaultTypes).includes(field.type) + ? !Object.keys(defaultTypes).includes(field.type) && + obj.types.find( + (t) => t.name === field.type.toLowerCase(), + ) ? ` CHECK(\n\t\tJSON_SCHEMA_VALID('${generateSchema( obj.types.find( (t) => t.name === field.type.toLowerCase(), diff --git a/src/utils/importFrom/dbml.js b/src/utils/importFrom/dbml.js index 5ef3c5f91..5fdf4fcc4 100644 --- a/src/utils/importFrom/dbml.js +++ b/src/utils/importFrom/dbml.js @@ -28,7 +28,11 @@ export function fromDBML(src) { field.id = nanoid(); field.name = column.name; - field.type = column.type.type_name.toUpperCase(); + // type_name 带括号(如 "varchar(50)"),需剥离;args 为参数字符串(如 "50") + const rawType = column.type.type_name.toUpperCase(); + const parenIdx = rawType.indexOf("("); + field.type = parenIdx !== -1 ? rawType.substring(0, parenIdx) : rawType; + field.size = column.type.args ?? ""; field.default = column.dbdefault?.value ?? ""; field.check = ""; field.primary = !!column.pk; From 7368d96f202315cf177f490fa2c1e390432364e6 Mon Sep 17 00:00:00 2001 From: ludengke Date: Wed, 24 Jun 2026 14:02:21 +0800 Subject: [PATCH 2/2] chore: translate comments to English --- src/utils/importFrom/dbml.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utils/importFrom/dbml.js b/src/utils/importFrom/dbml.js index 5fdf4fcc4..c475182fa 100644 --- a/src/utils/importFrom/dbml.js +++ b/src/utils/importFrom/dbml.js @@ -28,10 +28,11 @@ export function fromDBML(src) { field.id = nanoid(); field.name = column.name; - // type_name 带括号(如 "varchar(50)"),需剥离;args 为参数字符串(如 "50") - const rawType = column.type.type_name.toUpperCase(); - const parenIdx = rawType.indexOf("("); - field.type = parenIdx !== -1 ? rawType.substring(0, parenIdx) : rawType; + // type_name includes parentheses (e.g. "varchar(50)"), args is the parameter string (e.g. "50"). + // Separate them into raw type name and size for drawdb's internal format. + const rawTypeName = column.type.type_name.toUpperCase(); + const parenIdx = rawTypeName.indexOf("("); + field.type = parenIdx !== -1 ? rawTypeName.substring(0, parenIdx) : rawTypeName; field.size = column.type.args ?? ""; field.default = column.dbdefault?.value ?? ""; field.check = "";