withJoin method

TableManagerState<$Database, $Table, $Dataclass, $FilterComposer, $OrderingComposer, $ComputedFieldComposer, $CreateCompanionCallback, $UpdateCompanionCallback, $DataclassWithReferences, $ActiveDataclass, $CreatePrefetchHooksCallback> withJoin({
  1. required Table currentTable,
  2. required Table referencedTable,
  3. required GeneratedColumn<Object> currentColumn,
  4. required GeneratedColumn<Object> referencedColumn,
})

This method creates a copy of this manager state with a join added to the query.

If the join already exists in the joinBuilders, but has useColumns: false, we update the JoinBuilder.

Implementation

TableManagerState<
  $Database,
  $Table,
  $Dataclass,
  $FilterComposer,
  $OrderingComposer,
  $ComputedFieldComposer,
  $CreateCompanionCallback,
  $UpdateCompanionCallback,
  $DataclassWithReferences,
  $ActiveDataclass,
  $CreatePrefetchHooksCallback
>
withJoin({
  required Table currentTable,
  required Table referencedTable,
  required GeneratedColumn currentColumn,
  required GeneratedColumn referencedColumn,
}) {
  final joinBuilder = JoinBuilder(
    currentTable: currentTable,
    referencedTable: referencedTable,
    currentColumn: currentColumn,
    referencedColumn: referencedColumn,
    useColumns: true,
  );
  // If there is already a join builder for this table, we will replace it
  // to ensure that we have `useColumns` set to true
  final newJoinBuilders =
      joinBuilders
          .whereNot(
            (element) =>
                element.currentColumn == currentColumn &&
                element.referencedColumn == referencedColumn,
          )
          .toSet()
        ..add(joinBuilder);
  return TableManagerState(
    db: db,
    table: table,
    createFilteringComposer: createFilteringComposer,
    createOrderingComposer: createOrderingComposer,
    createComputedFieldComposer: createComputedFieldComposer,
    createCompanionCallback: _createCompanionCallback,
    updateCompanionCallback: _updateCompanionCallback,
    withReferenceMapper: _withReferenceMapper,
    filter: filter,
    joinBuilders: newJoinBuilders,
    orderingBuilders: orderingBuilders,
    distinct: distinct,
    limit: limit,
    offset: offset,
    prefetchHooksCallback: _prefetchHooksCallback,
    prefetchedData: _prefetchedData,
    addedColumns: addedColumns,
  );
}