提交 36181ef6 编写于 作者: S Serge Rider

#1872 UI freeze fix (switch active connection in SQL Editor when query is running)

上级 bf21a25c
......@@ -71,7 +71,7 @@ import java.util.Map;
*
* @author Serge Rider
*/
public class SQLQueryJob extends DataSourceJob implements Closeable
public class SQLQueryJob extends DataSourceJob
{
private static final Log log = Log.getLog(SQLQueryJob.class);
......@@ -815,8 +815,7 @@ public class SQLQueryJob extends DataSourceJob implements Closeable
this.fetchResultSetNumber = fetchResultSetNumber;
}
@Override
public void close() {
public void closeJob() {
closeStatement();
}
......
......@@ -224,7 +224,7 @@ public class SQLEditor extends SQLEditorBase implements
public boolean setDataSourceContainer(@Nullable DBPDataSourceContainer container)
{
if (container == dataSourceContainer) {
onDataSourceChange();
fireDataSourceChange();
return true;
}
......@@ -245,7 +245,7 @@ public class SQLEditor extends SQLEditorBase implements
checkConnected(false, null);
setPartName(getEditorName());
onDataSourceChange();
fireDataSourceChange();
if (dataSourceContainer != null) {
dataSourceContainer.acquire(this);
......@@ -274,12 +274,7 @@ public class SQLEditor extends SQLEditorBase implements
releaseExecutionContext();
DBUserInterface.getInstance().showError("Open context", "Can't open editor connection", job.error);
} else {
DBeaverUI.syncExec(new Runnable() {
@Override
public void run() {
onDataSourceChange();
}
});
fireDataSourceChange();
}
}
});
......@@ -1191,6 +1186,19 @@ public class SQLEditor extends SQLEditorBase implements
return true;
}
/**
* Handles datasource change action in UI
*/
private void fireDataSourceChange()
{
DBeaverUI.syncExec(new Runnable() {
@Override
public void run() {
onDataSourceChange();
}
});
}
private void onDataSourceChange()
{
updateExecutionContext();
......@@ -1608,7 +1616,7 @@ public class SQLEditor extends SQLEditorBase implements
if (job.getState() == Job.RUNNING) {
job.cancel();
}
curJob.close();
curJob.closeJob();
curJob = null;
}
}
......
......@@ -596,12 +596,13 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
if (connectionCombo == null || connectionCombo.isDisposed()) {
return;
}
IDataSourceContainerProviderEx dataSourceUpdater = getActiveDataSourceUpdater();
final IDataSourceContainerProviderEx dataSourceUpdater = getActiveDataSourceUpdater();
if (dataSourceUpdater == null) {
return;
}
DBPDataSourceContainer curDataSource = dataSourceUpdater.getDataSourceContainer();
final DBPDataSourceContainer selectedDataSource;
List<? extends DBPDataSourceContainer> dataSources = getAvailableDataSources();
if (!CommonUtils.isEmpty(dataSources)) {
int curIndex = connectionCombo.getSelectionIndex();
......@@ -610,21 +611,35 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven
// Nothing changed
return;
}
dataSourceUpdater.setDataSourceContainer(null);
selectedDataSource = null;
} else if (curIndex > dataSources.size()) {
log.warn("Connection combo index out of bounds (" + curIndex + ")"); //$NON-NLS-1$ //$NON-NLS-2$
return;
} else {
// Change data source
DBPDataSourceContainer selectedDataSource = dataSources.get(curIndex - 1);
selectedDataSource = dataSources.get(curIndex - 1);
if (selectedDataSource == curDataSource) {
return;
} else {
dataSourceUpdater.setDataSourceContainer(selectedDataSource);
}
}
} else {
return;
}
updateControls(false);
final AbstractJob updateJob = new AbstractJob("Change active database") {
@Override
protected IStatus run(DBRProgressMonitor monitor) {
dataSourceUpdater.setDataSourceContainer(selectedDataSource);
return Status.OK_STATUS;
}
};
updateJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
updateControls(false);
}
});
updateJob.schedule();
}
private void changeDataBaseSelection() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册