/* * 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.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.ui.UIUtils; import org.jkiss.dbeaver.utils.PrefUtils; /** * PrefPageResultSetMain */ public class PrefPageResultSetMain extends TargetPrefPage { public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.main.resultset"; //$NON-NLS-1$ private Button autoFetchNextSegmentCheck; private Spinner resultSetSize; private Button resultSetUseSQLCheck; private Button serverSideOrderingCheck; private Button useFetchSize; private Button readQueryMetadata; private Button readQueryReferences; private Spinner queryCancelTimeout; private Button keepStatementOpenCheck; private Button rollbackOnErrorCheck; private Button alwaysUseAllColumns; private Button newRowsAfter; private Button refreshAfterUpdate; public PrefPageResultSetMain() { super(); } @Override protected boolean hasDataSourceSpecificOptions(DBPDataSourceContainer dataSourceDescriptor) { DBPPreferenceStore store = dataSourceDescriptor.getPreferenceStore(); return store.contains(DBeaverPreferences.RESULT_SET_AUTO_FETCH_NEXT_SEGMENT) || store.contains(DBeaverPreferences.RESULT_SET_MAX_ROWS) || store.contains(ModelPreferences.RESULT_SET_MAX_ROWS_USE_SQL) || store.contains(ModelPreferences.RESULT_SET_USE_FETCH_SIZE) || store.contains(DBeaverPreferences.RESULT_SET_READ_METADATA) || store.contains(DBeaverPreferences.RESULT_SET_CANCEL_TIMEOUT) || store.contains(ModelPreferences.QUERY_ROLLBACK_ON_ERROR) || store.contains(DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS) || store.contains(DBeaverPreferences.RS_EDIT_NEW_ROWS_AFTER) || store.contains(DBeaverPreferences.RS_EDIT_REFRESH_AFTER_UPDATE) || store.contains(DBeaverPreferences.KEEP_STATEMENT_OPEN) || store.contains(DBeaverPreferences.RESULT_SET_ORDER_SERVER_SIDE) ; } @Override protected boolean supportsDataSourceSpecificOptions() { return true; } @Override protected Control createPreferenceContent(Composite parent) { Composite composite = UIUtils.createPlaceholder(parent, 1, 5); { Group queriesGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_database_general_group_queries, 2, SWT.NONE, 0); queriesGroup.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); resultSetSize = UIUtils.createLabelSpinner(queriesGroup, CoreMessages.pref_page_database_general_label_result_set_max_size, "", 0, 0, 1024 * 1024); autoFetchNextSegmentCheck = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_auto_fetch_segment, null, true, 2); resultSetUseSQLCheck = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_use_sql, null, false, 2); serverSideOrderingCheck = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_server_side_order, null, false, 2); useFetchSize = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_fetch_size, null, false, 2); readQueryMetadata = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_read_metadata, "Disables metadata read. Executes query faster but disables results edit and foreign key navigation", false, 2); readQueryReferences = UIUtils.createCheckbox(queriesGroup, CoreMessages.pref_page_database_resultsets_label_read_references, "Disables references (foreign keys) information reading.", false, 2); queryCancelTimeout = UIUtils.createLabelSpinner(queriesGroup, CoreMessages.pref_page_database_general_label_result_set_cancel_timeout, CoreMessages.pref_page_database_general_label_result_set_cancel_timeout_tip, 0, 0, Integer.MAX_VALUE); queryCancelTimeout.setEnabled(false); readQueryMetadata.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateOptionsEnablement(); } }); } // Transactions settings { Group txnGroup = new Group(composite, SWT.NONE); txnGroup.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); txnGroup.setText(CoreMessages.pref_page_sql_editor_group_misc); txnGroup.setLayout(new GridLayout(1, false)); keepStatementOpenCheck = UIUtils.createCheckbox(txnGroup, CoreMessages.pref_page_database_general_checkbox_keep_cursor, false); rollbackOnErrorCheck = UIUtils.createCheckbox(txnGroup, CoreMessages.pref_page_database_general_checkbox_rollback_on_error, false); alwaysUseAllColumns = UIUtils.createCheckbox(txnGroup, CoreMessages.pref_page_content_editor_checkbox_keys_always_use_all_columns, false); newRowsAfter = UIUtils.createCheckbox(txnGroup, CoreMessages.pref_page_content_editor_checkbox_new_rows_after, false); refreshAfterUpdate = UIUtils.createCheckbox(txnGroup, CoreMessages.pref_page_content_editor_checkbox_refresh_after_update, false); } return composite; } private void updateOptionsEnablement() { readQueryReferences.setEnabled(readQueryMetadata.isEnabled() && readQueryMetadata.getSelection()); } @Override protected void loadPreferences(DBPPreferenceStore store) { try { autoFetchNextSegmentCheck.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_AUTO_FETCH_NEXT_SEGMENT)); resultSetSize.setSelection(store.getInt(DBeaverPreferences.RESULT_SET_MAX_ROWS)); resultSetUseSQLCheck.setSelection(store.getBoolean(ModelPreferences.RESULT_SET_MAX_ROWS_USE_SQL)); serverSideOrderingCheck.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_ORDER_SERVER_SIDE)); useFetchSize.setSelection(store.getBoolean(ModelPreferences.RESULT_SET_USE_FETCH_SIZE)); readQueryMetadata.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_READ_METADATA)); readQueryReferences.setSelection(store.getBoolean(DBeaverPreferences.RESULT_SET_READ_REFERENCES)); queryCancelTimeout.setSelection(store.getInt(DBeaverPreferences.RESULT_SET_CANCEL_TIMEOUT)); keepStatementOpenCheck.setSelection(store.getBoolean(DBeaverPreferences.KEEP_STATEMENT_OPEN)); rollbackOnErrorCheck.setSelection(store.getBoolean(ModelPreferences.QUERY_ROLLBACK_ON_ERROR)); alwaysUseAllColumns.setSelection(store.getBoolean(DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS)); newRowsAfter.setSelection(store.getBoolean(DBeaverPreferences.RS_EDIT_NEW_ROWS_AFTER)); refreshAfterUpdate.setSelection(store.getBoolean(DBeaverPreferences.RS_EDIT_REFRESH_AFTER_UPDATE)); updateOptionsEnablement(); } catch (Exception e) { log.warn(e); } } @Override protected void savePreferences(DBPPreferenceStore store) { try { store.setValue(DBeaverPreferences.RESULT_SET_AUTO_FETCH_NEXT_SEGMENT, autoFetchNextSegmentCheck.getSelection()); store.setValue(DBeaverPreferences.RESULT_SET_MAX_ROWS, resultSetSize.getSelection()); store.setValue(ModelPreferences.RESULT_SET_MAX_ROWS_USE_SQL, resultSetUseSQLCheck.getSelection()); store.setValue(DBeaverPreferences.RESULT_SET_ORDER_SERVER_SIDE, serverSideOrderingCheck.getSelection()); store.setValue(DBeaverPreferences.RESULT_SET_READ_METADATA, readQueryMetadata.getSelection()); store.setValue(DBeaverPreferences.RESULT_SET_READ_REFERENCES, readQueryReferences.getSelection()); store.setValue(ModelPreferences.RESULT_SET_USE_FETCH_SIZE, useFetchSize.getSelection()); store.setValue(DBeaverPreferences.RESULT_SET_CANCEL_TIMEOUT, queryCancelTimeout.getSelection()); store.setValue(DBeaverPreferences.KEEP_STATEMENT_OPEN, keepStatementOpenCheck.getSelection()); store.setValue(ModelPreferences.QUERY_ROLLBACK_ON_ERROR, rollbackOnErrorCheck.getSelection()); store.setValue(DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS, alwaysUseAllColumns.getSelection()); store.setValue(DBeaverPreferences.RS_EDIT_NEW_ROWS_AFTER, newRowsAfter.getSelection()); store.setValue(DBeaverPreferences.RS_EDIT_REFRESH_AFTER_UPDATE, refreshAfterUpdate.getSelection()); } catch (Exception e) { log.warn(e); } PrefUtils.savePreferenceStore(store); } @Override protected void clearPreferences(DBPPreferenceStore store) { store.setToDefault(DBeaverPreferences.RESULT_SET_AUTO_FETCH_NEXT_SEGMENT); store.setToDefault(DBeaverPreferences.RESULT_SET_MAX_ROWS); store.setToDefault(ModelPreferences.RESULT_SET_MAX_ROWS_USE_SQL); store.setToDefault(DBeaverPreferences.RESULT_SET_ORDER_SERVER_SIDE); store.setToDefault(DBeaverPreferences.RESULT_SET_READ_METADATA); store.setToDefault(DBeaverPreferences.RESULT_SET_READ_REFERENCES); store.setToDefault(ModelPreferences.RESULT_SET_USE_FETCH_SIZE); store.setToDefault(DBeaverPreferences.RESULT_SET_CANCEL_TIMEOUT); store.setToDefault(DBeaverPreferences.KEEP_STATEMENT_OPEN); store.setToDefault(ModelPreferences.QUERY_ROLLBACK_ON_ERROR); store.setToDefault(DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS); store.setToDefault(DBeaverPreferences.RS_EDIT_NEW_ROWS_AFTER); store.setToDefault(DBeaverPreferences.RS_EDIT_REFRESH_AFTER_UPDATE); updateOptionsEnablement(); } @Override protected String getPropertyPageID() { return PAGE_ID; } }