Skip to content

Gh 4861 embedded query page size #4869

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,11 @@ public void init(final SelectionListModel<T, I> model) {
refresh(false, false);
}

public void refresh() {
quickFilter.clear();
refresh(true, true);
}

public void destroy() {
if (model != null) {
lastFilter = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ public void init(final SelectionListModel<T, I> model) {
selectionList.init(model);
}

public void refresh() {
selectionList.refresh();
}

public MultiSelectionModel<I> getSelectionModel() {
return selectionList.getSelectionModel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import stroom.docref.DocRef;
import stroom.explorer.client.presenter.DocSelectionBoxPresenter;
import stroom.query.shared.QueryDoc;
import stroom.query.shared.QueryTablePreferences;
import stroom.security.shared.DocumentPermission;
import stroom.util.shared.GwtNullSafe;
import stroom.util.shared.ModelStringUtil;

import com.google.gwt.user.client.ui.Focus;
Expand Down Expand Up @@ -83,6 +85,11 @@ public void read(final ComponentConfig componentConfig) {
getView().setQueryOnOpen(automate.isOpen());
getView().setAutoRefresh(automate.isRefresh());
getView().setRefreshInterval(automate.getRefreshInterval());
getView().setPageSize(GwtNullSafe.getOrElse(
settings,
EmbeddedQueryComponentSettings::getQueryTablePreferences,
QueryTablePreferences::getPageSize,
100));
}

@Override
Expand All @@ -94,6 +101,10 @@ public ComponentConfig write(final ComponentConfig componentConfig) {
}

private EmbeddedQueryComponentSettings writeSettings(final EmbeddedQueryComponentSettings settings) {
QueryTablePreferences queryTablePreferences = settings.getQueryTablePreferences();
QueryTablePreferences.Builder builder = QueryTablePreferences.copy(queryTablePreferences);
builder.pageSize(getView().getPageSize());

return settings
.copy()
.queryRef(getQuery())
Expand All @@ -102,6 +113,7 @@ private EmbeddedQueryComponentSettings writeSettings(final EmbeddedQueryComponen
.refresh(getView().isAutoRefresh())
.refreshInterval(getView().getRefreshInterval())
.build())
.queryTablePreferences(builder.build())
.build();
}

Expand Down Expand Up @@ -136,7 +148,9 @@ public boolean isDirty(final ComponentConfig componentConfig) {
final EmbeddedQueryComponentSettings newSettings = writeSettings(oldSettings);

final boolean equal = Objects.equals(oldSettings.getQueryRef(), newSettings.getQueryRef()) &&
Objects.equals(oldSettings.getAutomate(), newSettings.getAutomate());
Objects.equals(oldSettings.getAutomate(), newSettings.getAutomate()) &&
Objects.equals(oldSettings.getQueryTablePreferences(),
newSettings.getQueryTablePreferences());

return !equal;
}
Expand All @@ -157,5 +171,9 @@ public interface BasicEmbeddedQuerySettingsView
String getRefreshInterval();

void setRefreshInterval(String refreshInterval);

int getPageSize();

void setPageSize(int pageSize);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import stroom.dashboard.client.embeddedquery.BasicEmbeddedQuerySettingsPresenter.BasicEmbeddedQuerySettingsView;
import stroom.widget.tickbox.client.view.CustomCheckBox;
import stroom.widget.valuespinner.client.ValueSpinner;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.uibinder.client.UiBinder;
Expand Down Expand Up @@ -48,10 +49,15 @@ public class BasicEmbeddedQuerySettingsViewImpl
CustomCheckBox autoRefresh;
@UiField
TextBox refreshInterval;
@UiField
ValueSpinner pageSize;

@Inject
public BasicEmbeddedQuerySettingsViewImpl(final Binder binder) {
widget = binder.createAndBindUi(this);
pageSize.setValue(100);
pageSize.setMin(1);
pageSize.setMax(10000);
}

@Override
Expand Down Expand Up @@ -117,6 +123,16 @@ public void setRefreshInterval(final String refreshInterval) {
this.refreshInterval.setText(refreshInterval);
}

@Override
public int getPageSize() {
return pageSize.getIntValue();
}

@Override
public void setPageSize(final int pageSize) {
this.pageSize.setValue(pageSize);
}

public void onResize() {
((RequiresResize) widget).onResize();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,8 @@ private void loadEmbeddedQuery() {
queryModel.init(result.asDocRef());
query = result.getQuery();
initialised = true;
if (queryOnOpen) {
final Automate automate = settings.getAutomate();
if (queryOnOpen || automate.isOpen()) {
run(true, false);
}
}
Expand Down Expand Up @@ -744,6 +745,7 @@ public void run() {
protected void changeSettings() {
super.changeSettings();
if (currentTablePresenter != null) {
currentTablePresenter.changeSettings();
currentTablePresenter.refresh();
}
loadEmbeddedQuery();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -390,11 +390,15 @@ protected void onUnbind() {

private void onAddColumn(final ClickEvent event) {
if (currentSearchModel != null) {
columnSelectionListModel.setDataSourceRef(currentSearchModel.getIndexLoader().getLoadedDataSourceRef());
final DocRef dataSource = currentSearchModel.getIndexLoader().getLoadedDataSourceRef();
final boolean changedDataSource = !Objects.equals(columnSelectionListModel.getDataSourceRef(), dataSource);
columnSelectionListModel.setDataSourceRef(dataSource);

if (addColumnPopup == null) {
addColumnPopup = new SelectionPopup<>();
addColumnPopup.init(columnSelectionListModel);
} else if (changedDataSource) {
addColumnPopup.refresh();
}

final Element target = event.getNativeEvent().getEventTarget().cast();
Expand Down Expand Up @@ -1016,9 +1020,7 @@ private void updatePageSize() {
final int start = dataGrid.getVisibleRange().getStart();
dataGrid.setVisibleRange(new Range(
start,
tableComponentSettings.getPageSize() == null
? 100
: tableComponentSettings.getPageSize()));
GwtNullSafe.getOrElse(tableComponentSettings, TableComponentSettings::getPageSize, 100)));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,10 @@ public void setDataSourceRef(final DocRef dataSourceRef) {
this.dataSourceRef = dataSourceRef;
}

public DocRef getDataSourceRef() {
return dataSourceRef;
}

@Override
public void reset() {
lastCriteria = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safecss.shared.SafeStylesBuilder;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.view.client.Range;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.web.bindery.event.shared.EventBus;
Expand Down Expand Up @@ -286,6 +287,21 @@ private void setApplyValueFilters(final boolean applyValueFilters) {
}
}

public void changeSettings() {
final QueryTablePreferences queryTablePreferences = getQueryTablePreferences();
updatePageSize(queryTablePreferences);

// Update styles and re-render
tableRowStyles.setConditionalFormattingRules(queryTablePreferences.getConditionalFormattingRules());
}

private void updatePageSize(final QueryTablePreferences queryTablePreferences) {
final int start = dataGrid.getVisibleRange().getStart();
dataGrid.setVisibleRange(new Range(
start,
GwtNullSafe.getOrElse(queryTablePreferences, QueryTablePreferences::getPageSize, 100)));
}

private void setPause(final boolean pause,
final boolean refresh) {
// If currently paused then refresh if we are allowed.
Expand Down Expand Up @@ -781,7 +797,9 @@ public void setQueryTablePreferencesConsumer(final Consumer<QueryTablePreference

public void updateQueryTablePreferences() {
// Change value filter state.
setApplyValueFilters(queryTablePreferencesSupplier.get().applyValueFilters());
final QueryTablePreferences queryTablePreferences = queryTablePreferencesSupplier.get();
setApplyValueFilters(queryTablePreferences.applyValueFilters());
updatePageSize(queryTablePreferences);
refresh();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:v="urn:import:stroom.widget.tickbox.client.view"
xmlns:tickbox="urn:import:stroom.widget.tickbox.client.view"
xmlns:valuespinner="urn:import:stroom.widget.valuespinner.client"
xmlns:form="urn:import:stroom.widget.form.client">
<g:FlowPanel styleName="max form">
<form:FormGroup identity="basicQuerySettingsId" label="Id">
Expand All @@ -14,13 +15,16 @@
<g:SimplePanel ui:field="queryRef" addStyleNames="w-100"/>
</form:FormGroup>
<form:FormGroup>
<v:CustomCheckBox ui:field="queryOnOpen" identity="basicQuerySettingsQueryOnOpen" label="Query On Open"/>
<tickbox:CustomCheckBox ui:field="queryOnOpen" identity="basicQuerySettingsQueryOnOpen" label="Query On Open"/>
</form:FormGroup>
<form:FormGroup>
<v:CustomCheckBox ui:field="autoRefresh" identity="basicQuerySettingsAutoRefresh" label="Auto Refresh"/>
<tickbox:CustomCheckBox ui:field="autoRefresh" identity="basicQuerySettingsAutoRefresh" label="Auto Refresh"/>
</form:FormGroup>
<form:FormGroup identity="basicQuerySettingsRefreshInterval" label="Refresh Interval">
<g:TextBox ui:field="refreshInterval" addStyleNames="w-100"/>
</form:FormGroup>
<form:FormGroup identity="basicTableSettingsPageSize" label="Table Page Size">
<valuespinner:ValueSpinner ui:field="pageSize" width="200px"/>
</form:FormGroup>
</g:FlowPanel>
</ui:UiBinder>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:i="urn:import:stroom.item.client"
xmlns:tickbox="urn:import:stroom.widget.tickbox.client.view"
xmlns:v="urn:import:stroom.widget.valuespinner.client"
xmlns:valuespinner="urn:import:stroom.widget.valuespinner.client"
xmlns:form="urn:import:stroom.widget.form.client">
<g:FlowPanel styleName="max form">
<form:FormGroup identity="basicTableSettingsId" label="Id">
Expand All @@ -27,7 +27,7 @@
<g:TextBox ui:field="maxResults" addStyleNames="w-100"/>
</form:FormGroup>
<form:FormGroup identity="basicTableSettingsPageSize" label="Table Page Size">
<v:ValueSpinner ui:field="pageSize" width="200px"/>
<valuespinner:ValueSpinner ui:field="pageSize" width="200px"/>
</form:FormGroup>
<form:FormGroup>
<tickbox:CustomCheckBox ui:field="showDetail" identity="basicTableSettingsShowGroupDetail" label="Show Group Detail"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import stroom.lmdb2.LmdbEnvDir;
import stroom.lmdb2.LmdbKeySequence;
import stroom.query.api.v2.Column;
import stroom.query.api.v2.ExpressionUtil;
import stroom.query.api.v2.Format;
import stroom.query.common.v2.ExpressionPredicateFactory;
import stroom.query.common.v2.ExpressionPredicateFactory.ValueFunctionFactories;
Expand Down Expand Up @@ -37,7 +38,9 @@
import java.nio.ByteBuffer;
import java.nio.file.Path;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
Expand Down Expand Up @@ -492,6 +495,10 @@ public void search(final ExpressionCriteria criteria,
final DateTimeSettings dateTimeSettings,
final ExpressionPredicateFactory expressionPredicateFactory,
final ValuesConsumer consumer) {
// Ensure we have fields for all expression criteria.
final List<String> fields = ExpressionUtil.fields(criteria.getExpression());
fields.forEach(fieldIndex::create);

final ValueFunctionFactories<Val[]> valueFunctionFactories = createValueFunctionFactories(fieldIndex);
final Optional<Predicate<Val[]>> optionalPredicate = expressionPredicateFactory
.create(criteria.getExpression(), valueFunctionFactories, dateTimeSettings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

public class RangedStateDb extends AbstractDb<Key, StateValue> {

private static final ByteBuffer ZERO = ByteBuffer.allocateDirect(0);

RangedStateDb(final Path path,
final ByteBufferFactory byteBufferFactory) {
this(
Expand All @@ -43,21 +45,37 @@ public static RangedStateDb create(final Path path,
final ByteBufferFactory byteBufferFactory,
final PlanBDoc doc,
final boolean readOnly) {
if (doc.getSettings() instanceof final RangedStateSettings rangedStateSettings) {
return new RangedStateDb(path, byteBufferFactory, rangedStateSettings, readOnly);
} else {
throw new RuntimeException("No ranged state settings provided");
return new RangedStateDb(path, byteBufferFactory, getSettings(doc), readOnly);
}

private static RangedStateSettings getSettings(final PlanBDoc doc) {
if (doc.getSettings() instanceof final RangedStateSettings settings) {
return settings;
}
return RangedStateSettings.builder().build();
}

public Optional<RangedState> getState(final RangedStateRequest request) {
final ByteBuffer start = byteBufferFactory.acquire(Long.BYTES);
try {
start.putLong(request.key());
start.putLong(request.key() + 1);
start.flip();

final KeyRange<ByteBuffer> keyRange = KeyRange.atLeastBackward(start);
// read(readTxn -> {
// try (final CursorIterable<ByteBuffer> cursor = dbi.iterate(readTxn)) {
// final Iterator<KeyVal<ByteBuffer>> iterator = cursor.iterator();
// while (iterator.hasNext()
// && !Thread.currentThread().isInterrupted()) {
// final BBKV kv = BBKV.create(iterator.next());
// final long keyStart = kv.key().getLong(0);
// final long keyEnd = kv.key().getLong(Long.BYTES);
// System.out.println("start=" + keyStart + ", keyEnd=" + keyEnd);
// }
// }
// return Optional.empty();
// });

final KeyRange<ByteBuffer> keyRange = KeyRange.openBackward(start, ZERO);
return read(readTxn -> {
try (final CursorIterable<ByteBuffer> cursor = dbi.iterate(readTxn, keyRange)) {
final Iterator<KeyVal<ByteBuffer>> iterator = cursor.iterator();
Expand Down
Loading