Skip to content

Commit b0801b9

Browse files
committed
Use database transactions in new store delta updaters
Remove unneccessary check on each iteration in `chunked`
1 parent 6aec951 commit b0801b9

File tree

1 file changed

+32
-25
lines changed
  • lib/src/backend/impls/objectbox/backend/internal_workers/standard

1 file changed

+32
-25
lines changed

lib/src/backend/impls/objectbox/backend/internal_workers/standard/worker.dart

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ Future<void> _worker(
9797
const tilesChunkSize = 200;
9898

9999
final stores = root.box<ObjectBoxStore>();
100-
final tiles = root.box<ObjectBoxTile>();
101100

102101
final modifyStoreQuery =
103102
stores.query(ObjectBoxStore_.name.equals('')).build();
@@ -144,24 +143,28 @@ Future<void> _worker(
144143

145144
if (!hadTilesToUpdate && tilesToRemove.isEmpty) return 0;
146145

147-
tiles.removeMany(tilesToRemove);
146+
root.box<ObjectBoxTile>().removeMany(tilesToRemove);
148147

149148
updateRootStatistics(
150149
deltaLength: -tilesToRemove.length,
151150
deltaSize: rootDeltaSize,
152151
);
153152

154-
for (final MapEntry(key: storeName, value: deltaSize)
155-
in storeDeltaSize.entries) {
156-
modifyStoreQuery.param(ObjectBoxStore_.name).value = storeName;
157-
158-
stores.put(
159-
modifyStoreQuery.findUnique()!
160-
..size += deltaSize
161-
..length += storeDeltaLength[storeName]!,
162-
mode: PutMode.update,
163-
);
164-
}
153+
stores.putMany(
154+
storeDeltaSize.entries.map(
155+
(entry) {
156+
final storeName = entry.key;
157+
final deltaSize = entry.value;
158+
final deltaLength = storeDeltaLength[storeName]!;
159+
160+
modifyStoreQuery.param(ObjectBoxStore_.name).value = storeName;
161+
return modifyStoreQuery.findUnique()!
162+
..size += deltaSize
163+
..length += deltaLength;
164+
},
165+
).toList(growable: false),
166+
mode: PutMode.update,
167+
);
165168
},
166169
);
167170

@@ -1420,17 +1423,22 @@ Future<void> _worker(
14201423
},
14211424
);
14221425

1423-
for (final MapEntry(key: storeName, value: deltaSize)
1424-
in storeDeltaSize.entries) {
1425-
specificStoresQuery.param(ObjectBoxStore_.name).value = storeName;
1426-
1427-
root.box<ObjectBoxStore>().put(
1428-
specificStoresQuery.findUnique()!
1429-
..size += deltaSize
1430-
..length += storeDeltaLength[storeName] ?? 0,
1431-
mode: PutMode.update,
1432-
);
1433-
}
1426+
root.box<ObjectBoxStore>().putMany(
1427+
storeDeltaSize.entries.map(
1428+
(entry) {
1429+
final storeName = entry.key;
1430+
final deltaSize = entry.value;
1431+
final deltaLength = storeDeltaLength[storeName] ?? 0;
1432+
1433+
specificStoresQuery.param(ObjectBoxStore_.name).value =
1434+
storeName;
1435+
return specificStoresQuery.findUnique()!
1436+
..size += deltaSize
1437+
..length += deltaLength;
1438+
},
1439+
).toList(growable: false),
1440+
mode: PutMode.update,
1441+
);
14341442

14351443
updateRootStatistics(
14361444
deltaLength: rootDeltaLength,
@@ -1528,7 +1536,6 @@ extension _ChunkedFind<T> on Query<T> {
15281536
: min(chunkSize, limitTiles - offset)))
15291537
.find();
15301538

1531-
if (chunk.isEmpty) return;
15321539
yield* chunk;
15331540
if (chunk.length < chunkSize) return;
15341541
}

0 commit comments

Comments
 (0)