提交 90f30309 编写于 作者: J jurgen

Use isolated execution contexts in SQL editor

上级 96877500
......@@ -56,6 +56,7 @@ public final class DBeaverPreferences
public static final String READ_EXPENSIVE_PROPERTIES = "database.props.expensive"; //$NON-NLS-1$
public static final String META_SEPARATE_CONNECTION = "database.meta.separate.connection"; //$NON-NLS-1$
public static final String META_CASE_SENSITIVE = "database.meta.casesensitive"; //$NON-NLS-1$
public static final String EDITOR_SEPARATE_CONNECTION = "database.editor.separate.connection"; //$NON-NLS-1$
public static final String TEXT_EDIT_UNDO_LEVEL = "text.edit.undo.level"; //$NON-NLS-1$
......
......@@ -98,6 +98,7 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.READ_EXPENSIVE_PROPERTIES, false);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.META_SEPARATE_CONNECTION, true);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.META_CASE_SENSITIVE, false);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.EDITOR_SEPARATE_CONNECTION, false);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS, false);
RuntimeUtils.setDefaultPreferenceValue(store, DBeaverPreferences.RS_EDIT_MAX_TEXT_SIZE, 10 * 1000000);
......
......@@ -23,6 +23,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.data.DBDPreferences;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.virtual.DBVModel;
......@@ -67,7 +68,7 @@ public interface DBSDataSourceContainer extends DBSObject, DBDPreferences
boolean isDefaultAutoCommit();
void setDefaultAutoCommit(boolean autoCommit, boolean updateConnection);
void setDefaultAutoCommit(boolean autoCommit, DBCExecutionContext updateContext, boolean updateConnection);
@Nullable
DBPTransactionIsolation getDefaultTransactionsIsolation();
......
......@@ -298,10 +298,10 @@ public class DataSourceDescriptor
}
@Override
public void setDefaultAutoCommit(final boolean autoCommit, boolean updateConnection)
public void setDefaultAutoCommit(final boolean autoCommit, DBCExecutionContext updateContext, boolean updateConnection)
{
if (dataSource != null) {
final DBCTransactionManager txnManager = DBUtils.getTransactionManager(dataSource.getDefaultContext(false));
if (updateContext != null) {
final DBCTransactionManager txnManager = DBUtils.getTransactionManager(updateContext);
if (updateConnection && txnManager != null) {
try {
DBeaverUI.runInProgressDialog(new DBRRunnableWithProgress() {
......
......@@ -50,7 +50,7 @@ public class DataSourceAutoCommitHandler extends DataSourceHandler implements IE
// Get flag from connection
newAutocommit = !txnManager.isAutoCommit();
}
container.setDefaultAutoCommit(newAutocommit, true);
container.setDefaultAutoCommit(newAutocommit, context, true);
container.persistConfiguration();
} catch (DBCException e) {
log.warn("Error changing auto-commit state", e);
......
......@@ -460,7 +460,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
}
dataSource.setName(connectionNameText.getText());
dataSource.setSavePassword(savePasswordCheck.getSelection());
dataSource.setDefaultAutoCommit(autocommit.getSelection(), true);
dataSource.setDefaultAutoCommit(autocommit.getSelection(), null, true);
if (dataSource.isConnected()) {
int levelIndex = isolationLevel.getSelectionIndex();
if (levelIndex <= 0) {
......
......@@ -127,6 +127,9 @@ public class SQLEditor extends SQLEditorBase implements
private final List<QueryProcessor> queryProcessors = new ArrayList<QueryProcessor>();
private DBSDataSourceContainer dataSourceContainer;
private DBPDataSource curDataSource;
private DBCExecutionContext executionContext;
private boolean ownContext = false;
private final FindReplaceTarget findReplaceTarget = new FindReplaceTarget();
private final List<SQLQuery> runningQueries = new ArrayList<SQLQuery>();
......@@ -137,12 +140,7 @@ public class SQLEditor extends SQLEditorBase implements
@Override
public DBCExecutionContext getExecutionContext() {
final DBSDataSourceContainer dataSourceContainer = getDataSourceContainer();
if (dataSourceContainer == null) {
return null;
}
DBPDataSource dataSource = dataSourceContainer.getDataSource();
return dataSource == null ? null : dataSource.getDefaultContext(false);
return executionContext;
}
@Nullable
......@@ -222,15 +220,60 @@ public class SQLEditor extends SQLEditorBase implements
if (dataSourceContainer != null) {
dataSourceContainer.acquire(this);
}
return true;
}
private void updateExecutionContext() {
if (dataSourceContainer == null) {
releaseExecutionContext();
} else {
// Get/open context
final DBPDataSource dataSource = dataSourceContainer.getDataSource();
if (dataSource == null) {
releaseExecutionContext();
} else if (curDataSource != dataSource) {
releaseExecutionContext();
if (DBeaverCore.getGlobalPreferenceStore().getBoolean(DBeaverPreferences.EDITOR_SEPARATE_CONNECTION)) {
try {
DBeaverUI.runInProgressDialog(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
executionContext = dataSource.openIsolatedContext(monitor, "SQLEditor connection");
} catch (DBException e) {
throw new InvocationTargetException(e);
}
ownContext = true;
}
});
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(getSite().getShell(), "Open context", "Can't open editor connection", e);
}
} else {
executionContext = dataSource.getDefaultContext(false);
}
}
curDataSource = dataSource;
}
}
private void releaseExecutionContext() {
if (ownContext && executionContext != null) {
executionContext.close();
}
executionContext = null;
ownContext = false;
curDataSource = null;
}
private void releaseContainer() {
if (dataSourceContainer != null) {
dataSourceContainer.getPreferenceStore().removePropertyChangeListener(this);
dataSourceContainer.release(this);
dataSourceContainer = null;
}
releaseExecutionContext();
}
@Override
......@@ -656,9 +699,12 @@ public class SQLEditor extends SQLEditorBase implements
private void onDataSourceChange()
{
updateExecutionContext();
if (sashForm == null || sashForm.isDisposed()) {
return;
}
DatabaseEditorUtils.setPartBackground(this, sashForm);
DBCExecutionContext executionContext = getExecutionContext();
......
......@@ -54,6 +54,8 @@ public class PrefPageDatabaseGeneral extends PreferencePage implements IWorkbenc
private Button editorFullName;
private Combo doubleClickBehavior;
private Button editorSeparateConnectionCheck;
public PrefPageDatabaseGeneral()
{
super();
......@@ -106,6 +108,12 @@ public class PrefPageDatabaseGeneral extends PreferencePage implements IWorkbenc
doubleClickBehavior.add("Expand / Collapse", NavigatorViewBase.DoubleClickBehavior.EXPAND.ordinal());
}
{
Group connectionsGroup = UIUtils.createControlGroup(composite, "Connections", 2, SWT.NONE, 0);
editorSeparateConnectionCheck = UIUtils.createCheckbox(connectionsGroup, "Open connection for each editor", false);
}
performDefaults();
return composite;
......@@ -125,6 +133,8 @@ public class PrefPageDatabaseGeneral extends PreferencePage implements IWorkbenc
editorFullName.setSelection(store.getBoolean(DBeaverPreferences.NAVIGATOR_EDITOR_FULL_NAME));
doubleClickBehavior.select(
NavigatorViewBase.DoubleClickBehavior.valueOf(store.getString(DBeaverPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK)).ordinal());
editorSeparateConnectionCheck.setSelection(store.getBoolean(DBeaverPreferences.EDITOR_SEPARATE_CONNECTION));
}
@Override
......@@ -142,6 +152,10 @@ public class PrefPageDatabaseGeneral extends PreferencePage implements IWorkbenc
store.setValue(DBeaverPreferences.NAVIGATOR_EDITOR_FULL_NAME, editorFullName.getSelection());
store.setValue(DBeaverPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK,
CommonUtils.fromOrdinal(NavigatorViewBase.DoubleClickBehavior.class, doubleClickBehavior.getSelectionIndex()).name());
store.setValue(DBeaverPreferences.EDITOR_SEPARATE_CONNECTION, editorSeparateConnectionCheck.getSelection());
RuntimeUtils.savePreferenceStore(store);
return true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册