putAll method
Writes value and metadata for key atomically. Returns
the commit-log sequence number assigned to this write, or
null if no sequence number was produced.
Implementation
@override
@client
Future<int?> putAll(String key, AtData value, AtMetaData? metadata) async {
key = key.toLowerCase();
final atKeyType = AtKey.getKeyType(key, enforceNameSpace: false);
if (atKeyType == KeyType.invalidKey) {
logger.warning('Key $key is invalid');
throw InvalidAtKeyException('Key $key is invalid');
}
try {
int? result;
String hive_key = HiveKeyStoreHelper.prepareKey(key);
_checkMaxLength(hive_key);
AtData? existingData;
if (await exists(key)) {
existingData = await get(key);
}
value.metaData = AtMetadataBuilder(
newAtMetaData: metadata!,
existingMetaData: existingData?.metaData,
atSign: atSign)
.build();
await getBox().put(hive_key, value);
_updateMetadataCache(key, value.metaData);
// `_commitLog` is null on a commit-log-free keystore — the write
// still succeeds, it just produces no sequence number.
result = await _commitLog?.commit(hive_key, CommitOp.UPDATE_ALL);
_changesController
.add(existingData == null ? KeyAdded(key) : KeyUpdated(key));
return result;
} on HiveError catch (error) {
logger.severe('HiveAtKeyValueStore get error: $error');
await _restartHiveBox(error);
throw DataStoreException(error.message);
}
}