Skip to content

Commit

Permalink
refactor(database): create MasterView for default query when non limi…
Browse files Browse the repository at this point in the history
…ting query
  • Loading branch information
rbellens committed Jan 21, 2023
1 parent d06a8c8 commit e087089
Showing 1 changed file with 8 additions and 17 deletions.
25 changes: 8 additions & 17 deletions packages/firebase_dart/lib/src/database/impl/synctree.dart
Expand Up @@ -53,8 +53,8 @@ class MasterView {
/// because the data in this view is not yet complete, it will return true.
bool contains(QueryFilter f) {
if (f == masterFilter) return true;
if (f.orderBy != masterFilter.orderBy) return false;
if (!masterFilter.limits) return true;
if (f.orderBy != masterFilter.orderBy) return false;
if (!_data.localVersion.isComplete) {
if (masterFilter.limit == null) {
if (masterFilter.validInterval.contains(f.validInterval)) return true;
Expand Down Expand Up @@ -371,25 +371,16 @@ class SyncPoint {
}

MasterView getMasterViewForFilter(QueryFilter filter) {
// first check if filter already in one of the master views
for (var v in views.values) {
if (v.masterFilter == filter || v.observers.containsKey(filter)) {
return v;
}
}

// secondly, check if filter might be contained by one of the master views
for (var v in views.values) {
if (v.contains(filter)) {
return v;
}
}

// lastly, create a new master view
return createMasterViewForFilter(filter);
return getMasterViewIfExistsForFilter(filter) ??
createMasterViewForFilter(filter);
}

MasterView createMasterViewForFilter(QueryFilter filter) {
if (filter != const QueryFilter() && !filter.limits) {
return createMasterViewForFilter(const QueryFilter());
}
if (views[filter] != null) return views[filter]!;

var unlimitedFilter = views.keys.firstWhereOrNull((q) => !q.limits);
// TODO: do not create new master views when already an unlimited view exists
assert(views[filter] == null);
Expand Down

0 comments on commit e087089

Please sign in to comment.