Skip to content

Commit 7f833b4

Browse files
authored
Modular manager references (#3399)
1 parent cda9f27 commit 7f833b4

File tree

18 files changed

+735
-128
lines changed

18 files changed

+735
-128
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ jobs:
273273
dart pub upgrade
274274
dart run build_runner build --delete-conflicting-outputs
275275
dart run bin/example.dart
276+
dart test
276277
- name: Integration test for migrations example
277278
working-directory: examples/migrations_example
278279
run: |

docs/lib/snippets/_shared/todo_tables.drift.dart

Lines changed: 73 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,36 @@ typedef $$TodoItemsTableUpdateCompanionBuilder = i1.TodoItemsCompanion
2222
i0.Value<DateTime?> dueDate,
2323
});
2424

25+
final class $$TodoItemsTableReferences extends i0
26+
.BaseReferences<i0.GeneratedDatabase, i1.$TodoItemsTable, i1.TodoItem> {
27+
$$TodoItemsTableReferences(super.$_db, super.$_table, super.$_typedResult);
28+
29+
static i1.$CategoriesTable _categoryTable(i0.GeneratedDatabase db) =>
30+
i3.ReadDatabaseContainer(db)
31+
.resultSet<i1.$CategoriesTable>('categories')
32+
.createAlias(i0.$_aliasNameGenerator(
33+
i3.ReadDatabaseContainer(db)
34+
.resultSet<i1.$TodoItemsTable>('todo_items')
35+
.category,
36+
i3.ReadDatabaseContainer(db)
37+
.resultSet<i1.$CategoriesTable>('categories')
38+
.id));
39+
40+
i1.$$CategoriesTableProcessedTableManager? get category {
41+
if ($_item.category == null) return null;
42+
final manager = i1
43+
.$$CategoriesTableTableManager(
44+
$_db,
45+
i3.ReadDatabaseContainer($_db)
46+
.resultSet<i1.$CategoriesTable>('categories'))
47+
.filter((f) => f.id($_item.category!));
48+
final item = $_typedResult.readTableOrNull(_categoryTable($_db));
49+
if (item == null) return manager;
50+
return i0.ProcessedTableManager(
51+
manager.$state.copyWith(prefetchedData: [item]));
52+
}
53+
}
54+
2555
class $$TodoItemsTableFilterComposer
2656
extends i0.Composer<i0.GeneratedDatabase, i1.$TodoItemsTable> {
2757
$$TodoItemsTableFilterComposer({
@@ -163,10 +193,7 @@ class $$TodoItemsTableTableManager extends i0.RootTableManager<
163193
i1.$$TodoItemsTableAnnotationComposer,
164194
$$TodoItemsTableCreateCompanionBuilder,
165195
$$TodoItemsTableUpdateCompanionBuilder,
166-
(
167-
i1.TodoItem,
168-
i0.BaseReferences<i0.GeneratedDatabase, i1.$TodoItemsTable, i1.TodoItem>
169-
),
196+
(i1.TodoItem, i1.$$TodoItemsTableReferences),
170197
i1.TodoItem,
171198
i0.PrefetchHooks Function({bool category})> {
172199
$$TodoItemsTableTableManager(
@@ -209,7 +236,10 @@ class $$TodoItemsTableTableManager extends i0.RootTableManager<
209236
dueDate: dueDate,
210237
),
211238
withReferenceMapper: (p0) => p0
212-
.map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
239+
.map((e) => (
240+
e.readTable(table),
241+
i1.$$TodoItemsTableReferences(db, table, e)
242+
))
213243
.toList(),
214244
prefetchHooksCallback: null,
215245
));
@@ -224,10 +254,7 @@ typedef $$TodoItemsTableProcessedTableManager = i0.ProcessedTableManager<
224254
i1.$$TodoItemsTableAnnotationComposer,
225255
$$TodoItemsTableCreateCompanionBuilder,
226256
$$TodoItemsTableUpdateCompanionBuilder,
227-
(
228-
i1.TodoItem,
229-
i0.BaseReferences<i0.GeneratedDatabase, i1.$TodoItemsTable, i1.TodoItem>
230-
),
257+
(i1.TodoItem, i1.$$TodoItemsTableReferences),
231258
i1.TodoItem,
232259
i0.PrefetchHooks Function({bool category})>;
233260
typedef $$CategoriesTableCreateCompanionBuilder = i1.CategoriesCompanion
@@ -241,6 +268,37 @@ typedef $$CategoriesTableUpdateCompanionBuilder = i1.CategoriesCompanion
241268
i0.Value<String> name,
242269
});
243270

