Skip to content

Commit 2579e7d

Browse files
committed
#4858 Fix Plan B query field error
1 parent d0715ea commit 2579e7d

File tree

11 files changed

+93
-24
lines changed

11 files changed

+93
-24
lines changed

stroom-core-client-widget/src/main/java/stroom/item/client/SelectionList.java

+5
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ public void init(final SelectionListModel<T, I> model) {
258258
refresh(false, false);
259259
}
260260

261+
public void refresh() {
262+
quickFilter.clear();
263+
refresh(true, true);
264+
}
265+
261266
public void destroy() {
262267
if (model != null) {
263268
lastFilter = null;

stroom-core-client-widget/src/main/java/stroom/item/client/SelectionPopup.java

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public void init(final SelectionListModel<T, I> model) {
5151
selectionList.init(model);
5252
}
5353

54+
public void refresh() {
55+
selectionList.refresh();
56+
}
57+
5458
public MultiSelectionModel<I> getSelectionModel() {
5559
return selectionList.getSelectionModel();
5660
}

stroom-core-client/src/main/java/stroom/dashboard/client/table/TablePresenter.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -390,11 +390,15 @@ protected void onUnbind() {
390390

391391
private void onAddColumn(final ClickEvent event) {
392392
if (currentSearchModel != null) {
393-
columnSelectionListModel.setDataSourceRef(currentSearchModel.getIndexLoader().getLoadedDataSourceRef());
393+
final DocRef dataSource = currentSearchModel.getIndexLoader().getLoadedDataSourceRef();
394+
final boolean changedDataSource = !Objects.equals(columnSelectionListModel.getDataSourceRef(), dataSource);
395+
columnSelectionListModel.setDataSourceRef(dataSource);
394396

395397
if (addColumnPopup == null) {
396398
addColumnPopup = new SelectionPopup<>();
397399
addColumnPopup.init(columnSelectionListModel);
400+
} else if (changedDataSource) {
401+
addColumnPopup.refresh();
398402
}
399403

400404
final Element target = event.getNativeEvent().getEventTarget().cast();

stroom-core-client/src/main/java/stroom/query/client/presenter/DynamicColumnSelectionListModel.java

+4
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ public void setDataSourceRef(final DocRef dataSourceRef) {
209209
this.dataSourceRef = dataSourceRef;
210210
}
211211

212+
public DocRef getDataSourceRef() {
213+
return dataSourceRef;
214+
}
215+
212216
@Override
213217
public void reset() {
214218
lastCriteria = null;

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/AbstractDb.java

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import stroom.lmdb2.LmdbEnvDir;
1111
import stroom.lmdb2.LmdbKeySequence;
1212
import stroom.query.api.v2.Column;
13+
import stroom.query.api.v2.ExpressionUtil;
1314
import stroom.query.api.v2.Format;
1415
import stroom.query.common.v2.ExpressionPredicateFactory;
1516
import stroom.query.common.v2.ExpressionPredicateFactory.ValueFunctionFactories;
@@ -37,7 +38,9 @@
3738
import java.nio.ByteBuffer;
3839
import java.nio.file.Path;
3940
import java.util.Iterator;
41+
import java.util.List;
4042
import java.util.Optional;
43+
import java.util.Set;
4144
import java.util.concurrent.Semaphore;
4245
import java.util.concurrent.locks.ReentrantLock;
4346
import java.util.function.Consumer;
@@ -492,6 +495,10 @@ public void search(final ExpressionCriteria criteria,
492495
final DateTimeSettings dateTimeSettings,
493496
final ExpressionPredicateFactory expressionPredicateFactory,
494497
final ValuesConsumer consumer) {
498+
// Ensure we have fields for all expression criteria.
499+
final List<String> fields = ExpressionUtil.fields(criteria.getExpression());
500+
fields.forEach(fieldIndex::create);
501+
495502
final ValueFunctionFactories<Val[]> valueFunctionFactories = createValueFunctionFactories(fieldIndex);
496503
final Optional<Predicate<Val[]>> optionalPredicate = expressionPredicateFactory
497504
.create(criteria.getExpression(), valueFunctionFactories, dateTimeSettings);

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/RangedStateDb.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,14 @@ public static RangedStateDb create(final Path path,
4545
final ByteBufferFactory byteBufferFactory,
4646
final PlanBDoc doc,
4747
final boolean readOnly) {
48-
if (doc.getSettings() instanceof final RangedStateSettings rangedStateSettings) {
49-
return new RangedStateDb(path, byteBufferFactory, rangedStateSettings, readOnly);
50-
} else {
51-
throw new RuntimeException("No ranged state settings provided");
48+
return new RangedStateDb(path, byteBufferFactory, getSettings(doc), readOnly);
49+
}
50+
51+
private static RangedStateSettings getSettings(final PlanBDoc doc) {
52+
if (doc.getSettings() instanceof final RangedStateSettings settings) {
53+
return settings;
5254
}
55+
return RangedStateSettings.builder().build();
5356
}
5457

5558
public Optional<RangedState> getState(final RangedStateRequest request) {

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/SessionDb.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import stroom.lmdb2.BBKV;
88
import stroom.planb.shared.PlanBDoc;
99
import stroom.planb.shared.SessionSettings;
10+
import stroom.query.api.v2.ExpressionUtil;
1011
import stroom.query.common.v2.ExpressionPredicateFactory;
1112
import stroom.query.common.v2.ExpressionPredicateFactory.ValueFunctionFactories;
1213
import stroom.query.language.functions.FieldIndex;
@@ -25,6 +26,7 @@
2526
import java.util.Arrays;
2627
import java.util.HashMap;
2728
import java.util.Iterator;
29+
import java.util.List;
2830
import java.util.Map;
2931
import java.util.Optional;
3032
import java.util.function.Function;
@@ -58,18 +60,25 @@ public static SessionDb create(final Path path,
5860
final ByteBufferFactory byteBufferFactory,
5961
final PlanBDoc doc,
6062
final boolean readOnly) {
61-
if (doc.getSettings() instanceof final SessionSettings sessionSettings) {
62-
return new SessionDb(path, byteBufferFactory, sessionSettings, readOnly);
63-
} else {
64-
throw new RuntimeException("No session settings provided");
63+
return new SessionDb(path, byteBufferFactory, getSettings(doc), readOnly);
64+
}
65+
66+
private static SessionSettings getSettings(final PlanBDoc doc) {
67+
if (doc.getSettings() instanceof final SessionSettings settings) {
68+
return settings;
6569
}
70+
return SessionSettings.builder().build();
6671
}
6772

6873
public void search(final ExpressionCriteria criteria,
6974
final FieldIndex fieldIndex,
7075
final DateTimeSettings dateTimeSettings,
7176
final ExpressionPredicateFactory expressionPredicateFactory,
7277
final ValuesConsumer consumer) {
78+
// Ensure we have fields for all expression criteria.
79+
final List<String> fields = ExpressionUtil.fields(criteria.getExpression());
80+
fields.forEach(fieldIndex::create);
81+
7382
final ValueFunctionFactories<Val[]> valueFunctionFactories = createValueFunctionFactories(fieldIndex);
7483
final Optional<Predicate<Val[]>> optionalPredicate = expressionPredicateFactory
7584
.create(criteria.getExpression(), valueFunctionFactories, dateTimeSettings);

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/StateDb.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class StateDb extends AbstractDb<Key, StateValue> {
2020
}
2121

2222
public StateDb(final Path path,
23-
final ByteBufferFactory byteBufferFactory,
24-
final StateSettings settings,
25-
final boolean readOnly) {
23+
final ByteBufferFactory byteBufferFactory,
24+
final StateSettings settings,
25+
final boolean readOnly) {
2626
super(
2727
path,
2828
byteBufferFactory,
@@ -36,11 +36,14 @@ public static StateDb create(final Path path,
3636
final ByteBufferFactory byteBufferFactory,
3737
final PlanBDoc doc,
3838
final boolean readOnly) {
39-
if (doc.getSettings() instanceof final StateSettings stateSettings) {
40-
return new StateDb(path, byteBufferFactory, stateSettings, readOnly);
41-
} else {
42-
throw new RuntimeException("No state settings provided");
39+
return new StateDb(path, byteBufferFactory, getSettings(doc), readOnly);
40+
}
41+
42+
private static StateSettings getSettings(final PlanBDoc doc) {
43+
if (doc.getSettings() instanceof final StateSettings settings) {
44+
return settings;
4345
}
46+
return StateSettings.builder().build();
4447
}
4548

4649
public Optional<State> getState(final StateRequest request) {

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/TemporalRangedStateDb.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,14 @@ public static TemporalRangedStateDb create(final Path path,
4545
final ByteBufferFactory byteBufferFactory,
4646
final PlanBDoc doc,
4747
final boolean readOnly) {
48-
if (doc.getSettings() instanceof final TemporalRangedStateSettings temporalRangedStateSettings) {
49-
return new TemporalRangedStateDb(path, byteBufferFactory, temporalRangedStateSettings, readOnly);
50-
} else {
51-
throw new RuntimeException("No temporal ranged state settings provided");
48+
return new TemporalRangedStateDb(path, byteBufferFactory, getSettings(doc), readOnly);
49+
}
50+
51+
private static TemporalRangedStateSettings getSettings(final PlanBDoc doc) {
52+
if (doc.getSettings() instanceof final TemporalRangedStateSettings settings) {
53+
return settings;
5254
}
55+
return TemporalRangedStateSettings.builder().build();
5356
}
5457

5558
public Optional<TemporalRangedState> getState(final TemporalRangedStateRequest request) {

stroom-state/stroom-planb-impl/src/main/java/stroom/planb/impl/db/TemporalStateDb.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,14 @@ public static TemporalStateDb create(final Path path,
4545
final ByteBufferFactory byteBufferFactory,
4646
final PlanBDoc doc,
4747
final boolean readOnly) {
48-
if (doc.getSettings() instanceof final TemporalStateSettings temporalStateSettings) {
49-
return new TemporalStateDb(path, byteBufferFactory, temporalStateSettings, readOnly);
50-
} else {
51-
throw new RuntimeException("No temporal state settings provided");
48+
return new TemporalStateDb(path, byteBufferFactory, getSettings(doc), readOnly);
49+
}
50+
51+
private static TemporalStateSettings getSettings(final PlanBDoc doc) {
52+
if (doc.getSettings() instanceof final TemporalStateSettings settings) {
53+
return settings;
5254
}
55+
return TemporalStateSettings.builder().build();
5356
}
5457

5558
public Optional<TemporalState> getState(final TemporalStateRequest request) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
* Issue **#4858** : Fix Plan B query field error.
2+
3+
4+
```sh
5+
# ********************************************************************************
6+
# Issue title: using PlanB as Data Source for a Dashboard gives Query error
7+
# Issue link: https://github.com/gchq/stroom/issues/4858
8+
# ********************************************************************************
9+
10+
# ONLY the top line will be included as a change entry in the CHANGELOG.
11+
# The entry should be in GitHub flavour markdown and should be written on a SINGLE
12+
# line with no hard breaks. You can have multiple change files for a single GitHub issue.
13+
# The entry should be written in the imperative mood, i.e. 'Fix nasty bug' rather than
14+
# 'Fixed nasty bug'.
15+
#
16+
# Examples of acceptable entries are:
17+
#
18+
#
19+
# * Issue **123** : Fix bug with an associated GitHub issue in this repository
20+
#
21+
# * Issue **namespace/other-repo#456** : Fix bug with an associated GitHub issue in another repository
22+
#
23+
# * Fix bug with no associated GitHub issue.
24+
```

0 commit comments

Comments
 (0)