/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ui.preferences;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.runtime.sql.SQLScriptCommitType;
import org.jkiss.dbeaver.runtime.sql.SQLScriptErrorHandling;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.CommonUtils;
/**
* PrefPageSQLExecute
*/
public class PrefPageSQLExecute extends TargetPrefPage
{
public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.main.sqlexecute"; //$NON-NLS-1$
private Button invalidateBeforeExecuteCheck;
private Spinner executeTimeoutText;
private Button soundOnQueryEnd;
private Button updateDefaultAfterExecute;
private Combo commitTypeCombo;
private Combo errorHandlingCombo;
private Spinner commitLinesText;
private Button fetchResultSetsCheck;
private Button resetCursorCheck;
private Text statementDelimiterText;
private Button ignoreNativeDelimiter;
private Button blankLineDelimiter;
private Button enableSQLParameters;
private Button enableSQLAnonymousParameters;
private Text anonymousParameterMarkText;
private Text namedParameterPrefixText;
public PrefPageSQLExecute()
{
super();
}
@Override
protected boolean hasDataSourceSpecificOptions(DBPDataSourceContainer dataSourceDescriptor)
{
DBPPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE) ||
store.contains(DBeaverPreferences.STATEMENT_TIMEOUT) ||
store.contains(DBeaverPreferences.SCRIPT_COMMIT_TYPE) ||
store.contains(DBeaverPreferences.SCRIPT_ERROR_HANDLING) ||
store.contains(DBeaverPreferences.SCRIPT_COMMIT_LINES) ||
store.contains(DBeaverPreferences.SCRIPT_FETCH_RESULT_SETS) ||
store.contains(ModelPreferences.SCRIPT_STATEMENT_DELIMITER) ||
store.contains(ModelPreferences.SCRIPT_IGNORE_NATIVE_DELIMITER) ||
store.contains(ModelPreferences.SCRIPT_STATEMENT_DELIMITER_BLANK) ||
store.contains(ModelPreferences.SQL_PARAMETERS_ENABLED) ||
store.contains(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_ENABLED) ||
store.contains(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_MARK) ||
store.contains(ModelPreferences.SQL_NAMED_PARAMETERS_PREFIX) ||
store.contains(SQLPreferenceConstants.RESET_CURSOR_ON_EXECUTE) ||
store.contains(SQLPreferenceConstants.BEEP_ON_QUERY_END) ||
store.contains(SQLPreferenceConstants.REFRESH_DEFAULTS_AFTER_EXECUTE)
;
}
@Override
protected boolean supportsDataSourceSpecificOptions()
{
return true;
}
@Override
protected Control createPreferenceContent(Composite parent)
{
Composite composite = UIUtils.createPlaceholder(parent, 2, 5);
// General settings
{
Composite commonGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_common, 2, GridData.FILL_HORIZONTAL, 0);
UIUtils.setGridSpan(commonGroup, 2, 1);
{
invalidateBeforeExecuteCheck = UIUtils.createCheckbox(commonGroup, CoreMessages.pref_page_sql_editor_label_invalidate_before_execute, null, false, 2);
soundOnQueryEnd = UIUtils.createCheckbox(commonGroup, CoreMessages.pref_page_sql_editor_label_sound_on_query_end, null, false, 2);
updateDefaultAfterExecute = UIUtils.createCheckbox(commonGroup, CoreMessages.pref_page_sql_editor_label_refresh_defaults_after_execute, null, false, 2);
UIUtils.createControlLabel(commonGroup, CoreMessages.pref_page_sql_editor_label_sql_timeout);
executeTimeoutText = new Spinner(commonGroup, SWT.BORDER);
executeTimeoutText.setSelection(0);
executeTimeoutText.setDigits(0);
executeTimeoutText.setIncrement(1);
executeTimeoutText.setMinimum(0);
executeTimeoutText.setMaximum(100000);
executeTimeoutText.setToolTipText("Query execute timeout (in seconds). 0 means no timeout");
}
}
// Scripts
{
Composite scriptsGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_scripts, 2, GridData.FILL_HORIZONTAL, 0);
UIUtils.setGridSpan(scriptsGroup, 2, 1);
{
UIUtils.createControlLabel(scriptsGroup, CoreMessages.pref_page_sql_editor_label_commit_type);
commitTypeCombo = new Combo(scriptsGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
commitTypeCombo.add(CoreMessages.pref_page_sql_editor_combo_item_script_end, SQLScriptCommitType.AT_END.ordinal());
commitTypeCombo.add(CoreMessages.pref_page_sql_editor_combo_item_each_line_autocommit, SQLScriptCommitType.AUTOCOMMIT.ordinal());
commitTypeCombo.add(CoreMessages.pref_page_sql_editor_combo_item_each_spec_line, SQLScriptCommitType.NLINES.ordinal());
commitTypeCombo.add(CoreMessages.pref_page_sql_editor_combo_item_no_commit, SQLScriptCommitType.NO_COMMIT.ordinal());
}
{
UIUtils.createControlLabel(scriptsGroup, CoreMessages.pref_page_sql_editor_label_commit_after_line);
commitLinesText = new Spinner(scriptsGroup, SWT.BORDER);
commitLinesText.setSelection(0);
commitLinesText.setDigits(0);
commitLinesText.setIncrement(1);
commitLinesText.setMinimum(1);
commitLinesText.setMaximum(1024 * 1024);
}
{
UIUtils.createControlLabel(scriptsGroup, CoreMessages.pref_page_sql_editor_label_error_handling);
errorHandlingCombo = new Combo(scriptsGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
errorHandlingCombo.add(CoreMessages.pref_page_sql_editor_combo_item_stop_rollback, SQLScriptErrorHandling.STOP_ROLLBACK.ordinal());
errorHandlingCombo.add(CoreMessages.pref_page_sql_editor_combo_item_stop_commit, SQLScriptErrorHandling.STOP_COMMIT.ordinal());
errorHandlingCombo.add(CoreMessages.pref_page_sql_editor_combo_item_ignore, SQLScriptErrorHandling.IGNORE.ordinal());
}
fetchResultSetsCheck = UIUtils.createCheckbox(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_fetch_resultsets, null, false, 2);
resetCursorCheck = UIUtils.createCheckbox(scriptsGroup, CoreMessages.pref_page_sql_editor_checkbox_reset_cursor, null, false, 2);
}
// Parameters
{
Composite paramsGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_parameters, 2, GridData.FILL_HORIZONTAL, 0);
enableSQLParameters = UIUtils.createCheckbox(paramsGroup, CoreMessages.pref_page_sql_editor_checkbox_enable_sql_parameters, null, false, 2);
enableSQLAnonymousParameters = UIUtils.createCheckbox(paramsGroup, CoreMessages.pref_page_sql_editor_checkbox_enable_sql_anonymous_parameters, null, false, 2);
anonymousParameterMarkText = UIUtils.createLabelText(paramsGroup, CoreMessages.pref_page_sql_editor_text_anonymous_parameter_mark, "", SWT.BORDER, new GridData(32, SWT.DEFAULT));
anonymousParameterMarkText.setTextLimit(1);
namedParameterPrefixText = UIUtils.createLabelText(paramsGroup, CoreMessages.pref_page_sql_editor_text_named_parameter_prefix, "", SWT.BORDER, new GridData(32, SWT.DEFAULT));
namedParameterPrefixText.setTextLimit(1);
}
// Delimiters
{
Composite delimGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_delimiters, 2, GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING, 0);
statementDelimiterText = UIUtils.createLabelText(delimGroup, CoreMessages.pref_page_sql_editor_text_statement_delimiter, "", SWT.BORDER, new GridData(32, SWT.DEFAULT));
//statementDelimiterText.setTextLimit(1);
ignoreNativeDelimiter = UIUtils.createCheckbox(delimGroup, CoreMessages.pref_page_sql_editor_checkbox_ignore_native_delimiter, null, false, 2);
blankLineDelimiter = UIUtils.createCheckbox(delimGroup, CoreMessages.pref_page_sql_editor_checkbox_blank_line_delimiter, null, false, 2);
}
return composite;
}
@Override
protected void loadPreferences(DBPPreferenceStore store)
{
try {
invalidateBeforeExecuteCheck.setSelection(store.getBoolean(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE));
executeTimeoutText.setSelection(store.getInt(DBeaverPreferences.STATEMENT_TIMEOUT));
soundOnQueryEnd.setSelection(store.getBoolean(SQLPreferenceConstants.BEEP_ON_QUERY_END));
updateDefaultAfterExecute.setSelection(store.getBoolean(SQLPreferenceConstants.REFRESH_DEFAULTS_AFTER_EXECUTE));
commitTypeCombo.select(SQLScriptCommitType.valueOf(store.getString(DBeaverPreferences.SCRIPT_COMMIT_TYPE)).ordinal());
errorHandlingCombo.select(SQLScriptErrorHandling.valueOf(store.getString(DBeaverPreferences.SCRIPT_ERROR_HANDLING)).ordinal());
commitLinesText.setSelection(store.getInt(DBeaverPreferences.SCRIPT_COMMIT_LINES));
fetchResultSetsCheck.setSelection(store.getBoolean(DBeaverPreferences.SCRIPT_FETCH_RESULT_SETS));
resetCursorCheck.setSelection(store.getBoolean(SQLPreferenceConstants.RESET_CURSOR_ON_EXECUTE));
statementDelimiterText.setText(store.getString(ModelPreferences.SCRIPT_STATEMENT_DELIMITER));
ignoreNativeDelimiter.setSelection(store.getBoolean(ModelPreferences.SCRIPT_IGNORE_NATIVE_DELIMITER));
blankLineDelimiter.setSelection(store.getBoolean(ModelPreferences.SCRIPT_STATEMENT_DELIMITER_BLANK));
enableSQLParameters.setSelection(store.getBoolean(ModelPreferences.SQL_PARAMETERS_ENABLED));
enableSQLAnonymousParameters.setSelection(store.getBoolean(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_ENABLED));
anonymousParameterMarkText.setText(store.getString(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_MARK));
namedParameterPrefixText.setText(store.getString(ModelPreferences.SQL_NAMED_PARAMETERS_PREFIX));
} catch (Exception e) {
log.warn(e);
}
}
@Override
protected void savePreferences(DBPPreferenceStore store)
{
try {
store.setValue(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE, invalidateBeforeExecuteCheck.getSelection());
store.setValue(DBeaverPreferences.STATEMENT_TIMEOUT, executeTimeoutText.getSelection());
store.setValue(SQLPreferenceConstants.BEEP_ON_QUERY_END, soundOnQueryEnd.getSelection());
store.setValue(SQLPreferenceConstants.REFRESH_DEFAULTS_AFTER_EXECUTE, updateDefaultAfterExecute.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_COMMIT_TYPE, CommonUtils.fromOrdinal(SQLScriptCommitType.class, commitTypeCombo.getSelectionIndex()).name());
store.setValue(DBeaverPreferences.SCRIPT_COMMIT_LINES, commitLinesText.getSelection());
store.setValue(DBeaverPreferences.SCRIPT_ERROR_HANDLING, CommonUtils.fromOrdinal(SQLScriptErrorHandling.class, errorHandlingCombo.getSelectionIndex()).name());
store.setValue(DBeaverPreferences.SCRIPT_FETCH_RESULT_SETS, fetchResultSetsCheck.getSelection());
store.setValue(SQLPreferenceConstants.RESET_CURSOR_ON_EXECUTE, resetCursorCheck.getSelection());
store.setValue(ModelPreferences.SCRIPT_STATEMENT_DELIMITER, statementDelimiterText.getText());
store.setValue(ModelPreferences.SCRIPT_IGNORE_NATIVE_DELIMITER, ignoreNativeDelimiter.getSelection());
store.setValue(ModelPreferences.SCRIPT_STATEMENT_DELIMITER_BLANK, blankLineDelimiter.getSelection());
store.setValue(ModelPreferences.SQL_PARAMETERS_ENABLED, enableSQLParameters.getSelection());
store.setValue(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_ENABLED, enableSQLAnonymousParameters.getSelection());
store.setValue(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_MARK, anonymousParameterMarkText.getText());
store.setValue(ModelPreferences.SQL_NAMED_PARAMETERS_PREFIX, namedParameterPrefixText.getText());
} catch (Exception e) {
log.warn(e);
}
PrefUtils.savePreferenceStore(store);
}
@Override
protected void clearPreferences(DBPPreferenceStore store)
{
store.setToDefault(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE);
store.setToDefault(DBeaverPreferences.STATEMENT_TIMEOUT);
store.setToDefault(DBeaverPreferences.SCRIPT_COMMIT_TYPE);
store.setToDefault(DBeaverPreferences.SCRIPT_ERROR_HANDLING);
store.setToDefault(DBeaverPreferences.SCRIPT_COMMIT_LINES);
store.setToDefault(DBeaverPreferences.SCRIPT_FETCH_RESULT_SETS);
store.setToDefault(SQLPreferenceConstants.RESET_CURSOR_ON_EXECUTE);
store.setToDefault(ModelPreferences.SCRIPT_STATEMENT_DELIMITER);
store.setToDefault(ModelPreferences.SCRIPT_IGNORE_NATIVE_DELIMITER);
store.setToDefault(ModelPreferences.SQL_PARAMETERS_ENABLED);
store.setToDefault(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_ENABLED);
store.setToDefault(ModelPreferences.SQL_ANONYMOUS_PARAMETERS_MARK);
store.setToDefault(ModelPreferences.SCRIPT_STATEMENT_DELIMITER_BLANK);
store.setToDefault(ModelPreferences.SQL_NAMED_PARAMETERS_PREFIX);
store.setToDefault(SQLPreferenceConstants.BEEP_ON_QUERY_END);
store.setToDefault(SQLPreferenceConstants.REFRESH_DEFAULTS_AFTER_EXECUTE);
}
@Override
protected String getPropertyPageID()
{
return PAGE_ID;
}
}