leftJoin<Tb> method

TupleJoinQuerySource<TDao, Tb?> leftJoin<Tb>(
  1. DataBean<Tb> other, {
  2. DataField? mainField,
  3. DataField? otherField,
  4. CompareType type = CompareType.equals,
})

Create JoinedQuerySource where this DataBean is used as main source.

This will create a left join. (Return value for other will be nullable)

When mainField and otherField are null, the only ForeignKey of this is used as mainField and the corresponding PrimaryKey of other is used as otherField. If this bean has multiple ForeignKeys to other, this throws a PersistenceException.

Implementation

TupleJoinQuerySource<TDao, Tb?> leftJoin<Tb>(
  DataBean<Tb> other, {
  DataField? mainField,
  DataField? otherField,
  CompareType type = CompareType.equals,
}) {
  if ((mainField == null) != (otherField == null)) {
    throw PersistenceException(
        'mainField and otherField must be either both null or both non-null.');
  }

  if (mainField == null && otherField == null) {
    final foreignField = fields
        .whereType<ForeignKey>()
        .firstOrNullWhere((f) => other.fields.contains(f.foreignPrimaryKey));
    mainField = foreignField;
    otherField = foreignField?.foreignPrimaryKey;
  }

  if (mainField == null || otherField == null) {
    throw PersistenceException(
        'Could not autodetect join relation between "$runtimeType" and "${other.runtimeType}".');
  }

  return TupleJoinQuerySource<TDao, Tb?>(
      this, BeanJoin(other, mainField, type, otherField));
}