From d55a708d6a035e406f55d9a499f0fdb55b48fa7c Mon Sep 17 00:00:00 2001 From: Abeautifulsnow Date: Thu, 2 Jul 2026 01:30:31 +0800 Subject: [PATCH] feat(query): add manual transaction controls --- apps/desktop/src/App.vue | 11 + .../src/components/layout/EditorToolbar.vue | 63 ++- apps/desktop/src/i18n/locales/en.ts | 7 + apps/desktop/src/i18n/locales/es.ts | 7 + apps/desktop/src/i18n/locales/it.ts | 7 + apps/desktop/src/i18n/locales/ja.ts | 7 + apps/desktop/src/i18n/locales/pt-BR.ts | 7 + apps/desktop/src/i18n/locales/zh-CN.ts | 7 + apps/desktop/src/i18n/locales/zh-TW.ts | 7 + .../__tests__/databaseFeatureSupport.spec.ts | 28 ++ apps/desktop/src/lib/api.ts | 4 + .../desktop/src/lib/databaseFeatureSupport.ts | 10 + apps/desktop/src/lib/http.ts | 16 + apps/desktop/src/lib/tauri.ts | 17 + apps/desktop/src/stores/connectionStore.ts | 2 + apps/desktop/src/stores/queryStore.ts | 133 +++++- apps/desktop/src/types/database.ts | 7 + crates/dbx-core/src/connection.rs | 20 +- crates/dbx-core/src/db/mysql.rs | 4 +- crates/dbx-core/src/db/postgres.rs | 2 +- crates/dbx-core/src/query.rs | 430 +++++++++++++++++- crates/dbx-core/src/query_result_export.rs | 1 + crates/dbx-core/src/schema.rs | 10 +- .../dbx-core/tests/live_manual_transaction.rs | 105 +++++ crates/dbx-web/src/routes/query.rs | 2 + src-tauri/src/commands/query.rs | 49 ++ src-tauri/src/lib.rs | 4 + 27 files changed, 927 insertions(+), 40 deletions(-) create mode 100644 apps/desktop/src/lib/__tests__/databaseFeatureSupport.spec.ts create mode 100644 crates/dbx-core/tests/live_manual_transaction.rs diff --git a/apps/desktop/src/App.vue b/apps/desktop/src/App.vue index b4099a1529..4b691bffa3 100644 --- a/apps/desktop/src/App.vue +++ b/apps/desktop/src/App.vue @@ -1622,8 +1622,19 @@ onUnmounted(() => { :block-dangerous-redis-commands="blockDangerousRedisCommands" :sql-keyword-case="settingsStore.editorSettings.sqlFormatter.keywordCase" :database-required-signal="databaseRequiredTabId === activeTab.id ? databaseRequiredSignal : 0" + :auto-commit="activeTab.autoCommit ?? true" + :txn-session-id="activeTab?.txnSessionId" + :txn-auto-rolled-back="activeTab?.txnAutoRolledBack" @update:explain-mode="(m: 'explain' | 'autotrace') => (explainMode = m)" @update:block-dangerous-redis-commands="(v: boolean) => (blockDangerousRedisCommands = v)" + @update:auto-commit=" + (v: boolean) => { + if (activeTab) queryStore.setAutoCommit(activeTab.id, v); + } + " + @commit="activeTab && queryStore.commitTransaction(activeTab.id)" + @rollback="activeTab && queryStore.rollbackTransaction(activeTab.id)" + @dismiss-txn-rolled-back="activeTab && (activeTab.txnAutoRolledBack = false)" @execute="requestActiveEditorExecute()" @cancel="cancelActiveExecution()" @explain="tryExplain()" diff --git a/apps/desktop/src/components/layout/EditorToolbar.vue b/apps/desktop/src/components/layout/EditorToolbar.vue index 3ee3d38c2b..6711f571d5 100644 --- a/apps/desktop/src/components/layout/EditorToolbar.vue +++ b/apps/desktop/src/components/layout/EditorToolbar.vue @@ -1,7 +1,7 @@