in lib/src/db/db.dart [410:460]
Future _commitHelper(DatastoreDB db,
{List<Model>? inserts,
List<Key>? deletes,
ds.Transaction? datastoreTransaction}) {
List<ds.Entity>? entityInserts, entityAutoIdInserts;
List<ds.Key>? entityDeletes;
late List<Model> autoIdModelInserts;
if (inserts != null) {
entityInserts = <ds.Entity>[];
entityAutoIdInserts = <ds.Entity>[];
autoIdModelInserts = <Model>[];
for (var model in inserts) {
// If parent was not explicitly set, we assume this model will map to
// it's own entity group.
model.parentKey ??= db.defaultPartition.emptyKey;
if (model.id == null) {
autoIdModelInserts.add(model);
entityAutoIdInserts.add(db.modelDB.toDatastoreEntity(model));
} else {
entityInserts.add(db.modelDB.toDatastoreEntity(model));
}
}
}
if (deletes != null) {
entityDeletes = deletes.map(db.modelDB.toDatastoreKey).toList();
}
Future<ds.CommitResult> r;
if (datastoreTransaction != null) {
r = db.datastore.commit(
inserts: entityInserts ?? [],
autoIdInserts: entityAutoIdInserts ?? [],
deletes: entityDeletes ?? [],
transaction: datastoreTransaction);
} else {
r = db.datastore.commit(
inserts: entityInserts ?? [],
autoIdInserts: entityAutoIdInserts ?? [],
deletes: entityDeletes ?? []);
}
return r.then((ds.CommitResult result) {
if (entityAutoIdInserts != null && entityAutoIdInserts.isNotEmpty) {
for (var i = 0; i < result.autoIdInsertKeys.length; i++) {
var key = db.modelDB.fromDatastoreKey(result.autoIdInsertKeys[i]);
autoIdModelInserts[i].parentKey = key.parent;
autoIdModelInserts[i].id = key.id;
}
}
});
}