From 2854bcbdbb26b9429107ee3ad9b73b18a3067e62 Mon Sep 17 00:00:00 2001 From: jurgen Date: Wed, 30 Jan 2013 11:48:56 +0000 Subject: [PATCH] SLQ editor invalidate connection before statement execute. Statements highlight fixed Former-commit-id: d60127157d9baa5033f9282a711023082ad2d451 --- .../org/jkiss/dbeaver/core/CoreMessages.java | 2 +- .../dbeaver/core/CoreResources.properties | 1 + .../dbeaver/core/CoreResources_ru.properties | 5 ++-- .../org/jkiss/dbeaver/core/DBeaverCore.java | 1 + .../dbeaver/runtime/sql/SQLQueryJob.java | 7 ++++++ .../dbeaver/ui/editors/sql/SQLEditor.java | 24 ++++++++++++------- .../dbeaver/ui/preferences/PrefConstants.java | 1 + .../ui/preferences/PrefPageSQLEditor.java | 8 ++++++- 8 files changed, 37 insertions(+), 12 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java index aac05ee365..9bc662d9b1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java @@ -1260,7 +1260,7 @@ public class CoreMessages extends NLS { public static String pref_page_sql_editor_label_commit_type; public static String pref_page_sql_editor_label_error_handling; - + public static String pref_page_sql_editor_label_invalidate_before_execute; public static String pref_page_sql_editor_label_sql_timeout; public static String pref_page_target_button_use_datasource_settings; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties index acfdb03470..c1d6981bf9 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties @@ -826,6 +826,7 @@ pref_page_sql_editor_group_scripts=Scripts pref_page_sql_editor_label_commit_after_line=Commit after line pref_page_sql_editor_label_commit_type=Commit type pref_page_sql_editor_label_error_handling=Error handling +pref_page_sql_editor_label_invalidate_before_execute=Invalidate connection before execute pref_page_sql_editor_label_sql_timeout=SQL statement timeout pref_page_target_button_use_datasource_settings=Datasource "{0}" settings pref_page_target_link_show_datasource_settings=Datasource settings diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties index 1443f46f94..65200a70c3 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties @@ -531,7 +531,7 @@ dialog_select_datasource_error_message=\u0421\u043E\u0437\u0434\u0430\u0439\u044 dialog_select_datasource_error_title=\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 dialog_select_datasource_title=\u0412\u044B\u0431\u043E\u0440 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430 \u0434\u0430\u043D\u043D\u044B\u0445 dialog_cursor_view_monitor_rows_fetched=\ \u0441\u0442\u0440\u043E\u043A \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E -confirm_keep_statement_open_message=\u041E\u0431\u044B\u0447\u043D\u043E DBeaver \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0430\u043B\u0442\u0441\u0435\u0442\u044B \u0441\u0440\u0430\u0437\u0443 \u043F\u043E\u0441\u043B\u0435 \u0432\u044B\u0431\u043E\u0440\u043A\u0438. \u041D\u043E \u0434\u043B\u044F \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u043F\u0446\u0438\u044E "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C \u043A\u0443\u0440\u0441\u043E\u0440 \u0432 SQL-\u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435" \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445. \u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0441\u0443\u0440\u0441\u044B \u0431\u0430\u0437\u044B \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F. \u0425\u043E\u0442\u0438\u0442\u0435 \u043B\u0438 \u0412\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u044D\u0442\u0443 \u043E\u043F\u0446\u0438\u044E? (\u0422\u0430\u0431\u043B\u0438\u0446\u0430 \u0434\u0430\u043D\u043D\u044B\u0445 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430) +confirm_keep_statement_open_message=\u041E\u0431\u044B\u0447\u043D\u043E DBeaver \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u044B\u0431\u043E\u0440\u043A\u0443 \u0441\u0440\u0430\u0437\u0443 \u043F\u043E\u0441\u043B\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438. \u041D\u043E \u0434\u043B\u044F \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u043F\u0446\u0438\u044E "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C \u043A\u0443\u0440\u0441\u043E\u0440 \u0432 SQL-\u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435" \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445. \u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432 \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0441\u0443\u0440\u0441\u044B \u0431\u0430\u0437\u044B \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F. \u0425\u043E\u0442\u0438\u0442\u0435 \u043B\u0438 \u0412\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u044D\u0442\u0443 \u043E\u043F\u0446\u0438\u044E? (\u0422\u0430\u0431\u043B\u0438\u0446\u0430 \u0434\u0430\u043D\u043D\u044B\u0445 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430) confirm_keep_statement_open_toggleMessage=\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C dialog_data_label_value=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435: dialog_value_view_button_cancel=&\u041E\u0442\u043C\u0435\u043D\u0430 @@ -679,7 +679,7 @@ pref_page_query_manager_group_storage=\u0425\u0440\u0430\u043D\u0435\u043D\u0438 pref_page_query_manager_checkbox_store_log_file=\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043B\u043E\u0433 \u0432\u043E \u0432\u043D\u0435\u0448\u043D\u0438\u0439 \u0444\u0430\u0439\u043B pref_page_query_manager_logs_folder=\u0414\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u044F \u043B\u043E\u0433\u043E\u0432 -pref_page_sql_editor_checkbox_fetch_resultsets=\u0418\u0437\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u0440\u0435\u0437\u0430\u043B\u0442\u0441\u0435\u0442\u044B +pref_page_sql_editor_checkbox_fetch_resultsets=\u0418\u0437\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u0432\u044B\u0431\u043E\u0440\u043A\u0438 pref_page_sql_editor_checkbox_put_new_scripts=\u041F\u043E\u043C\u0435\u0449\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0432 \u043F\u0430\u043F\u043A\u0438 pref_page_sql_editor_combo_item_each_line_autocommit=\u041F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 (\u0430\u0432\u0442\u043E\u043A\u043E\u043C\u0438\u0442) pref_page_sql_editor_combo_item_each_spec_line=\u041F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 \u0437\u0430\u0434\u0430\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 @@ -694,6 +694,7 @@ pref_page_sql_editor_group_scripts=\u0421\u043A\u0440\u0438\u043F\u0442\u044B pref_page_sql_editor_label_commit_after_line=\u041A\u043E\u043C\u0438\u0442 \u043F\u043E\u0441\u043B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 pref_page_sql_editor_label_commit_type=\u0422\u0438\u043F \u043A\u043E\u043C\u0438\u0442\u0430 pref_page_sql_editor_label_error_handling=\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043E\u0448\u0438\u0431\u043E\u043A +pref_page_sql_editor_label_invalidate_before_execute=\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u0434 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435\u043C pref_page_sql_editor_label_sql_timeout=\u0422\u0430\u0439\u043C\u0430\u0443\u0442 SQL \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439 pref_page_ui_general_checkbox_automatic_updates=\u0410\u0432\u0442\u043E \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 pref_page_ui_general_group_general=\u041E\u0431\u0449\u0435\u0435 diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java index 789423c859..217144bd8f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java @@ -451,6 +451,7 @@ public class DBeaverCore implements DBPApplication { RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.SCRIPT_FETCH_RESULT_SETS, false); RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.SCRIPT_AUTO_FOLDERS, false); + RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE, false); RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.STATEMENT_TIMEOUT, 10 * 1000); RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.MEMORY_CONTENT_MAX_SIZE, 10000); RuntimeUtils.setDefaultPreferenceValue(store, PrefConstants.READ_EXPENSIVE_PROPERTIES, true); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java index bf763ee2bf..6c7e828bbe 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryJob.java @@ -59,6 +59,7 @@ public class SQLQueryJob extends DataSourceJob private SQLEditorBase editor; private List queries; private DBDDataReceiver dataReceiver; + private boolean connectionInvalidated = false; private SQLScriptCommitType commitType; private SQLScriptErrorHandling errorHandling; @@ -294,6 +295,12 @@ public class SQLQueryJob extends DataSourceJob // Prepare statement closeStatement(); + // Check and invalidate connection + if (!connectionInvalidated && getDataSource().getContainer().getPreferenceStore().getBoolean(PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE)) { + getDataSource().invalidateConnection(context.getProgressMonitor()); + connectionInvalidated = true; + } + boolean hasParameters = false; // Bind parameters if (!CommonUtils.isEmpty(sqlStatement.getParameters())) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java index e2cb3c043a..358c0bcb98 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java @@ -510,14 +510,7 @@ public class SQLEditor extends SQLEditorBase curJobRunning++; final long curTime = System.currentTimeMillis(); if (lastUIUpdateTime <= 0 || (curTime - lastUIUpdateTime >= SCRIPT_UI_UPDATE_PERIOD)) { - UIUtils.runInUI(null, new Runnable() { - @Override - public void run() - { - selectAndReveal(query.getOffset(), query.getLength()); - setStatus(query.getQuery(), false); - } - }); + selectStatementInEditor(query); lastUIUpdateTime = System.currentTimeMillis(); } } @@ -530,6 +523,9 @@ public class SQLEditor extends SQLEditorBase if (isDisposed()) { return; } + if (result.hasError()) { + selectStatementInEditor(result.getStatement()); + } if (isSingleQuery) { UIUtils.runInUI(null, new Runnable() { @Override @@ -541,6 +537,18 @@ public class SQLEditor extends SQLEditorBase } } + private void selectStatementInEditor(final SQLStatementInfo query) + { + UIUtils.runInUI(null, new Runnable() { + @Override + public void run() + { + selectAndReveal(query.getOffset(), query.getLength()); + setStatus(query.getQuery(), false); + } + }); + } + private void processQueryResult(SQLQueryResult result) { if (!result.hasError()) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefConstants.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefConstants.java index 027ee6b4da..cd83910a50 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefConstants.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefConstants.java @@ -39,6 +39,7 @@ public final class PrefConstants public static final String SCRIPT_FETCH_RESULT_SETS = "script.fetch.resultset"; //$NON-NLS-1$ public static final String SCRIPT_AUTO_FOLDERS = "script.auto.folders"; //$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$ public static final String CONTENT_HEX_ENCODING = "content.hex.encoding"; //$NON-NLS-1$ diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefPageSQLEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefPageSQLEditor.java index b7d5433bcf..4b7aa355d6 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefPageSQLEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/PrefPageSQLEditor.java @@ -46,6 +46,7 @@ public class PrefPageSQLEditor extends TargetPrefPage { public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.main.sqleditor"; //$NON-NLS-1$ + private Button invalidateBeforeExecuteCheck; private Spinner executeTimeoutText; private Combo commitTypeCombo; @@ -69,6 +70,7 @@ public class PrefPageSQLEditor extends TargetPrefPage { AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore(); return + store.contains(PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE) || store.contains(PrefConstants.STATEMENT_TIMEOUT) || store.contains(PrefConstants.SCRIPT_COMMIT_TYPE) || store.contains(PrefConstants.SCRIPT_ERROR_HANDLING) || @@ -93,8 +95,9 @@ public class PrefPageSQLEditor extends TargetPrefPage { Composite commonGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_editor_group_common, 2, GridData.FILL_HORIZONTAL, 0); { - UIUtils.createControlLabel(commonGroup, CoreMessages.pref_page_sql_editor_label_sql_timeout); + invalidateBeforeExecuteCheck = UIUtils.createLabelCheckbox(commonGroup, CoreMessages.pref_page_sql_editor_label_invalidate_before_execute, false); + UIUtils.createControlLabel(commonGroup, CoreMessages.pref_page_sql_editor_label_sql_timeout); executeTimeoutText = new Spinner(commonGroup, SWT.BORDER); executeTimeoutText.setSelection(0); executeTimeoutText.setDigits(0); @@ -193,6 +196,7 @@ public class PrefPageSQLEditor extends TargetPrefPage protected void loadPreferences(IPreferenceStore store) { try { + invalidateBeforeExecuteCheck.setSelection(store.getBoolean(PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE)); executeTimeoutText.setSelection(store.getInt(PrefConstants.STATEMENT_TIMEOUT)); commitTypeCombo.select(SQLScriptCommitType.valueOf(store.getString(PrefConstants.SCRIPT_COMMIT_TYPE)).ordinal()); @@ -221,6 +225,7 @@ public class PrefPageSQLEditor extends TargetPrefPage protected void savePreferences(IPreferenceStore store) { try { + store.setValue(PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE, invalidateBeforeExecuteCheck.getSelection()); store.setValue(PrefConstants.STATEMENT_TIMEOUT, executeTimeoutText.getSelection()); store.setValue(SQLPreferenceConstants.ENABLE_AUTO_ACTIVATION, csAutoActivationCheck.getSelection()); @@ -249,6 +254,7 @@ public class PrefPageSQLEditor extends TargetPrefPage @Override protected void clearPreferences(IPreferenceStore store) { + store.setToDefault(PrefConstants.STATEMENT_INVALIDATE_BEFORE_EXECUTE); store.setToDefault(PrefConstants.STATEMENT_TIMEOUT); store.setToDefault(SQLPreferenceConstants.ENABLE_AUTO_ACTIVATION); -- GitLab