提交 ea85c9aa 编写于 作者: S Serge Rider

#1430 SQL eidtor: auto-close results tab on error


Former-commit-id: 977bbe00
上级 e2b4528c
......@@ -134,6 +134,7 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.BEEP_ON_QUERY_END, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.REFRESH_DEFAULTS_AFTER_EXECUTE, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.RESULT_SET_ORIENTATION, SQLEditor.ResultSetOrientation.HORIZONTAL.name());
// Text editor default preferences
......
......@@ -84,7 +84,6 @@ import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetContainer;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetListener;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetCommandHandler;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardDialog;
import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog;
......@@ -1087,7 +1086,11 @@ public class SQLEditor extends SQLEditorBase implements
for (int i = 0; i < queries.size(); i++) {
SQLScriptElement query = queries.get(i);
QueryProcessor queryProcessor = (i == 0 && !isSingleQuery ? curQueryProcessor : createQueryProcessor(queries.size() == 1));
queryProcessor.processQueries(Collections.singletonList(query), true, export);
queryProcessor.processQueries(
Collections.singletonList(query),
true,
export,
getActivePreferenceStore().getBoolean(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR));
}
} else {
// Use current tab.
......@@ -1104,7 +1107,7 @@ public class SQLEditor extends SQLEditorBase implements
resultTabs.setSelection(firstResults.tabItem);
}
}
curQueryProcessor.processQueries(queries, false, export);
curQueryProcessor.processQueries(queries, false, export, false);
}
}
......@@ -1610,7 +1613,7 @@ public class SQLEditor extends SQLEditorBase implements
}
}
void processQueries(final List<SQLScriptElement> queries, final boolean fetchResults, boolean export)
void processQueries(final List<SQLScriptElement> queries, final boolean fetchResults, boolean export, boolean closeTabOnError)
{
if (queries.isEmpty()) {
// Nothing to process
......@@ -1636,7 +1639,7 @@ public class SQLEditor extends SQLEditorBase implements
showScriptPositionRuler(true);
QueryResultsContainer resultsContainer = getFirstResults();
SQLQueryListener listener = new SQLEditorQueryListener(this);
SQLQueryListener listener = new SQLEditorQueryListener(this, closeTabOnError);
final SQLQueryJob job = new SQLQueryJob(
getSite(),
isSingleQuery ? CoreMessages.editors_sql_job_execute_query : CoreMessages.editors_sql_job_execute_script,
......@@ -2059,9 +2062,11 @@ public class SQLEditor extends SQLEditorBase implements
private long lastUIUpdateTime;
private final ITextSelection originalSelection = (ITextSelection) getSelectionProvider().getSelection();
private int topOffset, visibleLength;
private boolean closeTabOnError;
private SQLEditorQueryListener(QueryProcessor queryProcessor) {
private SQLEditorQueryListener(QueryProcessor queryProcessor, boolean closeTabOnError) {
this.queryProcessor = queryProcessor;
this.closeTabOnError = closeTabOnError;
}
@Override
......@@ -2166,10 +2171,23 @@ public class SQLEditor extends SQLEditorBase implements
}
}
}
// Close tab on error
if (closeTabOnError && error != null) {
DBeaverUI.asyncExec(new Runnable() {
@Override
public void run() {
CTabItem tabItem = queryProcessor.getFirstResults().tabItem;
if (tabItem != null && tabItem.getShowClose()) {
tabItem.dispose();
}
}
});
}
// Beep
if (dataSourceContainer != null && !scriptMode && dataSourceContainer.getPreferenceStore().getBoolean(SQLPreferenceConstants.BEEP_ON_QUERY_END)) {
Display.getCurrent().beep();
}
// Notify agent
if (result.getQueryTime() > DBeaverCore.getGlobalPreferenceStore().getLong(DBeaverPreferences.AGENT_LONG_OPERATION_TIMEOUT) * 1000) {
DBeaverUI.notifyAgent(
"Query completed [" + getEditorInput().getName() + "]" + GeneralUtils.getDefaultLineSeparator() +
......
......@@ -55,5 +55,6 @@ public class SQLPreferenceConstants
public final static String BEEP_ON_QUERY_END = "SQLEditor.beepOnQueryEnd";
public final static String REFRESH_DEFAULTS_AFTER_EXECUTE = "SQLEditor.refreshDefaultsAfterExecute";
public final static String RESULT_SET_CLOSE_ON_ERROR = "SQLEditor.resultSet.closeOnError";
public final static String RESULT_SET_ORIENTATION = "SQLEditor.resultSet.orientation";
}
......@@ -51,6 +51,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
private Button connectionFoldersCheck;
private Text scriptTitlePattern;
private Button closeTabOnErrorCheck;
private Combo resultsOrientationCombo;
public PrefPageSQLEditor()
......@@ -73,6 +74,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.contains(DBeaverPreferences.SCRIPT_DELETE_EMPTY) ||
store.contains(DBeaverPreferences.SCRIPT_AUTO_FOLDERS) ||
store.contains(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR) ||
store.contains(SQLPreferenceConstants.RESULT_SET_ORIENTATION)
;
}
......@@ -125,8 +127,11 @@ public class PrefPageSQLEditor extends TargetPrefPage
}
{
Composite layoutGroup = UIUtils.createControlGroup(composite, "Layout", 2, GridData.FILL_HORIZONTAL, 0);
Composite layoutGroup = UIUtils.createControlGroup(composite, "Results view", 2, GridData.FILL_HORIZONTAL, 0);
((GridData)layoutGroup.getLayoutData()).horizontalSpan = 2;
closeTabOnErrorCheck = UIUtils.createCheckbox(layoutGroup, "Close results tab on error", null, false, 2);
resultsOrientationCombo = UIUtils.createLabelCombo(layoutGroup, "Results orientation", "Results orientation in SQL editor", SWT.READ_ONLY | SWT.DROP_DOWN);
((GridData)resultsOrientationCombo.getLayoutData()).grabExcessHorizontalSpace = false;
for (SQLEditor.ResultSetOrientation orientation : SQLEditor.ResultSetOrientation.values()) {
......@@ -155,6 +160,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
connectionFoldersCheck.setSelection(store.getBoolean(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS));
scriptTitlePattern.setText(store.getString(DBeaverPreferences.SCRIPT_TITLE_PATTERN));
closeTabOnErrorCheck.setSelection(store.getBoolean(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR));
SQLEditor.ResultSetOrientation orientation = SQLEditor.ResultSetOrientation.valueOf(store.getString(SQLPreferenceConstants.RESULT_SET_ORIENTATION));
resultsOrientationCombo.setText(orientation.getLabel());
} catch (Exception e) {
......@@ -178,6 +184,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.setValue(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS, connectionFoldersCheck.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_TITLE_PATTERN, scriptTitlePattern.getText());
store.setValue(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR, closeTabOnErrorCheck.getSelection());
String orientationLabel = resultsOrientationCombo.getText();
for (SQLEditor.ResultSetOrientation orientation : SQLEditor.ResultSetOrientation.values()) {
if (orientationLabel.equals(orientation.getLabel())) {
......@@ -206,6 +213,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.setToDefault(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS);
store.setToDefault(DBeaverPreferences.SCRIPT_TITLE_PATTERN);
store.setToDefault(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR);
store.setToDefault(SQLPreferenceConstants.RESULT_SET_ORIENTATION);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册