Future _commitHelper()

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;
      }
    }
  });
}