提交 65ef1ba4 编写于 作者: S serge-rider

#3113 Close empty SQL script behavior config

上级 13ac7b69
......@@ -52,11 +52,6 @@ public final class DBeaverPreferences
public static final String SCRIPT_ERROR_HANDLING = "script.error.handling"; //$NON-NLS-1$
public static final String SCRIPT_FETCH_RESULT_SETS = "script.fetch.resultset"; //$NON-NLS-1$
public static final String SCRIPT_DELETE_EMPTY = "script.delete.empty"; //$NON-NLS-1$
public static final String SCRIPT_AUTO_FOLDERS = "script.auto.folders"; //$NON-NLS-1$
public static final String SCRIPT_CREATE_CONNECTION_FOLDERS = "script.auto.connection.folders"; //$NON-NLS-1$
public static final String SCRIPT_TITLE_PATTERN = "script.title.pattern"; //$NON-NLS-1$
public static final String STATEMENT_INVALIDATE_BEFORE_EXECUTE = "statement.invalidate.before.execute"; //$NON-NLS-1$
public static final String STATEMENT_TIMEOUT = "statement.timeout"; //$NON-NLS-1$
public static final String MEMORY_CONTENT_MAX_SIZE = "content.memory.maxsize"; //$NON-NLS-1$
......
......@@ -89,11 +89,6 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_ERROR_HANDLING, SQLScriptErrorHandling.STOP_ROLLBACK.name());
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_FETCH_RESULT_SETS, true);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_DELETE_EMPTY, true);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_AUTO_FOLDERS, false);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS, false);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.SCRIPT_TITLE_PATTERN, SQLEditor.DEFAULT_TITLE_PATTERN);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE, false);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.STATEMENT_TIMEOUT, 0);
PrefUtils.setDefaultPreferenceValue(store, DBeaverPreferences.READ_EXPENSIVE_PROPERTIES, false);
......@@ -118,6 +113,11 @@ public class DBeaverPreferencesInitializer extends AbstractPreferenceInitializer
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.AUTO_SAVE_ON_CLOSE, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.SCRIPT_DELETE_EMPTY, SQLPreferenceConstants.EmptyScriptCloseBehavior.DELETE_NEW.name());
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS, false);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.SCRIPT_TITLE_PATTERN, SQLEditor.DEFAULT_TITLE_PATTERN);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.ENABLE_AUTO_ACTIVATION, true);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.ENABLE_KEYSTROKE_ACTIVATION, true);
PrefUtils.setDefaultPreferenceValue(store, SQLPreferenceConstants.AUTO_ACTIVATION_DELAY, 0);
......
......@@ -879,7 +879,7 @@ public class SQLEditor extends SQLEditorBase implements
DBPDataSourceContainer dataSourceContainer = getDataSourceContainer();
DBPPreferenceStore preferenceStore = getActivePreferenceStore();
String pattern = preferenceStore.getString(DBeaverPreferences.SCRIPT_TITLE_PATTERN);
String pattern = preferenceStore.getString(SQLPreferenceConstants.SCRIPT_TITLE_PATTERN);
Map<String, Object> vars = new HashMap<>();
vars.put(VAR_CONNECTION_NAME, dataSourceContainer == null ? "none" : dataSourceContainer.getName());
vars.put(VAR_FILE_NAME, scriptName);
......@@ -1297,7 +1297,9 @@ public class SQLEditor extends SQLEditorBase implements
if (sqlFile == null || !sqlFile.exists()) {
return;
}
if (!getActivePreferenceStore().getBoolean(DBeaverPreferences.SCRIPT_DELETE_EMPTY)) {
SQLPreferenceConstants.EmptyScriptCloseBehavior emptyScriptCloseBehavior = SQLPreferenceConstants.EmptyScriptCloseBehavior.getByName(
getActivePreferenceStore().getString(SQLPreferenceConstants.SCRIPT_DELETE_EMPTY));
if (emptyScriptCloseBehavior == SQLPreferenceConstants.EmptyScriptCloseBehavior.NOTHING) {
return;
}
File osFile = sqlFile.getLocation().toFile();
......@@ -1307,14 +1309,16 @@ public class SQLEditor extends SQLEditorBase implements
}
try {
IProgressMonitor monitor = new NullProgressMonitor();
IFileState[] fileHistory = sqlFile.getHistory(monitor);
if (!ArrayUtils.isEmpty(fileHistory)) {
for (IFileState historyItem : fileHistory) {
try (InputStream contents = historyItem.getContents()) {
int cValue = contents.read();
if (cValue != -1) {
// At least once there was some content saved
return;
if (emptyScriptCloseBehavior == SQLPreferenceConstants.EmptyScriptCloseBehavior.DELETE_NEW) {
IFileState[] fileHistory = sqlFile.getHistory(monitor);
if (!ArrayUtils.isEmpty(fileHistory)) {
for (IFileState historyItem : fileHistory) {
try (InputStream contents = historyItem.getContents()) {
int cValue = contents.read();
if (cValue != -1) {
// At least once there was some content saved
return;
}
}
}
}
......
......@@ -19,6 +19,46 @@ package org.jkiss.dbeaver.ui.editors.sql;
public class SQLPreferenceConstants
{
public enum EmptyScriptCloseBehavior {
NOTHING("Do not delete"),
DELETE_NEW("Delete only new scripts"),
DELETE_ALWAYS("Delete always");
private final String title;
EmptyScriptCloseBehavior(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public static EmptyScriptCloseBehavior getByTitle(String title) {
for (EmptyScriptCloseBehavior escb : values()) {
if (escb.getTitle().equals(title)) {
return escb;
}
}
return NOTHING;
}
public static EmptyScriptCloseBehavior getByName(String name) {
switch (name) {
case "true":
return SQLPreferenceConstants.EmptyScriptCloseBehavior.DELETE_NEW;
case "false":
return SQLPreferenceConstants.EmptyScriptCloseBehavior.NOTHING;
default:
try {
return SQLPreferenceConstants.EmptyScriptCloseBehavior.valueOf(name);
} catch (IllegalArgumentException e) {
return NOTHING;
}
}
}
}
public static final String INSERT_SINGLE_PROPOSALS_AUTO = "SQLEditor.ContentAssistant.insert.single.proposal";
public static final String ENABLE_AUTO_ACTIVATION = "SQLEditor.ContentAssistant.auto.activation.enable";
public static final String ENABLE_KEYSTROKE_ACTIVATION = "SQLEditor.ContentAssistant.auto.keystrokes.activation";
......@@ -64,4 +104,8 @@ public class SQLPreferenceConstants
public final static String RESULT_SET_ORIENTATION = "SQLEditor.resultSet.orientation";
public static final String RESULTS_PANEL_RATIO = "SQLEditor.resultSet.ratio";
public static final String SCRIPT_DELETE_EMPTY = "script.delete.empty"; //$NON-NLS-1$
public static final String SCRIPT_AUTO_FOLDERS = "script.auto.folders"; //$NON-NLS-1$
public static final String SCRIPT_CREATE_CONNECTION_FOLDERS = "script.auto.connection.folders"; //$NON-NLS-1$
public static final String SCRIPT_TITLE_PATTERN = "script.title.pattern"; //$NON-NLS-1$
}
......@@ -41,7 +41,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
{
public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.main.sqleditor"; //$NON-NLS-1$
public static final String TEXT_EDITOR_PAGE_ID = "org.eclipse.ui.preferencePages.GeneralTextEditor"; //$NON-NLS-1$
private static final String TEXT_EDITOR_PAGE_ID = "org.eclipse.ui.preferencePages.GeneralTextEditor"; //$NON-NLS-1$
private Button editorSeparateConnectionCheck;
private Button connectOnActivationCheck;
......@@ -50,7 +50,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
private Button saveOnQueryExecution;
private Button autoSaveOnClose;
private Button deleteEmptyCheck;
private Combo deleteEmptyCombo;
private Button autoFoldersCheck;
private Button connectionFoldersCheck;
private Text scriptTitlePattern;
......@@ -75,8 +75,8 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.contains(SQLPreferenceConstants.AUTO_SAVE_ON_CLOSE) ||
store.contains(SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE) ||
store.contains(DBeaverPreferences.SCRIPT_DELETE_EMPTY) ||
store.contains(DBeaverPreferences.SCRIPT_AUTO_FOLDERS) ||
store.contains(SQLPreferenceConstants.SCRIPT_DELETE_EMPTY) ||
store.contains(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS) ||
store.contains(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR) ||
store.contains(SQLPreferenceConstants.RESULT_SET_ORIENTATION)
......@@ -113,7 +113,12 @@ public class PrefPageSQLEditor extends TargetPrefPage
Composite scriptsGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_resources, 2, GridData.FILL_HORIZONTAL, 0);
((GridData)scriptsGroup.getLayoutData()).horizontalSpan = 2;
deleteEmptyCheck = UIUtils.createCheckbox(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_delete_empty_scripts, null, false, 2);
deleteEmptyCombo = UIUtils.createLabelCombo(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_delete_empty_scripts, SWT.DROP_DOWN | SWT.READ_ONLY);
for (SQLPreferenceConstants.EmptyScriptCloseBehavior escb : SQLPreferenceConstants.EmptyScriptCloseBehavior.values()) {
deleteEmptyCombo.add(escb.getTitle());
}
deleteEmptyCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
deleteEmptyCombo.select(0);
autoFoldersCheck = UIUtils.createCheckbox(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_put_new_scripts, null, false, 2);
connectionFoldersCheck = UIUtils.createCheckbox(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_create_script_folders, null, false, 2);
scriptTitlePattern = UIUtils.createLabelText(scriptsGroup, CoreMessages.pref_page_sql_editor_title_pattern, "");
......@@ -166,10 +171,11 @@ public class PrefPageSQLEditor extends TargetPrefPage
autoSaveOnClose.setSelection(store.getBoolean(SQLPreferenceConstants.AUTO_SAVE_ON_CLOSE));
saveOnQueryExecution.setSelection(store.getBoolean(SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE));
deleteEmptyCheck.setSelection(store.getBoolean(DBeaverPreferences.SCRIPT_DELETE_EMPTY));
autoFoldersCheck.setSelection(store.getBoolean(DBeaverPreferences.SCRIPT_AUTO_FOLDERS));
connectionFoldersCheck.setSelection(store.getBoolean(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS));
scriptTitlePattern.setText(store.getString(DBeaverPreferences.SCRIPT_TITLE_PATTERN));
deleteEmptyCombo.setText(SQLPreferenceConstants.EmptyScriptCloseBehavior.getByName(
store.getString(SQLPreferenceConstants.SCRIPT_DELETE_EMPTY)).getTitle());
autoFoldersCheck.setSelection(store.getBoolean(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS));
connectionFoldersCheck.setSelection(store.getBoolean(SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS));
scriptTitlePattern.setText(store.getString(SQLPreferenceConstants.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));
......@@ -190,10 +196,11 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.setValue(SQLPreferenceConstants.AUTO_SAVE_ON_CLOSE, autoSaveOnClose.getSelection());
store.setValue(SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE, saveOnQueryExecution.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_DELETE_EMPTY, deleteEmptyCheck.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_AUTO_FOLDERS, autoFoldersCheck.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS, connectionFoldersCheck.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_TITLE_PATTERN, scriptTitlePattern.getText());
store.setValue(SQLPreferenceConstants.SCRIPT_DELETE_EMPTY,
SQLPreferenceConstants.EmptyScriptCloseBehavior.getByTitle(deleteEmptyCombo.getText()).name());
store.setValue(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS, autoFoldersCheck.getSelection());
store.setValue(SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS, connectionFoldersCheck.getSelection());
store.setValue(SQLPreferenceConstants.SCRIPT_TITLE_PATTERN, scriptTitlePattern.getText());
store.setValue(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR, closeTabOnErrorCheck.getSelection());
String orientationLabel = resultsOrientationCombo.getText();
......@@ -219,10 +226,10 @@ public class PrefPageSQLEditor extends TargetPrefPage
store.setToDefault(SQLPreferenceConstants.AUTO_SAVE_ON_CLOSE);
store.setToDefault(SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE);
store.setToDefault(DBeaverPreferences.SCRIPT_DELETE_EMPTY);
store.setToDefault(DBeaverPreferences.SCRIPT_AUTO_FOLDERS);
store.setToDefault(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS);
store.setToDefault(DBeaverPreferences.SCRIPT_TITLE_PATTERN);
store.setToDefault(SQLPreferenceConstants.SCRIPT_DELETE_EMPTY);
store.setToDefault(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS);
store.setToDefault(SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS);
store.setToDefault(SQLPreferenceConstants.SCRIPT_TITLE_PATTERN);
store.setToDefault(SQLPreferenceConstants.RESULT_SET_CLOSE_ON_ERROR);
store.setToDefault(SQLPreferenceConstants.RESULT_SET_ORIENTATION);
......
......@@ -23,7 +23,6 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.*;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
......@@ -32,6 +31,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
......@@ -263,7 +263,7 @@ public class ResourceUtils {
if (CommonUtils.equalObjects(scriptsRootFolder, scriptsFolder)) {
// We are in the root folder
if (dataSourceContainer != null) {
if (dataSourceContainer.getPreferenceStore().getBoolean(DBeaverPreferences.SCRIPT_CREATE_CONNECTION_FOLDERS)) {
if (dataSourceContainer.getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS)) {
// Create script folders according to connection folders
DBPDataSourceFolder conFolder = dataSourceContainer.getFolder();
if (conFolder != null) {
......@@ -282,7 +282,7 @@ public class ResourceUtils {
}
}
}
if (dataSourceContainer.getPreferenceStore().getBoolean(DBeaverPreferences.SCRIPT_AUTO_FOLDERS)) {
if (dataSourceContainer.getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS)) {
// Create special folder for connection
IFolder dbFolder = scriptsFolder.getFolder(CommonUtils.escapeFileName(dataSourceContainer.getName()));
if (dbFolder != null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册