$composerBuilder<T, CurrentColumn extends GeneratedColumn<Object>, RelatedTable extends Table, RelatedColumn extends GeneratedColumn<Object>> method

T $composerBuilder<T, CurrentColumn extends GeneratedColumn<Object>, RelatedTable extends Table, RelatedColumn extends GeneratedColumn<Object>>({
  1. required Composer<GeneratedDatabase, Table> composer,
  2. required CurrentColumn getCurrentColumn(
    1. $FaceEmbeddingsTable
    ),
  3. required RelatedTable referencedTable,
  4. required RelatedColumn getReferencedColumn(
    1. RelatedTable
    ),
  5. required T builder(
    1. JoinBuilder joinBuilder, {
    2. void $addJoinBuilderToRootComposer(
      1. JoinBuilder
      )?,
    3. void $removeJoinBuilderFromRootComposer(
      1. JoinBuilder
      )?,
    }),
})
inherited

A helper method for creating related composers.

For example, a filter for a categories table. There is a filter on it for filtering todos.

db.managers.categories.filter((f) => f.todos((todoFilterComposer) => todoFilterComposer.title.equals("Math Homework")))

When we filter the todos, we will be creating a todos filter composer. This function is used to build that composer. It will create he needed joins and ensure that the correct table alias name is used internaly

Implementation

T $composerBuilder<
  T,
  CurrentColumn extends GeneratedColumn,
  RelatedTable extends Table,
  RelatedColumn extends GeneratedColumn
>({
  required Composer composer,
  required CurrentColumn Function(CurrentTable) getCurrentColumn,
  required RelatedTable referencedTable,
  required RelatedColumn Function(RelatedTable) getReferencedColumn,
  required T Function(
    JoinBuilder joinBuilder, {
    void Function(JoinBuilder)? $addJoinBuilderToRootComposer,
    void Function(JoinBuilder)? $removeJoinBuilderFromRootComposer,
  })
  builder,
}) {
  // Get the column of this table which will be used to build the join
  final aliasedColumn = getCurrentColumn(_aliasedTable);

  // Use the provided callbacks to create a join builder
  final referencedColumn = getReferencedColumn(referencedTable);
  final aliasName = $_aliasNameGenerator(aliasedColumn, referencedColumn);
  final aliasedReferencedTable = $db.alias(
    referencedTable as TableInfo,
    aliasName,
  );
  final aliasedReferencedColumn = getReferencedColumn(
    aliasedReferencedTable as RelatedTable,
  );
  final referencedJoinBuilder = JoinBuilder(
    currentTable: _aliasedTable,
    currentColumn: aliasedColumn,
    referencedTable: aliasedReferencedTable,
    referencedColumn: aliasedReferencedColumn,
  );
  $addJoinBuilderToRootComposer(referencedJoinBuilder);
  return builder(
    referencedJoinBuilder,
    $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
    $removeJoinBuilderFromRootComposer: $removeJoinBuilderFromRootComposer,
  );
}