271+
final class $$CategoriesTableReferences extends i0
272+
.BaseReferences<i0.GeneratedDatabase, i1.$CategoriesTable, i1.Category> {
273+
$$CategoriesTableReferences(super.$_db, super.$_table, super.$_typedResult);
274+
275+
static i0.MultiTypedResultKey<i1.$TodoItemsTable, List<i1.TodoItem>>
276+
_todoItemsRefsTable(i0.GeneratedDatabase db) =>
277+
i0.MultiTypedResultKey.fromTable(
278+
i3.ReadDatabaseContainer(db)
279+
.resultSet<i1.$TodoItemsTable>('todo_items'),
280+
aliasName: i0.$_aliasNameGenerator(
281+
i3.ReadDatabaseContainer(db)
282+
.resultSet<i1.$CategoriesTable>('categories')
283+
.id,
284+
i3.ReadDatabaseContainer(db)
285+
.resultSet<i1.$TodoItemsTable>('todo_items')
286+
.category));
287+
288+
i1.$$TodoItemsTableProcessedTableManager get todoItemsRefs {
289+
final manager = i1
290+
.$$TodoItemsTableTableManager(
291+
$_db,
292+
i3.ReadDatabaseContainer($_db)
293+
.resultSet<i1.$TodoItemsTable>('todo_items'))
294+
.filter((f) => f.category.id($_item.id));
295+
296+
final cache = $_typedResult.readTableOrNull(_todoItemsRefsTable($_db));
297+
return i0.ProcessedTableManager(
298+
manager.$state.copyWith(prefetchedData: cache));
299+
}
300+
}
301+
244302
class $$CategoriesTableFilterComposer
245303
extends i0.Composer<i0.GeneratedDatabase, i1.$CategoriesTable> {
246304
$$CategoriesTableFilterComposer({
@@ -344,10 +402,7 @@ class $$CategoriesTableTableManager extends i0.RootTableManager<
344402
i1.$$CategoriesTableAnnotationComposer,
345403
$$CategoriesTableCreateCompanionBuilder,
346404
$$CategoriesTableUpdateCompanionBuilder,
347-
(
348-
i1.Category,
349-
i0.BaseReferences<i0.GeneratedDatabase, i1.$CategoriesTable, i1.Category>
350-
),
405+
(i1.Category, i1.$$CategoriesTableReferences),
351406
i1.Category,
352407
i0.PrefetchHooks Function({bool todoItemsRefs})> {
353408
$$CategoriesTableTableManager(
@@ -378,7 +433,10 @@ class $$CategoriesTableTableManager extends i0.RootTableManager<
378433
name: name,
379434
),
380435
withReferenceMapper: (p0) => p0
381-
.map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
436+
.map((e) => (
437+
e.readTable(table),
438+
i1.$$CategoriesTableReferences(db, table, e)
439+
))
382440
.toList(),
383441
prefetchHooksCallback: null,
384442
));
@@ -393,10 +451,7 @@ typedef $$CategoriesTableProcessedTableManager = i0.ProcessedTableManager<
393451
i1.$$CategoriesTableAnnotationComposer,
394452
$$CategoriesTableCreateCompanionBuilder,
395453
$$CategoriesTableUpdateCompanionBuilder,
396-
(
397-
i1.Category,
398-
i0.BaseReferences<i0.GeneratedDatabase, i1.$CategoriesTable, i1.Category>
399-
),
454+
(i1.Category, i1.$$CategoriesTableReferences),
400455
i1.Category,
401456
i0.PrefetchHooks Function({bool todoItemsRefs})>;
402457
typedef $$UsersTableCreateCompanionBuilder = i1.UsersCompanion Function({

docs/lib/snippets/modular/drift/example.drift.dart

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,36 @@ typedef $TodosUpdateCompanionBuilder = i1.TodosCompanion Function({
1717
i0.Value<int?> category,
1818
});
1919

20+
final class $TodosReferences
21+
extends i0.BaseReferences<i0.GeneratedDatabase, i1.Todos, i1.Todo> {
22+
$TodosReferences(super.$_db, super.$_table, super.$_typedResult);
23+
24+
static i1.Categories _categoryTable(i0.GeneratedDatabase db) =>
25+
i2.ReadDatabaseContainer(db)
26+
.resultSet<i1.Categories>('categories')
27+
.createAlias(i0.$_aliasNameGenerator(
28+
i2.ReadDatabaseContainer(db)
29+
.resultSet<i1.Todos>('todos')
30+
.category,
31+
i2.ReadDatabaseContainer(db)
32+
.resultSet<i1.Categories>('categories')
33+
.id));
34+
35+
i1.$CategoriesProcessedTableManager? get category {
36+
if ($_item.category == null) return null;
37+
final manager = i1
38+
.$CategoriesTableManager(
39+
$_db,
40+
i2.ReadDatabaseContainer($_db)
41+
.resultSet<i1.Categories>('categories'))
42+
.filter((f) => f.id($_item.category!));
43+
final item = $_typedResult.readTableOrNull(_categoryTable($_db));
44+
if (item == null) return manager;
45+
return i0.ProcessedTableManager(
46+
manager.$state.copyWith(prefetchedData: [item]));
47+
}
48+
}
49+
2050
class $TodosFilterComposer extends i0.Composer<i0.GeneratedDatabase, i1.Todos> {
2151
$TodosFilterComposer({
2252
required super.$db,
@@ -148,7 +178,7 @@ class $TodosTableManager extends i0.RootTableManager<
148178
i1.$TodosAnnotationComposer,
149179
$TodosCreateCompanionBuilder,
150180
$TodosUpdateCompanionBuilder,
151-
(i1.Todo, i0.BaseReferences<i0.GeneratedDatabase, i1.Todos, i1.Todo>),
181+
(i1.Todo, i1.$TodosReferences),
152182
i1.Todo,
153183
i0.PrefetchHooks Function({bool category})> {
154184
$TodosTableManager(i0.GeneratedDatabase db, i1.Todos table)
@@ -186,7 +216,8 @@ class $TodosTableManager extends i0.RootTableManager<
186216
category: category,
187217
),
188218
withReferenceMapper: (p0) => p0
189-
.map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
219+
.map((e) =>
220+
(e.readTable(table), i1.$TodosReferences(db, table, e)))
190221
.toList(),
191222
prefetchHooksCallback: null,
192223
));
@@ -201,7 +232,7 @@ typedef $TodosProcessedTableManager = i0.ProcessedTableManager<
201232
i1.$TodosAnnotationComposer,
202233
$TodosCreateCompanionBuilder,
203234
$TodosUpdateCompanionBuilder,
204-
(i1.Todo, i0.BaseReferences<i0.GeneratedDatabase, i1.Todos, i1.Todo>),
235+
(i1.Todo, i1.$TodosReferences),
205236
i1.Todo,
206237
i0.PrefetchHooks Function({bool category})>;
207238
typedef $CategoriesCreateCompanionBuilder = i1.CategoriesCompanion Function({
@@ -213,6 +244,34 @@ typedef $CategoriesUpdateCompanionBuilder = i1.CategoriesCompanion Function({
213244
i0.Value<String> description,
214245
});
215246

247+
final class $CategoriesReferences extends i0
248+
.BaseReferences<i0.GeneratedDatabase, i1.Categories, i1.Category> {
249+
$CategoriesReferences(super.$_db, super.$_table, super.$_typedResult);
250+
251+
static i0.MultiTypedResultKey<i1.Todos, List<i1.Todo>> _todosRefsTable(
252+
i0.GeneratedDatabase db) =>
253+
i0.MultiTypedResultKey.fromTable(
254+
i2.ReadDatabaseContainer(db).resultSet<i1.Todos>('todos'),
255+
aliasName: i0.$_aliasNameGenerator(
256+
i2.ReadDatabaseContainer(db)
257+
.resultSet<i1.Categories>('categories')
258+
.id,
259+
i2.ReadDatabaseContainer(db)
260+
.resultSet<i1.Todos>('todos')
261+
.category));
262+
263+
i1.$TodosProcessedTableManager get todosRefs {
264+
final manager = i1
265+
.$TodosTableManager(
266+
$_db, i2.ReadDatabaseContainer($_db).resultSet<i1.Todos>('todos'))
267+
.filter((f) => f.category.id($_item.id));
268+
269+
final cache = $_typedResult.readTableOrNull(_todosRefsTable($_db));
270+
return i0.ProcessedTableManager(
271+
manager.$state.copyWith(prefetchedData: cache));
272+
}
273+
}
274+
216275
class $CategoriesFilterComposer
217276
extends i0.Composer<i0.GeneratedDatabase, i1.Categories> {
218277
$CategoriesFilterComposer({
@@ -318,10 +377,7 @@ class $CategoriesTableManager extends i0.RootTableManager<
318377
i1.$CategoriesAnnotationComposer,
319378
$CategoriesCreateCompanionBuilder,
320379
$CategoriesUpdateCompanionBuilder,
321-
(
322-
i1.Category,
323-
i0.BaseReferences<i0.GeneratedDatabase, i1.Categories, i1.Category>
324-
),
380+
(i1.Category, i1.$CategoriesReferences),
325381
i1.Category,
326382
i0.PrefetchHooks Function({bool todosRefs})> {
327383
$CategoriesTableManager(i0.GeneratedDatabase db, i1.Categories table)
@@ -351,7 +407,8 @@ class $CategoriesTableManager extends i0.RootTableManager<
351407
description: description,
352408
),
353409
withReferenceMapper: (p0) => p0
354-
.map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
410+
.map((e) =>
411+
(e.readTable(table), i1.$CategoriesReferences(db, table, e)))
355412
.toList(),
356413
prefetchHooksCallback: null,
357414
));
@@ -366,10 +423,7 @@ typedef $CategoriesProcessedTableManager = i0.ProcessedTableManager<
366423
i1.$CategoriesAnnotationComposer,
367424
$CategoriesCreateCompanionBuilder,
368425
$CategoriesUpdateCompanionBuilder,
369-
(
370-
i1.Category,
371-
i0.BaseReferences<i0.GeneratedDatabase, i1.Categories, i1.Category>
372-
),
426+
(i1.Category, i1.$CategoriesReferences),
373427
i1.Category,
374428
i0.PrefetchHooks Function({bool todosRefs})>;
375429

docs/lib/snippets/modular/drift/with_existing.drift.dart

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,49 @@ typedef $FriendsUpdateCompanionBuilder = i2.FriendsCompanion Function({
130130
i0.Value<int> rowid,
131131
});
132132

133+
final class $FriendsReferences
134+
extends i0.BaseReferences<i0.GeneratedDatabase, i2.Friends, i2.Friend> {
135+
$FriendsReferences(super.$_db, super.$_table, super.$_typedResult);
136+
137+
static i2.Users _userATable(i0.GeneratedDatabase db) =>
138+
i3.ReadDatabaseContainer(db).resultSet<i2.Users>('users').createAlias(
139+
i0.$_aliasNameGenerator(
140+
i3.ReadDatabaseContainer(db)
141+
.resultSet<i2.Friends>('friends')
142+
.userA,
143+
i3.ReadDatabaseContainer(db).resultSet<i2.Users>('users').id));
144+
145+
i2.$UsersProcessedTableManager get userA {
146+
final manager = i2
147+
.$UsersTableManager(
148+
$_db, i3.ReadDatabaseContainer($_db).resultSet<i2.Users>('users'))
149+
.filter((f) => f.id($_item.userA));
150+
final item = $_typedResult.readTableOrNull(_userATable($_db));
151+
if (item == null) return manager;
152+
return i0.ProcessedTableManager(
153+
manager.$state.copyWith(prefetchedData: [item]));
154+
}
155+
156+
static i2.Users _userBTable(i0.GeneratedDatabase db) =>
157+
i3.ReadDatabaseContainer(db).resultSet<i2.Users>('users').createAlias(
158+
i0.$_aliasNameGenerator(
159+
i3.ReadDatabaseContainer(db)
160+
.resultSet<i2.Friends>('friends')
161+
.userB,
162+
i3.ReadDatabaseContainer(db).resultSet<i2.Users>('users').id));
163+
164+
i2.$UsersProcessedTableManager get userB {
165+
final manager = i2
166+
.$UsersTableManager(
167+
$_db, i3.ReadDatabaseContainer($_db).resultSet<i2.Users>('users'))
168+
.filter((f) => f.id($_item.userB));
169+
final item = $_typedResult.readTableOrNull(_userBTable($_db));
170+
if (item == null) return manager;
171+
return i0.ProcessedTableManager(
172+
manager.$state.copyWith(prefetchedData: [item]));
173+
}
174+
}
175+
133176
class $FriendsFilterComposer
134177
extends i0.Composer<i0.GeneratedDatabase, i2.Friends> {
135178
$FriendsFilterComposer({
@@ -301,7 +344,7 @@ class $FriendsTableManager extends i0.RootTableManager<
301344
i2.$FriendsAnnotationComposer,
302345
$FriendsCreateCompanionBuilder,
303346
$FriendsUpdateCompanionBuilder,
304-
(i2.Friend, i0.BaseReferences<i0.GeneratedDatabase, i2.Friends, i2.Friend>),
347+
(i2.Friend, i2.$FriendsReferences),
305348
i2.Friend,
306349
i0.PrefetchHooks Function({bool userA, bool userB})> {
307350
$FriendsTableManager(i0.GeneratedDatabase db, i2.Friends table)
@@ -335,7 +378,8 @@ class $FriendsTableManager extends i0.RootTableManager<
335378
rowid: rowid,
336379
),
337380
withReferenceMapper: (p0) => p0
338-
.map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
381+
.map((e) =>
382+
(e.readTable(table), i2.$FriendsReferences(db, table, e)))
339383
.toList(),
340384
prefetchHooksCallback: null,
341385
));
@@ -350,7 +394,7 @@ typedef $FriendsProcessedTableManager = i0.ProcessedTableManager<
350394
i2.$FriendsAnnotationComposer,
351395
$FriendsCreateCompanionBuilder,
352396
$FriendsUpdateCompanionBuilder,
353-
(i2.Friend, i0.BaseReferences<i0.GeneratedDatabase, i2.Friends, i2.Friend>),
397+
(i2.Friend, i2.$FriendsReferences),
354398
i2.Friend,
355399
i0.PrefetchHooks Function({bool userA, bool userB})>;
356400

0 commit comments

Comments
 (0)