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

  List<Map<String, dynamic>> entries;
  if (results is! Iterable<Map<String, dynamic>>) {
    entries = results.nonNulls.toList();
  } else {
    entries =
        results is List<Map<String, dynamic>> ? results : results.toList();
  }

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