From 6807b8bed4c7194426a50fc4844ef331be623cac Mon Sep 17 00:00:00 2001 From: jurgen Date: Mon, 6 May 2013 09:02:09 +0000 Subject: [PATCH] Multitab results --- .../org/jkiss/dbeaver/core/CoreMessages.java | 2 +- .../dbeaver/core/CoreResources.properties | 3 ++- .../dbeaver/core/CoreResources_ru.properties | 3 ++- .../dbeaver/runtime/sql/SQLQueryJob.java | 27 ++++++++++++++++--- .../dbeaver/runtime/sql/SQLQueryResult.java | 11 ++++++++ .../src/org/jkiss/dbeaver/ui/ICommandIds.java | 1 + .../controls/resultset/ResultSetViewer.java | 2 +- .../dbeaver/ui/editors/sql/SQLEditor.java | 27 ++++++++++++++++--- .../ui/editors/sql/SQLEditorContributor.java | 1 + 9 files changed, 66 insertions(+), 11 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 7233603e67..297358e9ff 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 @@ -336,7 +336,7 @@ public class CoreMessages extends NLS { public static String controls_resultset_viewer_ms; public static String controls_resultset_viewer_status_inserted_; - + public static String controls_resultset_viewer_status_empty; public static String controls_resultset_viewer_status_no_data; public static String controls_resultset_viewer_status_row; 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 6b62565aa0..f3039c4a59 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 @@ -202,6 +202,7 @@ controls_resultset_viewer_job_update=Update data controls_resultset_viewer_monitor_aply_changes=Apply resultset changes controls_resultset_viewer_ms=ms controls_resultset_viewer_status_inserted_=Inserted: {0} / Deleted: {1} / Updated: {2} +controls_resultset_viewer_status_empty=Empty controls_resultset_viewer_status_no_data=No data controls_resultset_viewer_status_row=Row controls_resultset_viewer_status_rows=\ row(s) @@ -614,7 +615,7 @@ editors_entity_monitor_add_node=Add node " editors_entity_monitor_preview_changes=Preview changes editors_entity_properties_text=Properties editors_entity_properties_tooltip_suffix=\ Properties -editors_sql_data_grid=Data Grid +editors_sql_data_grid=Results editors_sql_description=SQL Editor editors_sql_error_cant_execute_query_message=Can''t execute more than one query in one editor simultaneously editors_sql_error_cant_execute_query_title=Can''t execute query 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 3df4f80800..31f88f835a 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 @@ -187,7 +187,7 @@ ui_properties_category_information=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0 ui_properties_category_structure=\u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 ui_properties_task_add_folder=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0430\u043F\u043A\u0443 " ui_properties_task_add_node=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0437\u0435\u043B " -editors_sql_data_grid=\u0422\u0430\u0431\u043B\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 +editors_sql_data_grid=\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 editors_sql_description=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 SQL editors_sql_error_cant_execute_query_message=\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E. editors_sql_error_cant_execute_query_title=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441. @@ -382,6 +382,7 @@ controls_resultset_viewer_monitor_aply_changes=\u041F\u0440\u0438\u043C\u0435\u0 controls_resultset_viewer_ms=\u043C\u0441 controls_resultset_viewer_status_inserted_=\u0412\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E: {0} / \u0443\u0434\u0430\u043B\u0435\u043D\u043E: {1} / \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043E: {2} controls_resultset_viewer_status_no_data=\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445 +controls_resultset_viewer_status_empty=\u041F\u0443\u0441\u0442\u043E controls_resultset_viewer_status_row=\u0421\u0442\u0440\u043E\u043A\u0430 controls_resultset_viewer_status_rows=\ \u0441\u0442\u0440\u043E\u043A controls_resultset_viewer_status_rows_fetched=\ \u0441\u0442\u0440\u043E\u043A \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E 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 05f1200c8e..cbcd202026 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 @@ -417,11 +417,11 @@ public class SQLQueryJob extends DataSourceJob if (fetchResultSets) { // Fetch fake result set LocalResultSet fakeResultSet = new LocalResultSet(context, curStatement); - if (updateCount >= 0) { - fakeResultSet.addColumn("Affected Rows", DBSDataKind.NUMERIC); + if (updateCount > 0) { + fakeResultSet.addColumn("Updated Rows", DBSDataKind.NUMERIC); fakeResultSet.addRow(updateCount); } else { - + fakeResultSet.addColumn("Result", DBSDataKind.NUMERIC); } fetchQueryData(context, fakeResultSet); } @@ -500,6 +500,27 @@ public class SQLQueryJob extends DataSourceJob dataReceiver.fetchStart(context, curResultSet); try { + // Retrieve source entity + { + DBCResultSetMetaData rsMeta = curResultSet.getResultSetMetaData(); + String sourceName = null; + for (DBCAttributeMetaData attr : rsMeta.getAttributes()) { + String entityName = attr.getEntityName(); + if (!CommonUtils.isEmpty(entityName)) { + if (sourceName == null) { + sourceName = entityName; + } else if (!sourceName.equals(entityName)) { + // Multiple source entities + sourceName = null; + break; + } + } + } + if (!CommonUtils.isEmpty(sourceName)) { + curResult.setSourceEntity(sourceName); + } + } + // Fetch all rows while ((!hasLimits() || rowCount < rsMaxRows) && curResultSet.nextRow()) { if (monitor.isCanceled()) { break; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryResult.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryResult.java index f7ab927f04..d79a016d5f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryResult.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/runtime/sql/SQLQueryResult.java @@ -33,6 +33,7 @@ public class SQLQueryResult private boolean hasResultSet; private Throwable error; private long queryTime; + private String sourceEntity; public SQLQueryResult(SQLStatementInfo statement) { @@ -105,4 +106,14 @@ public class SQLQueryResult { this.queryTime = queryTime; } + + public String getSourceEntity() + { + return sourceEntity; + } + + public void setSourceEntity(String sourceEntity) + { + this.sourceEntity = sourceEntity; + } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ICommandIds.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ICommandIds.java index 410364819f..9297b6f3b7 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ICommandIds.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/ICommandIds.java @@ -37,6 +37,7 @@ public interface ICommandIds //public static final String CMD_OBJECT_FILTER = "org.jkiss.dbeaver.core.object.filter"; //$NON-NLS-1$ public static final String CMD_EXECUTE_STATEMENT = "org.jkiss.dbeaver.ui.editors.sql.run.statement"; //$NON-NLS-1$ + public static final String CMD_EXECUTE_STATEMENT_NEW = "org.jkiss.dbeaver.ui.editors.sql.run.resultSet"; //$NON-NLS-1$ public static final String CMD_EXECUTE_SCRIPT = "org.jkiss.dbeaver.ui.editors.sql.run.script"; //$NON-NLS-1$ public static final String CMD_EXPLAIN_PLAN = "org.jkiss.dbeaver.ui.editors.sql.run.explain"; //$NON-NLS-1$ public static final String CMD_ANALYSE_STATEMENT = "org.jkiss.dbeaver.ui.editors.sql.run.analyse"; //$NON-NLS-1$ diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java index 58f1ee0664..b04de82a19 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java @@ -971,7 +971,7 @@ public class ResultSetViewer extends Viewer implements IDataSourceProvider, ISpr { if (model.getRowCount() == 0) { if (model.getVisibleColumnCount() == 0) { - setStatus("Empty"); + setStatus(CoreMessages.controls_resultset_viewer_status_empty + getExecutionTimeMessage()); } else { setStatus(CoreMessages.controls_resultset_viewer_status_no_data + getExecutionTimeMessage()); } 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 1afe5491e1..32def4f3b5 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 @@ -586,11 +586,11 @@ public class SQLEditor extends SQLEditorBase if (newTab) { createResultSetViewer(); } - CTabItem curTab = resultTabs.getSelection(); - if (!(curTab.getData() instanceof ResultSetViewer)) { + if (!(resultTabs.getSelection().getData() instanceof ResultSetViewer)) { // Set first results viewer by default resultTabs.setSelection(0); } + final CTabItem curTab = resultTabs.getSelection(); final ResultSetViewer resultsView = getResultSetViewer(); // Prepare execution job @@ -672,6 +672,14 @@ public class SQLEditor extends SQLEditorBase if (queries.size() < 2) { getSelectionProvider().setSelection(originalSelection); } + curTab.setToolTipText(result.getStatement().getQuery()); + if (!CommonUtils.isEmpty(result.getSourceEntity())) { + curTab.setText(result.getSourceEntity()); + } else { + int tabIndex = getTabIndex(curTab); + curTab.setText( + CoreMessages.editors_sql_data_grid + (tabIndex == 0 ? "" : " [" + (tabIndex + 1) + "]")); + } if (result.getQueryTime() > DBeaverCore.getGlobalPreferenceStore().getLong(PrefConstants.AGENT_LONG_OPERATION_TIMEOUT) * 1000) { DBeaverUI.notifyAgent( @@ -716,7 +724,6 @@ public class SQLEditor extends SQLEditorBase } else { resultsView.setDataFilter(new DBDDataFilter(), false); resultsView.refresh(); - curTab.setToolTipText(queries.get(0).getQuery()); } } else { job.schedule(); @@ -724,6 +731,18 @@ public class SQLEditor extends SQLEditorBase } } + private int getTabIndex(CTabItem tab) + { + CTabItem[] items = resultTabs.getItems(); + for (int i = 0; i < items.length; i++) { + if (items[i] == tab) { + return i; + } + } + log.warn("Bad tab: " + tab); + return 0; + } + private void checkSession() throws DBException { @@ -892,7 +911,7 @@ public class SQLEditor extends SQLEditorBase public ResultSetViewer getResultSetViewer() { CTabItem curTab = resultTabs == null ? null : resultTabs.getSelection(); - if (curTab != null) { + if (curTab != null && !curTab.isDisposed()) { Object tabData = curTab.getData(); if (tabData instanceof ResultSetViewer) { return (ResultSetViewer) tabData; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java index 3cbbe53612..f844923098 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java @@ -163,6 +163,7 @@ public class SQLEditorContributor extends BasicTextEditorActionContributor super.contributeToToolBar(manager); manager.add(ActionUtils.makeCommandContribution(getPage().getWorkbenchWindow(), ICommandIds.CMD_EXECUTE_STATEMENT)); + manager.add(ActionUtils.makeCommandContribution(getPage().getWorkbenchWindow(), ICommandIds.CMD_EXECUTE_STATEMENT_NEW)); manager.add(ActionUtils.makeCommandContribution(getPage().getWorkbenchWindow(), ICommandIds.CMD_EXECUTE_SCRIPT)); manager.add(new Separator()); manager.add(ActionUtils.makeCommandContribution(getPage().getWorkbenchWindow(), ICommandIds.CMD_EXPLAIN_PLAN)); -- GitLab