identifyRelationship<T, U extends ManagedObject> method Null safety

ManagedRelationshipDescription identifyRelationship<T, U extends ManagedObject>(
  1. T propertyIdentifier(
    1. U x
    )
)

Returns a relationship in this entity for a property selector.

Invokes identifyProperties with propertyIdentifier, and ensures that a single relationship on this entity was selected. Returns that relationship.

Implementation

ManagedRelationshipDescription
    identifyRelationship<T, U extends ManagedObject>(
        T propertyIdentifier(U x)) {
  final keyPaths = identifyProperties(propertyIdentifier);
  if (keyPaths.length != 1) {
    throw ArgumentError(
        "Invalid property selector. Cannot access more than one property for this operation.");
  }

  final firstKeyPath = keyPaths.first;
  if (firstKeyPath.dynamicElements != null) {
    throw ArgumentError(
        "Invalid property selector. Cannot access subdocuments for this operation.");
  }

  final elements = firstKeyPath.path;
  if (elements.length > 1) {
    throw ArgumentError(
        "Invalid property selector. Cannot identify a nested relationship for this operation.");
  }

  final propertyName = elements.first!.name;
  var desc = relationships![propertyName];
  if (desc == null) {
    throw ArgumentError(
        "Invalid property selection. Relationship named '$propertyName' on table '$tableName' is not a relationship.");
  }

  return desc;
}