From fb1fdd88efdeb473fea6ffd3a06bd85d2f3438d4 Mon Sep 17 00:00:00 2001 From: Dmitrii Date: Wed, 29 Apr 2026 16:00:29 +0200 Subject: [PATCH 1/2] dbeaver/pro#8899 disable autocommit toggle for db2i --- .../io/cloudbeaver/service/sql/WebSQLProcessor.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java index df4835bb5d9..0a23be3a546 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java @@ -1,6 +1,6 @@ /* * DBeaver - Universal Database Manager - * Copyright (C) 2010-2025 DBeaver Corp and others + * Copyright (C) 2010-2026 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -415,13 +415,14 @@ public WebSQLExecuteInfo updateResultsDataBatch( monitor, resultsInfo, rowIdentifier, updatedRows, deletedRows, addedRows, resultBatches, keyReceiver); DBCExecutionContext executionContext = getExecutionContext(dataManipulator); + boolean skipAutoCommitToggle = executionContext.getDataSource() instanceof DBCNativeBatchAutoCommit; try (DBCSession session = executionContext.openSession(monitor, DBCExecutionPurpose.USER, "Update data in container")) { DBCTransactionManager txnManager = DBUtils.getTransactionManager(executionContext); boolean revertToAutoCommit = false; DBCSavepoint savepoint = null; if (txnManager != null) { isAutoCommitEnabled = txnManager.isAutoCommit(); - if (txnManager.isSupportsTransactions() && isAutoCommitEnabled) { + if (txnManager.isSupportsTransactions() && isAutoCommitEnabled && !skipAutoCommitToggle) { txnManager.setAutoCommit(monitor, false); revertToAutoCommit = true; } @@ -447,11 +448,13 @@ public WebSQLExecuteInfo updateResultsDataBatch( newResultSetRows.add(new WebSQLQueryResultSetRow(rowValues, null)); } - if (txnManager != null && txnManager.isSupportsTransactions() && isAutoCommitEnabled) { + if (txnManager != null && txnManager.isSupportsTransactions() && + isAutoCommitEnabled && !skipAutoCommitToggle + ) { txnManager.commit(session); } } catch (Exception e) { - if (txnManager != null && txnManager.isSupportsTransactions()) { + if (txnManager != null && txnManager.isSupportsTransactions() && !skipAutoCommitToggle) { txnManager.rollback(session, savepoint); } throw new DBCException("Error persisting data changes", e); From a1cd52fff625670be06eb8f285764ca252169ba2 Mon Sep 17 00:00:00 2001 From: Dmitrii Date: Wed, 6 May 2026 07:58:40 +0200 Subject: [PATCH 2/2] dbeaver/pro#8899 use driver param for autocommit toggle --- .../src/io/cloudbeaver/service/sql/WebSQLProcessor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java index 0a23be3a546..47c8b90bcc9 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java @@ -35,6 +35,8 @@ import org.jkiss.dbeaver.model.DBPDataKind; import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.DBUtils; +import org.jkiss.dbeaver.model.connection.DBPDriver; +import org.jkiss.dbeaver.model.connection.DBPDriverConstants; import org.jkiss.dbeaver.model.data.*; import org.jkiss.dbeaver.model.edit.DBEPersistAction; import org.jkiss.dbeaver.model.exec.*; @@ -415,7 +417,10 @@ public WebSQLExecuteInfo updateResultsDataBatch( monitor, resultsInfo, rowIdentifier, updatedRows, deletedRows, addedRows, resultBatches, keyReceiver); DBCExecutionContext executionContext = getExecutionContext(dataManipulator); - boolean skipAutoCommitToggle = executionContext.getDataSource() instanceof DBCNativeBatchAutoCommit; + DBPDriver driver = executionContext.getDataSource().getContainer().getDriver(); + boolean skipAutoCommitToggle = CommonUtils.toBoolean( + driver.getDriverParameter(DBPDriverConstants.PARAM_NATIVE_BATCH_AUTO_COMMIT) + ); try (DBCSession session = executionContext.openSession(monitor, DBCExecutionPurpose.USER, "Update data in container")) { DBCTransactionManager txnManager = DBUtils.getTransactionManager(executionContext); boolean revertToAutoCommit = false;