🐛 fix(TableDesigner): 修复 MySQL 索引编辑保存时多语句执行失败

- executeSchemaSql 将拼接的 DDL 按分号换行拆分后逐条执行
This commit is contained in:
杨国锋
2026-03-18 20:32:00 +08:00
parent cc7ef12029
commit 4ce4cdaad8

View File

@@ -1397,14 +1397,23 @@ ${selectedTrigger.statement}`;
ssh: conn.config.ssh || { host: "", port: 22, user: "", password: "", keyPath: "" }
};
try {
const res = await DBQuery(config as any, tab.dbName || '', sql);
if (res.success) {
message.success(successMessage);
await fetchData();
return true;
// 多条 DDL 语句(如 DROP INDEX + CREATE INDEX需要逐条执行
// 因为 Go MySQL 驱动默认不支持多语句 Exec。
const statements = sql.split(/;\s*\n/).map(s => s.trim()).filter(Boolean);
for (let i = 0; i < statements.length; i++) {
let stmt = statements[i];
if (!stmt.endsWith(';')) stmt += ';';
const res = await DBQuery(config as any, tab.dbName || '', stmt);
if (!res.success) {
const prefix = statements.length > 1 ? `${i + 1}/${statements.length} 条语句执行失败: ` : '执行失败: ';
message.error(prefix + res.message);
if (i > 0) await fetchData();
return false;
}
}
message.error('执行失败: ' + res.message);
return false;
message.success(successMessage);
await fetchData();
return true;
} catch (e: any) {
message.error('执行失败: ' + (e?.message || String(e)));
return false;