Use extension for all tables in modular generation

This commit is contained in:
Simon Binder 2022-12-12 23:50:11 +01:00
parent 5f2d52ccc5
commit 16e6aaf4fe
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
3 changed files with 33 additions and 16 deletions

View File

@ -1,4 +1,5 @@
import '../analysis/results/results.dart';
import '../utils/string_escaper.dart';
import 'database_writer.dart';
import 'modules.dart';
import 'queries/query_writer.dart';
@ -12,10 +13,11 @@ class AccessorWriter {
void write() {
final classScope = scope.child();
final isModular = scope.generationOptions.isModular;
final daoName = input.accessor.declaration.name!;
final prefix = scope.generationOptions.isModular ? '' : r'_';
final prefix = isModular ? '' : r'_';
classScope.leaf()
..write('mixin $prefix\$${daoName}Mixin on ')
..writeDriftRef('DatabaseAccessor<')
@ -27,16 +29,27 @@ class AccessorWriter {
final infoType = scope.entityInfoType(entity);
final getterName = entity.dbGetterName;
classScope.leaf()
final getterText = classScope.leaf()
..writeDart(infoType)
..writeln(' get $getterName => attachedDatabase.$getterName;');
..writeln(' get $getterName =>');
if (isModular) {
getterText
..writeUriRef(
ModularAccessorWriter.modularSupport, 'ReadDatabaseContainer')
..write('(attachedDatabase).resultSet(')
..write(asDartLiteral(entity.schemaName))
..writeln(');');
} else {
getterText.writeln('attachedDatabase.$getterName;');
}
}
for (final query in input.availableRegularQueries) {
QueryWriter(classScope.child()).write(query);
}
if (scope.generationOptions.isModular) {
if (isModular) {
for (final import in input.resolvedAccessor.knownImports) {
classScope.writeGetterForIncludedDriftFile(import, input.driver!,
isAccessor: true);

View File

@ -1,14 +1,17 @@
// ignore_for_file: type=lint
import 'package:drift/drift.dart' as i0;
import 'package:modular/database.dart' as i1;
import 'package:drift/src/runtime/api/runtime_api.dart' as i1;
import 'package:modular/src/users.drift.dart' as i2;
import 'package:modular/src/user_queries.drift.dart' as i3;
import 'package:drift/internal/modular.dart' as i4;
import 'package:drift/internal/modular.dart' as i3;
import 'package:modular/src/user_queries.drift.dart' as i4;
mixin $MyAccessorMixin on i0.DatabaseAccessor<i1.Database> {
i2.Users get users => attachedDatabase.users;
i2.Follows get follows => attachedDatabase.follows;
i2.PopularUsers get popularUsers => attachedDatabase.popularUsers;
mixin $MyAccessorMixin on i0.DatabaseAccessor<i1.GeneratedDatabase> {
i2.Users get users =>
i3.ReadDatabaseContainer(attachedDatabase).resultSet('users');
i2.Follows get follows =>
i3.ReadDatabaseContainer(attachedDatabase).resultSet('follows');
i2.PopularUsers get popularUsers =>
i3.ReadDatabaseContainer(attachedDatabase).resultSet('popular_users');
Future<int> addUser({required i0.Insertable<i2.User> user}) {
var $arrayStartIndex = 1;
final generateduser =
@ -21,7 +24,7 @@ mixin $MyAccessorMixin on i0.DatabaseAccessor<i1.Database> {
);
}
i3.UserQueriesDrift get userQueriesDrift =>
i4.ReadDatabaseContainer(attachedDatabase)
.accessor<i3.UserQueriesDrift>(i3.UserQueriesDrift.new);
i4.UserQueriesDrift get userQueriesDrift =>
i3.ReadDatabaseContainer(attachedDatabase)
.accessor<i4.UserQueriesDrift>(i4.UserQueriesDrift.new);
}

View File

@ -4,7 +4,7 @@ import 'package:modular/src/users.drift.dart' as i1;
import 'package:modular/src/posts.drift.dart' as i2;
import 'package:modular/src/search.drift.dart' as i3;
import 'package:modular/accessor.dart' as i4;
import 'package:modular/database.dart' as i5;
import 'package:drift/src/runtime/api/runtime_api.dart' as i5;
import 'package:modular/src/user_queries.drift.dart' as i6;
import 'package:drift/internal/modular.dart' as i7;
@ -16,7 +16,8 @@ abstract class $Database extends i0.GeneratedDatabase {
late final i2.Likes likes = i2.Likes(this);
late final i1.Follows follows = i1.Follows(this);
late final i1.PopularUsers popularUsers = i1.PopularUsers(this);
late final i4.MyAccessor myAccessor = i4.MyAccessor(this as i5.Database);
late final i4.MyAccessor myAccessor =
i4.MyAccessor(this as i5.GeneratedDatabase);
i6.UserQueriesDrift get userQueriesDrift => i7.ReadDatabaseContainer(this)
.accessor<i6.UserQueriesDrift>(i6.UserQueriesDrift.new);
i3.SearchDrift get searchDrift => i7.ReadDatabaseContainer(this)