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, resolveFiledName: true)!;

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