selectByIDs method

  1. @override
FutureOr<List<O?>> selectByIDs(
  1. List ids, {
  2. Transaction? transaction,
  3. EntityResolutionRules? resolutionRules,
})
override

Implementation

@override
FutureOr<List<O?>> selectByIDs(List<dynamic> ids,
    {Transaction? transaction, EntityResolutionRules? resolutionRules}) {
  if (ids.isEmpty) return <O?>[];

  checkNotClosed();

  var idsUnique = ids.length == 1 ? ids : ids.toSet().toList();

  if (idsUnique.length == 1) {
    var id = idsUnique.first;

    var cachedEntity = transaction?.getCachedEntityByID(id, type: type);
    if (cachedEntity != null) {
      return <O>[cachedEntity];
    }

    var ret = selectByID(id,
        transaction: transaction, resolutionRules: resolutionRules);
    return ret.resolveMapped((o) => _idsToUniqueEntityList(ids, o));
  }

  var cachedEntities = transaction?.getCachedEntitiesByIDs<O>(idsUnique,
      type: type, removeCachedIDs: true);

  if (idsUnique.isEmpty) {
    var entities = _idsToEntitiesList(ids, null, cachedEntities);
    trackEntitiesNullable(entities);
    return entities;
  }

  var ret = select(ConditionIdIN(idsUnique),
      transaction: transaction, resolutionRules: resolutionRules);

  return ret
      .resolveMapped((results) => _idsToEntitiesList(
          ids, entityHandler.toEntitiesByIdMap(results), cachedEntities))
      .resolveMapped(trackEntitiesNullable);
}