提交 1734574c 编写于 作者: S Serge Rider

#10549 Data filter: row count calc is configurable (disabled by default)


Former-commit-id: a9179551
上级 d7e4b588
......@@ -164,7 +164,7 @@ public class FilterValueEditDialog extends BaseDialog{
};
handler.addContextMenu(elements);
handler.addFilterTextbox(composite);
handler.addFilterText(composite);
handler.setFilterPattern(null);
handler.loadValues(null);
......
......@@ -24,6 +24,7 @@ import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
......@@ -47,9 +48,12 @@ public class FilterValueEditPopup extends AbstractPopupPanel {
private static final String DIALOG_ID = "DBeaver.FilterValueEditMenu";//$NON-NLS-1$
private static final String PROP_SHOW_ROW_COUNT = "showRowCount";
private Object value;
private GenericFilterValueEdit filter;
private Point location;
private Button showRowCountCheck;
public FilterValueEditPopup(Shell parentShell, @NotNull ResultSetViewer viewer, @NotNull DBDAttributeBinding attr, @NotNull ResultSetRow[] rows) {
super(parentShell, NLS.bind(ResultSetMessages.dialog_filter_value_edit_title, attr.getFullyQualifiedName(DBPEvaluationContext.UI)));
......@@ -94,7 +98,7 @@ public class FilterValueEditPopup extends AbstractPopupPanel {
public void widgetSelected(SelectionEvent e) {
EditDictionaryPage editDictionaryPage = new EditDictionaryPage(((DBSEntityAssociation) descReferrer).getAssociatedEntity());
if (editDictionaryPage.edit(parent.getShell())) {
filter.loadValues(null);
reloadFilterValues();
}
}
});
......@@ -104,7 +108,7 @@ public class FilterValueEditPopup extends AbstractPopupPanel {
}
}
Text filterTextbox = filter.addFilterTextbox(group);
Text filterTextbox = filter.addFilterText(group);
filterTextbox.setFocus();
filterTextbox.addTraverseListener(e -> {
Table table = filter.getTableViewer().getTable();
......@@ -169,9 +173,22 @@ public class FilterValueEditPopup extends AbstractPopupPanel {
});
filter.getTableViewer().addDoubleClickListener(event -> applyFilterValue());
filter.setFilterPattern(null);
filter.loadValues(() ->
UIUtils.asyncExec(() -> UIUtils.packColumns(table, false)));
if (!filter.isDictionarySelector()) {
showRowCountCheck = UIUtils.createCheckbox(
filter.getButtonsPanel(),
"Show row count",
"Show row count for each dictionary value.\nMay be slow for big tables.",
getDialogBoundsSettings().getBoolean(PROP_SHOW_ROW_COUNT),
1);
((GridLayout) filter.getButtonsPanel().getLayout()).numColumns++;
showRowCountCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
getDialogBoundsSettings().put(PROP_SHOW_ROW_COUNT, showRowCountCheck.getSelection());
reloadFilterValues();
}
});
}
filter.createFilterButton(ResultSetMessages.sql_editor_resultset_filter_panel_btn_apply, new SelectionAdapter() {
@Override
......@@ -182,9 +199,23 @@ public class FilterValueEditPopup extends AbstractPopupPanel {
closeOnFocusLost(filterTextbox, table);
filter.setFilterPattern(null);
reloadFilterValues();
return tableComposite;
}
private void reloadFilterValues() {
filter.setShowRowCount(getDialogBoundsSettings().getBoolean(PROP_SHOW_ROW_COUNT));
filter.loadValues(() ->
UIUtils.asyncExec(() -> {
Table table = filter.getTableViewer().getTable();
if (table != null && !table.isDisposed()) {
UIUtils.packColumns(table, false);
}
}));
}
private void applyFilterValue() {
value = filter.getFilterValue();
okPressed();
......
......@@ -88,6 +88,7 @@ class GenericFilterValueEdit {
private Button toggleButton;
private transient final Set<Object> savedValues = new HashSet<>();
private boolean showRowCount;
GenericFilterValueEdit(@NotNull ResultSetViewer viewer, @NotNull DBDAttributeBinding attribute, @NotNull ResultSetRow[] rows, @NotNull DBCLogicalOperator operator) {
this.viewer = viewer;
......@@ -222,7 +223,7 @@ class GenericFilterValueEdit {
return (Collection<DBDLabelValuePair>) tableViewer.getInput();
}
Text addFilterTextbox(Composite composite) {
Text addFilterText(Composite composite) {
// Create filter text
final Text valueFilterText = new Text(composite, SWT.BORDER);
......@@ -239,6 +240,7 @@ class GenericFilterValueEdit {
void loadValues(Runnable onFinish) {
if (loadJob != null) {
loadJob.cancel();
loadJob.schedule(200);
return;
}
......@@ -304,7 +306,11 @@ class GenericFilterValueEdit {
List<DBDLabelValuePair> readEnumeration(DBRProgressMonitor monitor) throws DBException {
DBExecUtils.tryExecuteRecover(monitor, attributeEnumerable.getDataSource(), param -> {
try (DBCSession session = DBUtils.openUtilSession(monitor, attributeEnumerable, "Read value enumeration")) {
result = attributeEnumerable.getValueEnumeration(session, filterPattern, MAX_MULTI_VALUES, true, true);
result = attributeEnumerable.getValueEnumeration(
session,
filterPattern,
MAX_MULTI_VALUES, showRowCount,
true);
} catch (DBException e) {
throw new InvocationTargetException(e);
}
......@@ -480,6 +486,10 @@ class GenericFilterValueEdit {
return null;
}
public Composite getButtonsPanel() {
return buttonsPanel;
}
public Button createFilterButton(String label, SelectionAdapter selectionAdapter) {
if (isCheckedTable) {
Button button = UIUtils.createDialogButton(buttonsPanel, label, selectionAdapter);
......@@ -490,6 +500,18 @@ class GenericFilterValueEdit {
}
}
public boolean isDictionarySelector() {
return ResultSetUtils.getEnumerableConstraint(attribute) != null;
}
public boolean getShowRowCount() {
return showRowCount;
}
public void setShowRowCount(boolean showRowCount) {
this.showRowCount = showRowCount;
}
private abstract class KeyLoadJob extends AbstractJob {
private final Runnable onFinish;
KeyLoadJob(String name, Runnable onFinish) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册