Hide some exports - Add manager to Database

This commit is contained in:
Moshe Dicker 2024-03-29 11:08:28 -04:00
parent 46953c3a73
commit 7ed6ac5735
3 changed files with 62 additions and 19 deletions

View File

@ -20,7 +20,14 @@ export 'src/runtime/query_builder/query_builder.dart'
hide CaseWhenExpressionWithBase, BaseCaseWhenExpression;
export 'src/runtime/types/converters.dart';
export 'src/runtime/types/mapping.dart' hide BaseSqlType, UserDefinedSqlType;
export 'src/runtime/manager/manager.dart';
export 'src/runtime/manager/manager.dart'
hide
JoinBuilder,
ComposerState,
HasJoinBuilders,
Composer,
AliasedComposerBuilder,
BaseTableManager;
export 'src/utils/lazy_database.dart';
/// A [ListEquality] instance used by generated drift code for the `==` and

View File

@ -39,20 +39,22 @@ class DatabaseWriter {
void write() {
final elements = input.resolvedAccessor.availableElements;
final shortcutWriter = ManagerWriter(scope.child(), dbClassName);
final managerWriter = ManagerWriter(scope.child(), dbClassName);
// Write data classes, companions and info classes
if (!scope.generationOptions.isModular) {
for (final reference in elements) {
if (reference is DriftTable) {
TableWriter(reference, scope.child()).writeInto();
shortcutWriter.addTable(reference);
managerWriter.addTable(reference);
} else if (reference is DriftView) {
ViewWriter(reference, scope.child(), this).write();
}
}
}
managerWriter.write();
// Write the database class
final dbScope = scope.child();
@ -151,6 +153,8 @@ class DatabaseWriter {
}
}
firstLeaf.writeln(managerWriter.managerGetter);
// Write implementation for query methods
for (final query in input.availableRegularQueries) {
QueryWriter(dbScope.child()).write(query);

View File

@ -1,5 +1,4 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:drift/drift.dart';
import 'package:drift_dev/src/analysis/results/results.dart';
import 'package:drift_dev/src/writer/writer.dart';
import 'package:recase/recase.dart';
@ -11,20 +10,21 @@ extension on DriftColumn {
}
class ManagerWriter {
final Scope scope;
final String dbClassName;
final Scope _scope;
final String _dbClassName;
final List<DriftTable> _addedTables;
ManagerWriter(this.scope, this.dbClassName);
ManagerWriter(this._scope, this._dbClassName) : _addedTables = [];
void addTable(DriftTable table) {
final leaf = scope.leaf();
void _writeTableManagers(DriftTable table) {
final leaf = _scope.leaf();
final filters = StringBuffer();
final orderings = StringBuffer();
for (var col in table.columns) {
final getterName =
ReCase(col.nameInDart + (col.isForeignKey ? " id" : " ")).camelCase;
(col.nameInDart + (col.isForeignKey ? " id" : " ")).camelCase;
filters.writeln(
"ColumnFilters get $getterName => ColumnFilters(state.table.${col.nameInDart});");
@ -46,7 +46,7 @@ class ManagerWriter {
ComposableFilter ${col.nameInDart}OrderBy(
ComposableFilter Function(${referencedEntityInfoName}FilterComposer) f) {
return referenced(
referencedTable: state.db.${referencedTableGetter},
referencedTable: state.db.$referencedTableGetter,
getCurrentColumn: (p0) => p0.${col.nameInDart},
getReferencedColumn: (p0) => p0.${referencedCol.nameInDart},
getReferencedQueryComposer: (data) =>
@ -61,7 +61,7 @@ ComposableFilter ${col.nameInDart}OrderBy(
ComposableOrdering ${col.nameInDart}OrderBy(
ComposableOrdering Function(${referencedEntityInfoName}OrderingComposer) f) {
return referenced(
referencedTable: state.db.${referencedTableGetter},
referencedTable: state.db.$referencedTableGetter,
getCurrentColumn: (p0) => p0.${col.nameInDart},
getReferencedColumn: (p0) => p0.${referencedCol.nameInDart},
getReferencedQueryComposer: (data) =>
@ -78,26 +78,26 @@ ComposableOrdering ${col.nameInDart}OrderBy(
leaf.write("""
class ${table.entityInfoName}FilterComposer extends FilterComposer<$dbClassName, ${table.entityInfoName}> {
class ${table.entityInfoName}FilterComposer extends FilterComposer<$_dbClassName, ${table.entityInfoName}> {
${table.entityInfoName}FilterComposer.empty(super.db, super.table) : super.empty();
${table.entityInfoName}FilterComposer.withAliasedTable(super.data) : super.withAliasedTable();
$filters
}
class ${table.entityInfoName}OrderingComposer extends OrderingComposer<$dbClassName, ${table.entityInfoName}> {
class ${table.entityInfoName}OrderingComposer extends OrderingComposer<$_dbClassName, ${table.entityInfoName}> {
${table.entityInfoName}OrderingComposer.empty(super.db, super.table) : super.empty();
${table.entityInfoName}OrderingComposer.withAliasedTable(super.data) : super.withAliasedTable();
$orderings
}
class ${table.entityInfoName}ProcessedTableManager extends ProcessedTableManager<$dbClassName,
class ${table.entityInfoName}ProcessedTableManager extends ProcessedTableManager<$_dbClassName,
${table.entityInfoName}, ${table.nameOfRowClass}, ${table.entityInfoName}FilterComposer, ${table.entityInfoName}OrderingComposer> {
${table.entityInfoName}ProcessedTableManager(super.data);
}
class ${table.entityInfoName}ProcessedTableManagerWithFiltering extends ProcessedTableManager<$dbClassName,
class ${table.entityInfoName}ProcessedTableManagerWithFiltering extends ProcessedTableManager<$_dbClassName,
${table.entityInfoName}, ${table.nameOfRowClass}, ${table.entityInfoName}FilterComposer, ${table.entityInfoName}OrderingComposer> {
${table.entityInfoName}ProcessedTableManagerWithFiltering(super.data);
@ -110,7 +110,7 @@ class ${table.entityInfoName}ProcessedTableManagerWithFiltering extends Processe
}
}
class ${table.entityInfoName}ProcessedTableManagerWithOrdering extends ProcessedTableManager<$dbClassName,
class ${table.entityInfoName}ProcessedTableManagerWithOrdering extends ProcessedTableManager<$_dbClassName,
${table.entityInfoName}, ${table.nameOfRowClass}, ${table.entityInfoName}FilterComposer, ${table.entityInfoName}OrderingComposer> {
${table.entityInfoName}ProcessedTableManagerWithOrdering(super.data);
@ -123,8 +123,9 @@ class ${table.entityInfoName}ProcessedTableManagerWithOrdering extends Processed
}
}
class ${table.entityInfoName}TableManager extends ${table.entityInfoName}ProcessedTableManager {
${table.entityInfoName}TableManager($dbClassName db, ${table.entityInfoName} table)
class ${table.entityInfoName}TableManager extends RootTableManager<$_dbClassName,
${table.entityInfoName}, ${table.nameOfRowClass}, ${table.entityInfoName}FilterComposer, ${table.entityInfoName}OrderingComposer> {
${table.entityInfoName}TableManager($_dbClassName db, ${table.entityInfoName} table)
: super(TableManagerState(
db: db,
table: table,
@ -147,6 +148,37 @@ class ${table.entityInfoName}TableManager extends ${table.entityInfoName}Process
joinBuilders: state.joinBuilders.union(ordering.joinBuilders)));
}
}
""");
}
String get managerGetter {
return '''${_dbClassName}Manager managers => ${_dbClassName}Manager(this);''';
}
void addTable(DriftTable table) {
_addedTables.add(table);
}
void write() {
for (var table in _addedTables) {
_writeTableManagers(table);
}
final leaf = _scope.leaf();
final tableManagerGetters = StringBuffer();
for (var table in _addedTables) {
tableManagerGetters.writeln(
"${table.entityInfoName}TableManager get ${table.dbGetterName} => ${table.entityInfoName}TableManager(_db, _db.${table.dbGetterName});");
}
leaf.write("""
class ${_dbClassName}Manager {
final $_dbClassName _db;
${_dbClassName}Manager(this._db);
$tableManagerGetters
}
""");
}
}