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