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 Function(U x) propertyIdentifier,
) {
  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;
  final desc = relationships![propertyName];
  if (desc == null) {
    throw ArgumentError(
      "Invalid property selection. Relationship named '$propertyName' on table '$tableName' is not a relationship.",
    );
  }

  return desc;
}