提交 fc908f6c 编写于 作者: J jurgen

JDBC context init fixed (set auto-commit and txn level)

Former-commit-id: 5f1159de
上级 0ac074b8
Execute custom SQL on connect (e.g. set timezone).
Data transfer DECIMAL(x,y) types convert.
Extract non-visual part to a separate plugin (preferences + editors)
RSV find/replace action
......
......@@ -40,15 +40,22 @@ public class DBPConnectionInfo implements DBPObject
private final Map<Object, Object> properties;
private final Map<DBPConnectionEventType, DBRShellCommand> events;
private final List<DBWHandlerConfiguration> handlers;
private final List<String> bootstrapQueries;
private DBPConnectionType connectionType;
private String connectionColor;
public static class Bootstrap {
List<String> queries;
boolean ignoreErrors;
}
public DBPConnectionInfo()
{
this.connectionType = DBPConnectionType.DEFAULT_TYPE;
this.properties = new HashMap<Object, Object>();
this.events = new HashMap<DBPConnectionEventType, DBRShellCommand>();
this.handlers = new ArrayList<DBWHandlerConfiguration>();
this.bootstrapQueries = new ArrayList<String>();
}
public DBPConnectionInfo(DBPConnectionInfo info)
......@@ -71,6 +78,7 @@ public class DBPConnectionInfo implements DBPObject
for (DBWHandlerConfiguration handler : info.handlers) {
this.handlers.add(new DBWHandlerConfiguration(handler));
}
this.bootstrapQueries = new ArrayList<String>(info.bootstrapQueries);
}
public String getClientHomeId()
......
......@@ -70,7 +70,10 @@ public interface DBSDataSourceContainer extends DBSObject, DBDPreferences
void setDefaultAutoCommit(boolean autoCommit, DBCExecutionContext updateContext, boolean updateConnection);
@Nullable
DBPTransactionIsolation getDefaultTransactionsIsolation();
DBPTransactionIsolation getActiveTransactionsIsolation();
@Nullable
Integer getDefaultTransactionsIsolation();
void setDefaultTransactionsIsolation(DBPTransactionIsolation isolationLevel);
......
......@@ -67,7 +67,7 @@ import java.util.*;
public class DataSourceDescriptor
implements
DBSDataSourceContainer,
DBPImageProvider,
DBPImageProvider,
IAdaptable,
DBEPrivateObjectEditor,
DBSObjectStateful,
......@@ -113,6 +113,7 @@ public class DataSourceDescriptor
return firstMatch ? null : defaultFilter;
}
}
@NotNull
private final DataSourceRegistry registry;
@NotNull
......@@ -332,7 +333,7 @@ public class DataSourceDescriptor
@Nullable
@Override
public DBPTransactionIsolation getDefaultTransactionsIsolation()
public DBPTransactionIsolation getActiveTransactionsIsolation()
{
if (dataSource != null) {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(dataSource.getDefaultContext(false));
......@@ -348,6 +349,14 @@ public class DataSourceDescriptor
return null;
}
@Override
public Integer getDefaultTransactionsIsolation() {
if (preferenceStore.contains(DBeaverPreferences.DEFAULT_ISOLATION)) {
return preferenceStore.getInt(DBeaverPreferences.DEFAULT_ISOLATION);
}
return null;
}
@Override
public void setDefaultTransactionsIsolation(@Nullable final DBPTransactionIsolation isolationLevel)
{
......@@ -670,40 +679,6 @@ public class DataSourceDescriptor
if (dataSource == null) {
return;
}
DBCTransactionManager txnManager = DBUtils.getTransactionManager(dataSource.getDefaultContext(false));
if (txnManager != null) {
try {
// Set auto-commit
boolean autoCommit = txnManager.isAutoCommit();
boolean newAutoCommit;
if (!preferenceStore.contains(DBeaverPreferences.DEFAULT_AUTO_COMMIT)) {
newAutoCommit = connectionInfo.getConnectionType().isAutocommit();
} else {
newAutoCommit = preferenceStore.getBoolean(DBeaverPreferences.DEFAULT_AUTO_COMMIT);
}
if (autoCommit != newAutoCommit) {
// Change auto-commit state
txnManager.setAutoCommit(monitor, newAutoCommit);
}
// Set txn isolation level
if (preferenceStore.contains(DBeaverPreferences.DEFAULT_ISOLATION)) {
int isolationCode = preferenceStore.getInt(DBeaverPreferences.DEFAULT_ISOLATION);
Collection<DBPTransactionIsolation> supportedLevels = dataSource.getInfo().getSupportedTransactionsIsolation();
if (!CommonUtils.isEmpty(supportedLevels)) {
for (DBPTransactionIsolation level : supportedLevels) {
if (level.getCode() == isolationCode) {
txnManager.setTransactionIsolation(monitor, level);
break;
}
}
}
}
} catch (DBCException e) {
log.error("Can't set session transactions state", e);
} finally {
monitor.worked(1);
}
}
// Set active object
if (dataSource instanceof DBSObjectSelector && dataSource instanceof DBSObjectContainer) {
......
......@@ -161,7 +161,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
if (dataSourceDescriptor.isConnected()) {
isolationLevel.setEnabled(!autocommit.getSelection());
supportedLevels.clear();
DBPTransactionIsolation defaultLevel = dataSourceDescriptor.getDefaultTransactionsIsolation();
DBPTransactionIsolation defaultLevel = dataSourceDescriptor.getActiveTransactionsIsolation();
for (DBPTransactionIsolation level : CommonUtils.safeCollection(dataSourceDescriptor.getDataSource().getInfo().getSupportedTransactionsIsolation())) {
if (!level.isEnabled()) continue;
isolationLevel.add(level.getTitle());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册