未验证 提交 70567b42 编写于 作者: G George 提交者: GitHub

#13816 fix rows number if selection is empty (#15767)

* #13816 fix rows number if selection is empty

* #13816 add suggestions from code review

* #13816 add comments about code changes
上级 855f1970
...@@ -23,8 +23,12 @@ import org.eclipse.jface.viewers.SelectionChangedEvent; ...@@ -23,8 +23,12 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.progress.UIJob; import org.eclipse.ui.progress.UIJob;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import java.util.StringJoiner;
class ResultSetStatListener extends ResultSetListenerAdapter { class ResultSetStatListener extends ResultSetListenerAdapter {
private final ResultSetViewer viewer; private final ResultSetViewer viewer;
private SLUpdateJob updateJob; private SLUpdateJob updateJob;
...@@ -57,24 +61,32 @@ class ResultSetStatListener extends ResultSetListenerAdapter { ...@@ -57,24 +61,32 @@ class ResultSetStatListener extends ResultSetListenerAdapter {
@Override @Override
public IStatus runInUIThread(IProgressMonitor monitor) { public IStatus runInUIThread(IProgressMonitor monitor) {
IResultSetSelection selection = viewer.getSelection(); IResultSetSelection selection = viewer.getSelection();
if (selection instanceof IResultSetSelectionExt) { DBPPreferenceStore preferenceStore = viewer.getPreferenceStore();
updateSelectionStatistics(selection, preferenceStore);
return Status.OK_STATUS;
}
private void updateSelectionStatistics(IResultSetSelection selection, DBPPreferenceStore preferenceStore) {
if (selection.getSelectedAttributes().isEmpty()) {
updateSelectionStatistics(preferenceStore, null);
} else if (selection instanceof IResultSetSelectionExt) {
IResultSetSelectionExt selectionExt = (IResultSetSelectionExt) selection; IResultSetSelectionExt selectionExt = (IResultSetSelectionExt) selection;
DBPPreferenceStore preferenceStore = viewer.getPreferenceStore(); updateSelectionStatistics(preferenceStore, selectionExt);
String slText = "";
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_ROWS)) {
slText = "Rows: " + selectionExt.getSelectedRowCount();// + "/" + selExt.getSelectedColumnCount() + "/" + selExt.getSelectedCellCount();
}
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_COLUMNS)) {
if (!slText.isEmpty()) slText += ", ";
slText += "Cols: " + selectionExt.getSelectedColumnCount();
}
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_CELLS)) {
if (!slText.isEmpty()) slText += ", ";
slText += "Cells: " + selectionExt.getSelectedCellCount();
}
viewer.setSelectionStatistics(slText);
} }
return Status.OK_STATUS; }
private void updateSelectionStatistics(@NotNull DBPPreferenceStore preferenceStore, @Nullable IResultSetSelectionExt selectionExt) {
StringJoiner slText = new StringJoiner(", ");
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_ROWS)) {
slText.add("Rows: " + (selectionExt == null ? 0 : selectionExt.getSelectedRowCount())) ;// + "/" + selExt.getSelectedColumnCount() + "/" + selExt.getSelectedCellCount();
}
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_COLUMNS)) {
slText.add("Cols: " + (selectionExt == null ? 0 : selectionExt.getSelectedColumnCount()));
}
if (preferenceStore.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_SEL_CELLS)) {
slText.add("Cells: " + (selectionExt == null ? 0 : selectionExt.getSelectedCellCount()));
}
viewer.setSelectionStatistics(slText.toString());
} }
} }
......
...@@ -4929,11 +4929,16 @@ public class ResultSetViewer extends Viewer ...@@ -4929,11 +4929,16 @@ public class ResultSetViewer extends Viewer
// Restore original position // Restore original position
restorePresentationState(presentationState); restorePresentationState(presentationState);
} }
if (focusRow >= 0 && focusRow < model.getRowCount() && model.getVisibleAttributeCount() > 0) { /*
if (getCurrentRow() == null) { We allow zero length row list for the situations when we load new an empty resultSet and the last resultSet
wasn't empty. Previously we didn't update the selected row count which caused a problem described in #15767
Now we call the ResultSetStatListener even if the resultSet is empty.
*/
if (focusRow >= 0 && (focusRow < model.getRowCount() || model.getRowCount() == 0) && model.getVisibleAttributeCount() > 0) {
if (getCurrentRow() == null && model.getRowCount() > 0) {
setCurrentRow(getModel().getRow(focusRow)); setCurrentRow(getModel().getRow(focusRow));
} }
if (getActivePresentation().getCurrentAttribute() == null) { if (getActivePresentation().getCurrentAttribute() == null || model.getRowCount() == 0) {
getActivePresentation().setCurrentAttribute(model.getVisibleAttribute(0)); getActivePresentation().setCurrentAttribute(model.getVisibleAttribute(0));
panelUpdated = true; // Attribute viewer refreshed panelUpdated = true; // Attribute viewer refreshed
} }
......
...@@ -346,9 +346,6 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe ...@@ -346,9 +346,6 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
this.curAttribute = attribute; this.curAttribute = attribute;
ResultSetRow curRow = controller.getCurrentRow(); ResultSetRow curRow = controller.getCurrentRow();
if (curRow == null) {
return;
}
GridCell cell = controller.isRecordMode() ? GridCell cell = controller.isRecordMode() ?
new GridCell(curRow, this.curAttribute) : new GridCell(curRow, this.curAttribute) :
new GridCell(this.curAttribute, curRow); new GridCell(this.curAttribute, curRow);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册