selectRelationship<E> method

  1. @override
FutureOr<Iterable> selectRelationship<E>(
  1. O? o,
  2. String field, {
  3. Object? oId,
  4. TypeInfo? fieldType,
  5. Transaction? transaction,
})
override

Implementation

@override
FutureOr<Iterable<dynamic>> selectRelationship<E>(O? o, String field,
    {Object? oId, TypeInfo? fieldType, Transaction? transaction}) {
  fieldType ??= entityHandler.getFieldType(o, field)!;

  oId ??= entityHandler.getID(o!);

  var cachedRelationship =
      _getCachedEntityRelationship(oId, field, fieldType, transaction);
  if (cachedRelationship != null) {
    return cachedRelationship;
  }

  var op = TransactionOperationSelectRelationship(
      name, operationExecutor, o ?? oId,
      transaction: transaction);

  var valuesType = fieldType.arguments0!.type;
  String valuesTableName = _resolveTableName(valuesType);

  try {
    return repositoryAdapter
        .doSelectRelationship(op, field, oId, valuesTableName, (sel) {
      var valuesIds = sel.map((e) => e['target_id']!).cast<E>().toList();
      return valuesIds;
    });
  } catch (e, s) {
    var message = 'selectRelationship[valuesTableName]> '
        'o: $o ; '
        'oId: $oId ; '
        'field: $field ; '
        'fieldType: $fieldType ; '
        'op: $op';
    _log.severe(message, e, s);
    rethrow;
  }
}