create method

  1. @override
Future<int?> create(
  1. String key,
  2. AtData value, {
  3. bool skipCommit = false,
  4. AtAssertedTimestamps? assertedTimestamps,
})
override

Creates key with value. Overrides KeyValueStore.create with the same skipCommit-purges and assertedTimestamps extras as put.

Implementation

@override
Future<int?> create(String key, AtData value,
    {bool skipCommit = false,
    AtAssertedTimestamps? assertedTimestamps}) async {
  final k = _validateAndNormalize(key);
  _checkMaxLength(k);
  final toStore = AtData()
    ..data = value.data
    ..metaData = AtMetadataBuilder(
            atSign: atSign,
            newAtMetaData: value.metaData,
            asserted: assertedTimestamps)
        .build();
  final commitOp = _commitOpForNewWrite(value.metaData);
  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, opTime: assertedTimestamps?.updatedAt);
  });
  _changes.add(KeyAdded(k));
  return result;
}