putMeta method
Future<int?>
putMeta(
- String key,
- AtMetaData? metadata, {
- bool skipCommit = false,
- AtAssertedTimestamps? assertedTimestamps,
override
Updates the metadata for key without touching its value.
Returns the commit-log sequence number assigned to this
write, or null if no sequence number was produced.
skipCommit and assertedTimestamps behave as on put.
Implementation
@override
Future<int?> putMeta(String key, AtMetaData? metadata,
{bool skipCommit = false,
AtAssertedTimestamps? assertedTimestamps}) async {
final k = _validateAndNormalize(key);
final existing = _existsSync(k) ? _getSync(k)! : AtData();
final toStore = AtData()
..data = existing.data
..metaData = AtMetadataBuilder(
atSign: atSign,
newAtMetaData: metadata,
existingMetaData: existing.metaData,
asserted: assertedTimestamps,
).build();
final result = _db.runInTransaction(() {
_upsertAtData(k, toStore);
if (skipCommit) {
// Purge any previous entry for this key, matching put/remove's
// skipCommit behaviour.
_sqliteCommitLog?.purgeSync(k);
return -1;
}
return _commitOrNull(k, CommitOp.UPDATE_META,
opTime: assertedTimestamps?.updatedAt);
});
_changes.add(KeyUpdated(k));
return result;
}