fix: prevent query execute event state leak

This commit is contained in:
Logan.Li committed 2026-07-07 17:52:44 +08:00
1 parent 617c15dbfe
commit f5cf3f4440
1 file changed
+5 -2
+5 -2
View File
@@ -189,7 +189,8 @@ export default function QueriesPage() {
const catLabel: Record<string, string> = { all: '全部', '表结构': '表结构', '性能分析': '性能分析', '数据统计': '数据统计', '基础查询': '基础查询' }; const catLabel: Record<string, string> = { all: '全部', '表结构': '表结构', '性能分析': '性能分析', '数据统计': '数据统计', '基础查询': '基础查询' };
/* ---- Execute ---- */ /* ---- Execute ---- */
const handleExecute = useCallback(async (page = 1) => { const handleExecute = useCallback(async (pageArg: number | unknown = 1) => {
const page = typeof pageArg === 'number' && Number.isFinite(pageArg) ? pageArg : 1;
if (!sql || !instanceId) { setError('请选择实例并输入查询语句'); return; } if (!sql || !instanceId) { setError('请选择实例并输入查询语句'); return; }
if (/\{(?:table|db|collection)\}/.test(sql)) { setError('SQL 中含有未替换的占位符,请先替换或删除'); return; } if (/\{(?:table|db|collection)\}/.test(sql)) { setError('SQL 中含有未替换的占位符,请先替换或删除'); return; }
setExecuting(true); setError(''); setCurrentPage(page); setExecuting(true); setError(''); setCurrentPage(page);
@@ -209,7 +210,9 @@ export default function QueriesPage() {
} }
} catch (e: unknown) { } catch (e: unknown) {
const raw = (e as { response?: { data?: { detail?: string | Array<{ msg: string }> } } })?.response?.data?.detail; const raw = (e as { response?: { data?: { detail?: string | Array<{ msg: string }> } } })?.response?.data?.detail;
const msg = Array.isArray(raw) ? raw.map(v => v.msg).join('; ') : (raw || '查询失败'); const msg = Array.isArray(raw)
? raw.map(v => v.msg).join('; ')
: (typeof raw === 'string' ? raw : raw ? JSON.stringify(raw) : '查询失败');
setError(msg); setError(msg);
if (page === 1) { if (page === 1) {
setHistory(prev => [{ id: Date.now(), sql, instance_id: Number(instanceId), database, db_type: dbType, status: 'failed', execution_time_ms: 0, result_preview: msg, created_at: new Date().toISOString(), favorite: false }, ...prev]); setHistory(prev => [{ id: Date.now(), sql, instance_id: Number(instanceId), database, db_type: dbType, status: 'failed', execution_time_ms: 0, result_preview: msg, created_at: new Date().toISOString(), favorite: false }, ...prev]);