Skip to content

Commit 579178a

Browse files
authored
[DB] Implement countMatchingEntries() in FederatedObsStore (#325)
* Implement countMatchingEntries() in FederatedObsStore * remove atomic long reference
1 parent fa0eeea commit 579178a

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

sensorhub-core/src/main/java/org/sensorhub/impl/database/registry/FederatedObsStore.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,29 @@ public Stream<Entry<BigId, IObsData>> selectEntries(ObsFilter filter, Set<ObsFie
240240
}
241241

242242

243+
@Override
244+
public long countMatchingEntries(ObsFilter filter)
245+
{
246+
// if any kind of internal IDs are used, we need to dispatch the correct filter
247+
// to the corresponding DB so we create this map
248+
var filterDispatchMap = getFilterDispatchMap(filter);
249+
250+
if (filterDispatchMap != null)
251+
{
252+
return filterDispatchMap.values().stream()
253+
.mapToLong(v -> v.db.getObservationStore().countMatchingEntries((ObsFilter)v.filter))
254+
.reduce(0, Long::sum);
255+
}
256+
257+
// otherwise scan all DBs
258+
else
259+
{
260+
return parentDb.getAllObsDatabases().stream()
261+
.mapToLong(db -> db.getObservationStore().countMatchingEntries(filter))
262+
.reduce(0, Long::sum);
263+
}
264+
}
265+
243266
@Override
244267
public Stream<BigId> selectObservedFois(ObsFilter filter)
245268
{

0 commit comments

Comments
 (0)