From e2ae5d29a194b5eb358e0592caa82b7e3721a82b Mon Sep 17 00:00:00 2001 From: zipg Date: Thu, 17 Sep 2026 11:28:16 +0800 Subject: [PATCH] fix(dameng): honor manual transaction default mode --- apps/desktop/src/i18n/locales/az.ts | 2 +- apps/desktop/src/i18n/locales/en.ts | 2 +- apps/desktop/src/i18n/locales/es.ts | 2 +- apps/desktop/src/i18n/locales/it.ts | 2 +- apps/desktop/src/i18n/locales/ja.ts | 2 +- apps/desktop/src/i18n/locales/ko.ts | 2 +- apps/desktop/src/i18n/locales/pt-BR.ts | 2 +- apps/desktop/src/i18n/locales/tr.ts | 2 +- apps/desktop/src/i18n/locales/zh-CN.ts | 2 +- apps/desktop/src/i18n/locales/zh-TW.ts | 2 +- .../database/databaseFeatureSupport.spec.ts | 4 ++-- .../src/lib/database/databaseFeatureSupport.ts | 2 +- .../queryStore.defaultTransactionMode.spec.ts | 16 ++++++++++++++++ 13 files changed, 29 insertions(+), 13 deletions(-) diff --git a/apps/desktop/src/i18n/locales/az.ts b/apps/desktop/src/i18n/locales/az.ts index 7b64e7a092..6168313688 100644 --- a/apps/desktop/src/i18n/locales/az.ts +++ b/apps/desktop/src/i18n/locales/az.ts @@ -7225,7 +7225,7 @@ export default withEnglishFallback({ executeModeCurrent: "Kursorun olduğu əmri icra et", defaultTransactionMode: "Standart tranzaksiya təsdiqləmə rejimi", defaultTransactionModeDescription: - 'Yeni SQL redaktoru açıldıqda standart olaraq istifadə olunan tranzaksiya rejimi. "Əl ilə tranzaksiya" seçildikdə yeni redaktorlar əl ilə tranzaksiya rejimində açılır və dəyişiklikləri əl ilə təsdiqləmək və ya geri qaytarmaq tələb olunur; "Avtomatik təsdiqləmə" seçildikdə hər əmr avtomatik təsdiqlənir. Yalnız tranzaksiyaları dəstəkləyən verilənlər bazalarına (PostgreSQL, MySQL, Oracle, JDBC) tətbiq olunur.', + 'Yeni SQL redaktoru açıldıqda standart olaraq istifadə olunan tranzaksiya rejimi. "Əl ilə tranzaksiya" seçildikdə yeni redaktorlar əl ilə tranzaksiya rejimində açılır və dəyişiklikləri əl ilə təsdiqləmək və ya geri qaytarmaq tələb olunur; "Avtomatik təsdiqləmə" seçildikdə hər əmr avtomatik təsdiqlənir. Yalnız tranzaksiyaları dəstəkləyən verilənlər bazalarına tətbiq olunur.', defaultTransactionModeAuto: "Avtomatik təsdiqləmə", defaultTransactionModeManual: "Əl ilə tranzaksiya", executeAllOnBlankLine: "Boş sətirlərdən bütün SQL-i icra et", diff --git a/apps/desktop/src/i18n/locales/en.ts b/apps/desktop/src/i18n/locales/en.ts index 228910dd16..b9e60fc14d 100644 --- a/apps/desktop/src/i18n/locales/en.ts +++ b/apps/desktop/src/i18n/locales/en.ts @@ -7414,7 +7414,7 @@ export default { executeModeCurrent: "Execute statement at cursor", defaultTransactionMode: "Default transaction commit mode", defaultTransactionModeDescription: - 'The transaction mode used by default when a new SQL editor is opened. With "Manual transaction", new editors start in manual transaction mode, requiring manual commit or rollback; with "Auto commit", each statement is committed automatically. Only applies to databases that support transactions (PostgreSQL, MySQL, Oracle, JDBC).', + 'The transaction mode used by default when a new SQL editor is opened. With "Manual transaction", new editors start in manual transaction mode, requiring manual commit or rollback; with "Auto commit", each statement is committed automatically. Only applies to databases that support transactions.', defaultTransactionModeAuto: "Auto commit", defaultTransactionModeManual: "Manual transaction", executeAllOnBlankLine: "Execute all SQL from blank lines", diff --git a/apps/desktop/src/i18n/locales/es.ts b/apps/desktop/src/i18n/locales/es.ts index 277a6c0cc9..43bc60cc1e 100644 --- a/apps/desktop/src/i18n/locales/es.ts +++ b/apps/desktop/src/i18n/locales/es.ts @@ -6942,7 +6942,7 @@ export default withEnglishFallback({ executeModeCurrent: "Ejecutar sentencia en el cursor", defaultTransactionMode: "Modo de confirmación de transacción predeterminado", defaultTransactionModeDescription: - 'El modo de transacción que se usa de forma predeterminada al abrir un nuevo editor SQL. Con "Transacción manual", los nuevos editores inician en modo de transacción manual y requieren confirmación o reversión manual; con "Confirmación automática", cada sentencia se confirma automáticamente. Solo se aplica a bases de datos que admiten transacciones (PostgreSQL, MySQL, Oracle, JDBC).', + 'El modo de transacción que se usa de forma predeterminada al abrir un nuevo editor SQL. Con "Transacción manual", los nuevos editores inician en modo de transacción manual y requieren confirmación o reversión manual; con "Confirmación automática", cada sentencia se confirma automáticamente. Solo se aplica a bases de datos que admiten transacciones.', defaultTransactionModeAuto: "Confirmación automática", defaultTransactionModeManual: "Transacción manual", executeAllOnBlankLine: "Ejecutar todo el SQL desde líneas en blanco", diff --git a/apps/desktop/src/i18n/locales/it.ts b/apps/desktop/src/i18n/locales/it.ts index 448627d187..468195384a 100644 --- a/apps/desktop/src/i18n/locales/it.ts +++ b/apps/desktop/src/i18n/locales/it.ts @@ -6942,7 +6942,7 @@ export default withEnglishFallback({ executeModeCurrent: "Esegui istruzione al cursore", defaultTransactionMode: "Modalità di commit transazione predefinita", defaultTransactionModeDescription: - 'La modalità di transazione utilizzata per impostazione predefinita quando si apre un nuovo editor SQL. Con "Transazione manuale", i nuovi editori iniziano in modalità di transazione manuale, richiedendo commit o rollback manuale; con "Commit automatico", ogni istruzione viene committata automaticamente. Si applica solo ai database che supportano le transazioni (PostgreSQL, MySQL, Oracle, JDBC).', + 'La modalità di transazione utilizzata per impostazione predefinita quando si apre un nuovo editor SQL. Con "Transazione manuale", i nuovi editori iniziano in modalità di transazione manuale, richiedendo commit o rollback manuale; con "Commit automatico", ogni istruzione viene committata automaticamente. Si applica solo ai database che supportano le transazioni.', defaultTransactionModeAuto: "Commit automatico", defaultTransactionModeManual: "Transazione manuale", executeAllOnBlankLine: "Esegui tutto l'SQL dalle righe vuote", diff --git a/apps/desktop/src/i18n/locales/ja.ts b/apps/desktop/src/i18n/locales/ja.ts index 4e125b3fd9..a534aa19ee 100644 --- a/apps/desktop/src/i18n/locales/ja.ts +++ b/apps/desktop/src/i18n/locales/ja.ts @@ -6966,7 +6966,7 @@ export default withEnglishFallback({ executeModeCurrent: "カーソル位置の文を実行", defaultTransactionMode: "既定のトランザクションコミットモード", defaultTransactionModeDescription: - "新しい SQL エディタを開いたときに既定で使用するトランザクションモード。「手動トランザクション」を選択すると、新しいエディタは手動トランザクションモードで開始され、手動でコミットまたはロールバックします。「自動コミット」を選択すると、各ステートメントが自動的にコミットされます。トランザクションをサポートするデータベース(PostgreSQL、MySQL、Oracle、JDBC)のみに適用されます。", + "新しい SQL エディタを開いたときに既定で使用するトランザクションモード。「手動トランザクション」を選択すると、新しいエディタは手動トランザクションモードで開始され、手動でコミットまたはロールバックします。「自動コミット」を選択すると、各ステートメントが自動的にコミットされます。トランザクションをサポートするデータベースにのみ適用されます。", defaultTransactionModeAuto: "自動コミット", defaultTransactionModeManual: "手動トランザクション", executeAllOnBlankLine: "空行ではすべてのSQLを実行", diff --git a/apps/desktop/src/i18n/locales/ko.ts b/apps/desktop/src/i18n/locales/ko.ts index 1f0653f1f6..9997f6dedc 100644 --- a/apps/desktop/src/i18n/locales/ko.ts +++ b/apps/desktop/src/i18n/locales/ko.ts @@ -6710,7 +6710,7 @@ export default withEnglishFallback({ executeModeCurrent: "커서 위치의 구문 실행", defaultTransactionMode: "기본 트랜잭션 커밋 모드", defaultTransactionModeDescription: - '새 SQL 편집기를 열 때 기본적으로 사용되는 트랜잭션 모드입니다. "수동 트랜잭션"을 선택하면 새 편집기가 수동 트랜잭션 모드로 시작되어 수동으로 커밋 또는 롤백해야 합니다. "자동 커밋"을 선택하면 각 문이 자동으로 커밋됩니다. 트랜잭션을 지원하는 데이터베이스(PostgreSQL, MySQL, Oracle, JDBC)에만 적용됩니다.', + '새 SQL 편집기를 열 때 기본적으로 사용되는 트랜잭션 모드입니다. "수동 트랜잭션"을 선택하면 새 편집기가 수동 트랜잭션 모드로 시작되어 수동으로 커밋 또는 롤백해야 합니다. "자동 커밋"을 선택하면 각 문이 자동으로 커밋됩니다. 트랜잭션을 지원하는 데이터베이스에만 적용됩니다.', defaultTransactionModeAuto: "자동 커밋", defaultTransactionModeManual: "수동 트랜잭션", executeAllOnBlankLine: "빈 줄에서 모든 SQL 실행", diff --git a/apps/desktop/src/i18n/locales/pt-BR.ts b/apps/desktop/src/i18n/locales/pt-BR.ts index 50dfcd43ec..64b45f6d4b 100644 --- a/apps/desktop/src/i18n/locales/pt-BR.ts +++ b/apps/desktop/src/i18n/locales/pt-BR.ts @@ -6944,7 +6944,7 @@ export default withEnglishFallback({ executeModeCurrent: "Executar instrução no cursor", defaultTransactionMode: "Modo de confirmação de transação padrão", defaultTransactionModeDescription: - 'O modo de transação usado por padrão ao abrir um novo editor SQL. Com "Transação manual", novos editores iniciam no modo de transação manual, exigindo confirmação ou reversão manual; com "Confirmação automática", cada instrução é confirmada automaticamente. Aplica-se apenas a bancos de dados que oferecem suporte a transações (PostgreSQL, MySQL, Oracle, JDBC).', + 'O modo de transação usado por padrão ao abrir um novo editor SQL. Com "Transação manual", novos editores iniciam no modo de transação manual, exigindo confirmação ou reversão manual; com "Confirmação automática", cada instrução é confirmada automaticamente. Aplica-se apenas a bancos de dados que oferecem suporte a transações.', defaultTransactionModeAuto: "Confirmação automática", defaultTransactionModeManual: "Transação manual", executeAllOnBlankLine: "Executar todo o SQL em linhas em branco", diff --git a/apps/desktop/src/i18n/locales/tr.ts b/apps/desktop/src/i18n/locales/tr.ts index 82b5dc10fa..2b88e497bf 100644 --- a/apps/desktop/src/i18n/locales/tr.ts +++ b/apps/desktop/src/i18n/locales/tr.ts @@ -7106,7 +7106,7 @@ export default withEnglishFallback({ executeModeCurrent: "İmleçteki ifadeyi çalıştır", defaultTransactionMode: "Varsayılan işlem commit modu", defaultTransactionModeDescription: - 'Yeni bir SQL düzenleyici açıldığında varsayılan olarak kullanılan işlem modu. "Manuel işlem" ile yeni düzenleyiciler manuel işlem modunda başlar ve elle commit ya da rollback gerektirir; "Otomatik commit" ile her ifade otomatik olarak uygulanır. Yalnızca işlemleri destekleyen veritabanları için geçerlidir (PostgreSQL, MySQL, Oracle, JDBC).', + 'Yeni bir SQL düzenleyici açıldığında varsayılan olarak kullanılan işlem modu. "Manuel işlem" ile yeni düzenleyiciler manuel işlem modunda başlar ve elle commit ya da rollback gerektirir; "Otomatik commit" ile her ifade otomatik olarak uygulanır. Yalnızca işlemleri destekleyen veritabanları için geçerlidir.', defaultTransactionModeAuto: "Otomatik commit", defaultTransactionModeManual: "Manuel işlem", executeAllOnBlankLine: "Boş satırlarda tüm SQL'i çalıştır", diff --git a/apps/desktop/src/i18n/locales/zh-CN.ts b/apps/desktop/src/i18n/locales/zh-CN.ts index f3ec32d351..141b9b1ef5 100644 --- a/apps/desktop/src/i18n/locales/zh-CN.ts +++ b/apps/desktop/src/i18n/locales/zh-CN.ts @@ -7386,7 +7386,7 @@ export default withEnglishFallback({ executeModeAll: "执行全部 SQL", executeModeCurrent: "执行光标所在语句", defaultTransactionMode: "默认事务提交方式", - defaultTransactionModeDescription: "新建 SQL 编辑器时默认采用的事务提交方式。选择“手动事务”后,新打开的编辑器将以手动事务模式开始,需手动提交或回滚;选择“自动提交”则每条语句自动提交。仅支持事务的数据库(PostgreSQL、MySQL、Oracle、JDBC)生效。", + defaultTransactionModeDescription: "新建 SQL 编辑器时默认采用的事务提交方式。选择“手动事务”后,新打开的编辑器将以手动事务模式开始,需手动提交或回滚;选择“自动提交”则每条语句自动提交。仅对支持事务的数据库生效。", defaultTransactionModeAuto: "自动提交", defaultTransactionModeManual: "手动事务", executeAllOnBlankLine: "空白位置执行全部 SQL", diff --git a/apps/desktop/src/i18n/locales/zh-TW.ts b/apps/desktop/src/i18n/locales/zh-TW.ts index 64c017f0b4..34e00e468a 100644 --- a/apps/desktop/src/i18n/locales/zh-TW.ts +++ b/apps/desktop/src/i18n/locales/zh-TW.ts @@ -6255,7 +6255,7 @@ export default withEnglishFallback({ executeModeAll: "執行全部 SQL", executeModeCurrent: "執行指標所在語句", defaultTransactionMode: "預設交易提交方式", - defaultTransactionModeDescription: "新增 SQL 編輯器時預設採用的交易提交方式。選擇「手動交易」後,新開啟的編輯器將以手動交易模式開始,需手動提交或回滾;選擇「自動提交」則每條語句自動提交。僅支援交易的資料庫(PostgreSQL、MySQL、Oracle、JDBC)生效。", + defaultTransactionModeDescription: "新增 SQL 編輯器時預設採用的交易提交方式。選擇「手動交易」後,新開啟的編輯器將以手動交易模式開始,需手動提交或回滾;選擇「自動提交」則每條語句自動提交。僅對支援交易的資料庫生效。", defaultTransactionModeAuto: "自動提交", defaultTransactionModeManual: "手動交易", executeAllOnBlankLine: "空白位置執行全部 SQL", diff --git a/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts b/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts index f0f130251a..9b44bbaf4b 100644 --- a/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts +++ b/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts @@ -163,6 +163,7 @@ describe("supportsTransaction", () => { expect(supportsTransaction("oracle")).toBe(true); expect(supportsTransaction("jdbc")).toBe(true); expect(supportsTransaction("oceanbase-oracle")).toBe(true); + expect(supportsTransaction("dameng")).toBe(true); }); it("returns false for unsupported database types", () => { @@ -175,7 +176,6 @@ describe("supportsTransaction", () => { expect(supportsTransaction("sqlite")).toBe(false); expect(supportsTransaction("clickhouse")).toBe(false); expect(supportsTransaction("sqlserver")).toBe(false); - expect(supportsTransaction("dameng")).toBe(false); expect(supportsTransaction("rqlite")).toBe(false); expect(supportsTransaction("agent")).toBe(false); }); @@ -201,6 +201,7 @@ describe("defaultAutoCommitForDbType", () => { expect(defaultAutoCommitForDbType("oracle", "manual")).toBe(false); expect(defaultAutoCommitForDbType("jdbc", "manual")).toBe(false); expect(defaultAutoCommitForDbType("oceanbase-oracle", "manual")).toBe(false); + expect(defaultAutoCommitForDbType("dameng", "manual")).toBe(false); expect(defaultAutoCommitForDbType("mysql", "auto")).toBe(true); expect(defaultAutoCommitForDbType(undefined, "auto")).toBe(true); }); @@ -209,7 +210,6 @@ describe("defaultAutoCommitForDbType", () => { expect(defaultAutoCommitForDbType("redis", "manual")).toBe(true); expect(defaultAutoCommitForDbType("mongodb", "manual")).toBe(true); expect(defaultAutoCommitForDbType("sqlite", "manual")).toBe(true); - expect(defaultAutoCommitForDbType("dameng", "manual")).toBe(true); expect(defaultAutoCommitForDbType("clickhouse", "manual")).toBe(true); expect(defaultAutoCommitForDbType(undefined, "manual")).toBe(true); }); diff --git a/apps/desktop/src/lib/database/databaseFeatureSupport.ts b/apps/desktop/src/lib/database/databaseFeatureSupport.ts index 9d1cecd934..df17c97762 100644 --- a/apps/desktop/src/lib/database/databaseFeatureSupport.ts +++ b/apps/desktop/src/lib/database/databaseFeatureSupport.ts @@ -257,7 +257,7 @@ export function usesPostgresLikeStructureCopy(dbType?: DatabaseType): boolean { return !!dbType && PG_LIKE_STRUCTURE_TYPES.has(dbType); } -const TRANSACTION_SUPPORTED_TYPES: readonly string[] = ["postgres", "mysql", "oracle", "jdbc", "oceanbase-oracle"]; +const TRANSACTION_SUPPORTED_TYPES: readonly string[] = ["postgres", "mysql", "oracle", "jdbc", "oceanbase-oracle", "dameng"]; /** Oracle-family databases, kept ONLY for the Oracle-specific ALTER SESSION SET * CURRENT_SCHEMA compensation in queryStore. Do not use for toolbar/dirty-bit diff --git a/apps/desktop/src/stores/__tests__/queryStore.defaultTransactionMode.spec.ts b/apps/desktop/src/stores/__tests__/queryStore.defaultTransactionMode.spec.ts index 0b0cfed26b..1ea1524a28 100644 --- a/apps/desktop/src/stores/__tests__/queryStore.defaultTransactionMode.spec.ts +++ b/apps/desktop/src/stores/__tests__/queryStore.defaultTransactionMode.spec.ts @@ -83,6 +83,22 @@ describe("queryStore default transaction mode", () => { expect(tab.autoCommit).toBe(false); }); + it("creates a Dameng query tab in manual transaction mode when configured", async () => { + editorSettings.defaultTransactionMode = "manual"; + mocks.getConnectionConfig.mockReturnValue({ + id: "dameng-1", + name: "Dameng", + db_type: "dameng", + database: "DM", + }); + + const { useQueryStore } = await import("@/stores/queryStore"); + const store = useQueryStore(); + const tabId = store.createTab("dameng-1", "DM", "Query", "query", "PUBLIC"); + + expect(store.tabs.find((item) => item.id === tabId)!.autoCommit).toBe(false); + }); + it("creates a query tab in auto-commit mode by default", async () => { const { useQueryStore } = await import("@/stores/queryStore"); const store = useQueryStore();