in lib/src/datastore_impl.dart [319:372]
Future<datastore.CommitResult> commit({
List<datastore.Entity> inserts = const [],
List<datastore.Entity> autoIdInserts = const [],
List<datastore.Key> deletes = const [],
datastore.Transaction? transaction,
}) {
final request = api.CommitRequest();
if (transaction != null) {
request.mode = 'TRANSACTIONAL';
request.transaction = (transaction as TransactionImpl).data;
} else {
request.mode = 'NON_TRANSACTIONAL';
}
var mutations = request.mutations = <api.Mutation>[];
if (inserts.isNotEmpty) {
for (var i = 0; i < inserts.length; i++) {
mutations.add(api.Mutation()
..upsert = _convertDatastore2ApiEntity(inserts[i], enforceId: true));
}
}
var autoIdStartIndex = -1;
if (autoIdInserts.isNotEmpty) {
autoIdStartIndex = mutations.length;
for (var i = 0; i < autoIdInserts.length; i++) {
mutations.add(api.Mutation()
..insert =
_convertDatastore2ApiEntity(autoIdInserts[i], enforceId: false));
}
}
if (deletes.isNotEmpty) {
for (var i = 0; i < deletes.length; i++) {
mutations.add(api.Mutation()
..delete = _convertDatastore2ApiKey(deletes[i], enforceId: true));
}
}
return _api.projects.commit(request, _project).then((result) {
var keys = <datastore.Key>[];
if (autoIdInserts.isNotEmpty) {
assert(result.mutationResults != null);
var mutationResults = result.mutationResults!;
assert(autoIdStartIndex != -1);
assert(mutationResults.length >=
(autoIdStartIndex + autoIdInserts.length));
keys = mutationResults
.skip(autoIdStartIndex)
.take(autoIdInserts.length)
.map<datastore.Key>((r) => _convertApi2DatastoreKey(r.key!))
.toList();
}
return datastore.CommitResult(keys);
}, onError: _handleError);
}