resolveEntities method

FutureOr<List<O>> resolveEntities(
  1. Transaction transaction,
  2. Iterable<Map<String, dynamic>?>? results, {
  3. EntityResolutionRules? resolutionRules,
})

Implementation

FutureOr<List<O>> resolveEntities(
    Transaction transaction, Iterable<Map<String, dynamic>?>? results,
    {EntityResolutionRules? resolutionRules}) {
  if (results == null) return <O>[];

  if (results is List && results.isEmpty) return <O>[];

  final resolutionRulesResolved =
      resolveEntityResolutionRules(resolutionRules);

  Iterable<Map<String, dynamic>> entries;
  if (results is! Iterable<Map<String, dynamic>>) {
    entries = results.whereNotNull();
  } else {
    entries = results;
  }

  var fieldsListEntity = _fieldsListEntity;

  if (fieldsListEntity.isNotEmpty) {
    var retTableScheme = repositoryAdapter.getTableScheme();
    var retRelationshipFields =
        _getRelationshipFields(fieldsListEntity, retTableScheme);

    var ret = retTableScheme
        .resolveOther<List<O>, Map<String, TableRelationshipReference>>(
            retRelationshipFields, (tableScheme, relationshipFields) {
      if (relationshipFields.isNotEmpty) {
        entries = entries is List ? entries : entries.toList();

        var resolveRelationshipsFields = _resolveRelationshipFields(
          transaction,
          tableScheme,
          entries,
          relationshipFields,
          fieldsListEntity,
          resolutionRulesResolved,
        );

        return resolveRelationshipsFields.resolveWith(() =>
            _resolveEntitiesSubEntities(
                transaction, resolutionRulesResolved, entries));
      } else {
        return _resolveEntitiesSubEntities(
            transaction, resolutionRulesResolved, entries);
      }
    });

    return _resolveEntitiesFutures(transaction, ret);
  } else {
    var ret = _resolveEntitiesSubEntities(
        transaction, resolutionRulesResolved, entries);
    return _resolveEntitiesFutures(transaction, ret);
  }
}