diff --git a/drift/lib/internal/manager.dart b/drift/lib/internal/manager.dart deleted file mode 100644 index c3aa31b5..00000000 --- a/drift/lib/internal/manager.dart +++ /dev/null @@ -1,53 +0,0 @@ -/// Internal library used by generated managers. -/// -/// This library is not part of drift's public API and should not be imported -/// manually. -library drift.internal.manager; - -import 'package:drift/drift.dart'; -import 'package:drift/src/runtime/manager/manager.dart'; - -/// Utility for creating a composer which contains the joins needed to -/// execute a query on a table that is referenced by a foreign key. -B composeWithJoins, B extends HasJoinBuilders>({ - required DB $db, - required CT $table, - required GeneratedColumn Function(CT) getCurrentColumn, - required RT referencedTable, - required GeneratedColumn Function(RT) getReferencedColumn, - required B Function(QC) builder, - required QC Function(DB db, RT table) getReferencedComposer, -}) { - // The name of the alias will be created using the following logic: - // "currentTableName__currentColumnName__referencedColumnName__referencedTableName" - // This is to ensure that the alias is unique - final currentColumn = getCurrentColumn($table); - final tempReferencedColumn = getReferencedColumn(referencedTable); - final aliasName = - '${currentColumn.tableName}__${currentColumn.name}__${tempReferencedColumn.tableName}__${tempReferencedColumn.name}'; - final aliasedReferencedTable = - $db.alias(referencedTable as TableInfo, aliasName); - final aliasedReferencedColumn = - getReferencedColumn(aliasedReferencedTable as RT); - - // Create a join builder for the referenced table - final joinBuilder = JoinBuilder( - currentTable: $table, - currentColumn: currentColumn, - referencedTable: aliasedReferencedTable, - referencedColumn: aliasedReferencedColumn, - ); - - // Get the query composer for the referenced table, passing in the aliased - // table and all the join builders - final referencedComposer = getReferencedComposer($db, aliasedReferencedTable); - - // Run the user provided builder with the referencedQueryComposer - // This may return a filter or ordering, but we only enforce that it's - // a HasJoinBuilders - final result = builder(referencedComposer); - result.addJoinBuilders({joinBuilder}); - - return result; -} diff --git a/drift/lib/src/runtime/manager/composer.dart b/drift/lib/src/runtime/manager/composer.dart index 08008281..086f0247 100644 --- a/drift/lib/src/runtime/manager/composer.dart +++ b/drift/lib/src/runtime/manager/composer.dart @@ -22,4 +22,50 @@ sealed class Composer { final CT $table; Composer(this.$db, this.$table); + + /// Utility for creating a composer which contains the joins needed to + /// execute a query on a table that is referenced by a foreign key. + B $composeWithJoins, + B extends HasJoinBuilders>({ + required DB $db, + required CT $table, + required GeneratedColumn Function(CT) getCurrentColumn, + required RT referencedTable, + required GeneratedColumn Function(RT) getReferencedColumn, + required B Function(QC) builder, + required QC Function(DB db, RT table) getReferencedComposer, + }) { + // The name of the alias will be created using the following logic: + // "currentTableName__currentColumnName__referencedColumnName__referencedTableName" + // This is to ensure that the alias is unique + final currentColumn = getCurrentColumn($table); + final tempReferencedColumn = getReferencedColumn(referencedTable); + final aliasName = + '${currentColumn.tableName}__${currentColumn.name}__${tempReferencedColumn.tableName}__${tempReferencedColumn.name}'; + final aliasedReferencedTable = + $db.alias(referencedTable as TableInfo, aliasName); + final aliasedReferencedColumn = + getReferencedColumn(aliasedReferencedTable as RT); + + // Create a join builder for the referenced table + final joinBuilder = JoinBuilder( + currentTable: $table, + currentColumn: currentColumn, + referencedTable: aliasedReferencedTable, + referencedColumn: aliasedReferencedColumn, + ); + + // Get the query composer for the referenced table, passing in the aliased + // table and all the join builders + final referencedComposer = + getReferencedComposer($db, aliasedReferencedTable); + + // Run the user provided builder with the referencedQueryComposer + // This may return a filter or ordering, but we only enforce that it's + // a HasJoinBuilders + final result = builder(referencedComposer); + result.addJoinBuilders({joinBuilder}); + + return result; + } } diff --git a/drift_dev/lib/src/writer/manager_writer.dart b/drift_dev/lib/src/writer/manager_writer.dart index 64bd7c1f..32c83f0a 100644 --- a/drift_dev/lib/src/writer/manager_writer.dart +++ b/drift_dev/lib/src/writer/manager_writer.dart @@ -101,10 +101,7 @@ class _ReferencedFilterWriter extends _FilterWriter { ..write(" $filterName(") ..writeDriftRef("ComposableFilter") ..writeln(" Function( $referencedFilterComposer f) f) {") - ..write("return ") - ..writeUriRef( - Uri.parse('package:drift/internal/manager.dart'), 'composeWithJoins') - ..writeln('(') + ..write("return \$composeWithJoins(") ..writeln("\$db: \$db,") ..writeln("\$table: \$table,") ..writeln("referencedTable: $referencedTableField,") @@ -186,10 +183,7 @@ class _ReferencedOrderingWriter extends _OrderingWriter { ..write(" $orderingName(") ..writeDriftRef("ComposableOrdering") ..writeln(" Function( $referencedOrderingComposer o) o) {") - ..write("return ") - ..writeUriRef( - Uri.parse('package:drift/internal/manager.dart'), 'composeWithJoins') - ..writeln('(') + ..write("return \$composeWithJoins(") ..writeln("\$db: \$db,") ..writeln("\$table: \$table,") ..writeln("referencedTable: $referencedTableField,")