existIDs<I extends Object> method

  1. @override
FutureOr<Iterable<I>> existIDs<I extends Object>(
  1. List<I?> ids, {
  2. Transaction? transaction,
})
override

Implementation

@override
FutureOr<Iterable<I>> existIDs<I extends Object>(List<I?> ids,
    {Transaction? transaction}) {
  var idsNotNull = ids is List<I> ? ids : ids.nonNulls.toList();
  if (idsNotNull.isEmpty) return <I>[];

  var cachedEntityByIDs =
      transaction?.getCachedEntitiesByIDs(idsNotNull, type: type);

  var cachedIDs = cachedEntityByIDs?.keys.whereType<I>().toList();

  List<I> notCachedIDs;
  if (cachedIDs != null) {
    notCachedIDs = idsNotNull.whereNotIn(cachedIDs).toList();
    if (notCachedIDs.isEmpty) {
      return idsNotNull;
    }
  } else {
    notCachedIDs = idsNotNull;
  }

  checkNotClosed();

  var op = TransactionOperationCount(name, operationExecutor,
      matcher: ConditionIdIN(notCachedIDs), transaction: transaction);

  try {
    return repositoryAdapter
        .doExistIDs(op, notCachedIDs)
        .resolveMapped((ids) {
      return [
        ...?cachedIDs,
        ...ids,
      ];
    });
  } catch (e, s) {
    var message = 'existIDs> '
        'cachedIDs: $cachedIDs ; '
        'notCachedIDs: $notCachedIDs ; '
        'op: $op';
    _log.severe(message, e, s);
    rethrow;
  }
}