mirror of https://github.com/AMT-Cheif/drift.git
add mod
This commit is contained in:
parent
f9d77b5fa2
commit
d03414bd80
|
@ -39,22 +39,17 @@ class DatabaseWriter {
|
||||||
void write() {
|
void write() {
|
||||||
final elements = input.resolvedAccessor.availableElements;
|
final elements = input.resolvedAccessor.availableElements;
|
||||||
|
|
||||||
final managerWriter = ManagerWriter(scope.child(), dbClassName);
|
|
||||||
|
|
||||||
// Write data classes, companions and info classes
|
// Write data classes, companions and info classes
|
||||||
if (!scope.generationOptions.isModular) {
|
if (!scope.generationOptions.isModular) {
|
||||||
for (final reference in elements) {
|
for (final reference in elements) {
|
||||||
if (reference is DriftTable) {
|
if (reference is DriftTable) {
|
||||||
TableWriter(reference, scope.child()).writeInto();
|
TableWriter(reference, scope.child()).writeInto();
|
||||||
managerWriter.addTable(reference);
|
|
||||||
} else if (reference is DriftView) {
|
} else if (reference is DriftView) {
|
||||||
ViewWriter(reference, scope.child(), this).write();
|
ViewWriter(reference, scope.child(), this).write();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managerWriter.write();
|
|
||||||
|
|
||||||
// Write the database class
|
// Write the database class
|
||||||
final dbScope = scope.child();
|
final dbScope = scope.child();
|
||||||
|
|
||||||
|
@ -153,6 +148,12 @@ class DatabaseWriter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final managerWriter = ManagerWriter(scope.child(), dbScope, dbClassName);
|
||||||
|
for (var table in elements.whereType<DriftTable>()) {
|
||||||
|
managerWriter.addTable(table);
|
||||||
|
}
|
||||||
|
managerWriter.write();
|
||||||
|
|
||||||
firstLeaf.writeln(managerWriter.managerGetter);
|
firstLeaf.writeln(managerWriter.managerGetter);
|
||||||
|
|
||||||
// Write implementation for query methods
|
// Write implementation for query methods
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
||||||
import 'package:drift_dev/src/analysis/results/results.dart';
|
import 'package:drift_dev/src/analysis/results/results.dart';
|
||||||
import 'package:drift_dev/src/writer/writer.dart';
|
import 'package:drift_dev/src/writer/writer.dart';
|
||||||
import 'package:recase/recase.dart';
|
|
||||||
|
|
||||||
abstract class _Filter {
|
abstract class _Filter {
|
||||||
final String filterName;
|
final String filterName;
|
||||||
|
@ -60,13 +59,13 @@ class _ReferencedFilter extends _Filter {
|
||||||
void writeFilter(TextEmitter leaf, bool isModular) {
|
void writeFilter(TextEmitter leaf, bool isModular) {
|
||||||
final String referencedTableGetter = isModular
|
final String referencedTableGetter = isModular
|
||||||
? "state.db.resultSet<${referencedTable.tableClassName}>('${referencedTable.table.schemaName}')"
|
? "state.db.resultSet<${referencedTable.tableClassName}>('${referencedTable.table.schemaName}')"
|
||||||
: "state.db.${referencedTable.tableGetterName}";
|
: "state.db.${referencedTable.table.dbGetterName}";
|
||||||
leaf
|
leaf
|
||||||
..writeDriftRef("ComposableFilter")
|
..writeDriftRef("ComposableFilter")
|
||||||
..write(" $filterName(")
|
..write(" $filterName(")
|
||||||
..writeDriftRef("ComposableFilter")
|
..writeDriftRef("ComposableFilter")
|
||||||
..writeln(" Function( ${referencedTable.filterComposer} f) f) {")
|
..writeln(" Function( ${referencedTable.filterComposer} f) f) {")
|
||||||
..writeln('''
|
..write('''
|
||||||
return referenced(
|
return referenced(
|
||||||
referencedTable: $referencedTableGetter,
|
referencedTable: $referencedTableGetter,
|
||||||
getCurrentColumn: (f) => f.$fieldGetter,
|
getCurrentColumn: (f) => f.$fieldGetter,
|
||||||
|
@ -111,7 +110,7 @@ class _ReferencedOrdering extends _Ordering {
|
||||||
void writeOrdering(TextEmitter leaf, bool isModular) {
|
void writeOrdering(TextEmitter leaf, bool isModular) {
|
||||||
final String referencedTableGetter = isModular
|
final String referencedTableGetter = isModular
|
||||||
? "state.db.resultSet<${referencedTable.tableClassName}>('${referencedTable.table.schemaName}')"
|
? "state.db.resultSet<${referencedTable.tableClassName}>('${referencedTable.table.schemaName}')"
|
||||||
: "state.db.${referencedTable.tableGetterName}";
|
: "state.db.${referencedTable.table.dbGetterName}";
|
||||||
|
|
||||||
leaf
|
leaf
|
||||||
..writeDriftRef("ComposableOrdering")
|
..writeDriftRef("ComposableOrdering")
|
||||||
|
@ -144,7 +143,10 @@ class _TableNames {
|
||||||
final DriftTable table;
|
final DriftTable table;
|
||||||
|
|
||||||
/// Generation Scope
|
/// Generation Scope
|
||||||
final Scope _scope;
|
final Scope scope;
|
||||||
|
|
||||||
|
/// Generation Scope for the entire database
|
||||||
|
final Scope dbScope;
|
||||||
|
|
||||||
/// The name of the filter composer class
|
/// The name of the filter composer class
|
||||||
///
|
///
|
||||||
|
@ -176,38 +178,34 @@ class _TableNames {
|
||||||
/// E.G `UserTableManager`
|
/// E.G `UserTableManager`
|
||||||
final String rootTableManager;
|
final String rootTableManager;
|
||||||
|
|
||||||
/// Name of the table class that will be generated
|
|
||||||
///
|
|
||||||
/// E.G `$CategoriesTable`
|
|
||||||
final String tableClassName;
|
|
||||||
|
|
||||||
/// Name of the getter for the table
|
|
||||||
///
|
|
||||||
/// E.G `categories`
|
|
||||||
final String tableGetterName;
|
|
||||||
|
|
||||||
/// Name of the typedef for the insertCompanionBuilder
|
/// Name of the typedef for the insertCompanionBuilder
|
||||||
///
|
///
|
||||||
/// E.G. `insertCompanionBuilder`
|
/// E.G. `insertCompanionBuilder`
|
||||||
final String insertCompanionBuilderTypeDefName;
|
final String insertCompanionBuilderTypeDefName;
|
||||||
|
|
||||||
|
/// Table class name, this may be different from the entity name
|
||||||
|
/// if modular generation is enabled
|
||||||
|
/// E.G. `i5.$CategoriesTable`
|
||||||
|
String get tableClassName {
|
||||||
|
return dbScope.dartCode(dbScope.entityInfoType(table));
|
||||||
|
}
|
||||||
|
|
||||||
|
String get rowClassName {
|
||||||
|
return dbScope.dartCode(dbScope.writer.rowType(table));
|
||||||
|
}
|
||||||
|
|
||||||
/// Name of the arguments for the updateCompanionBuilder
|
/// Name of the arguments for the updateCompanionBuilder
|
||||||
///
|
///
|
||||||
/// E.G. `updateCompanionBuilderTypeDef`
|
/// E.G. `updateCompanionBuilderTypeDef`
|
||||||
final String updateCompanionBuilderTypeDefName;
|
final String updateCompanionBuilderTypeDefName;
|
||||||
|
|
||||||
/// Name of the class that cooresponds to a table row
|
|
||||||
///
|
|
||||||
/// E.G `Category`
|
|
||||||
final String rowClassName;
|
|
||||||
|
|
||||||
/// Columns with their names, filters and orderings
|
/// Columns with their names, filters and orderings
|
||||||
final List<_ColumnNames> columns;
|
final List<_ColumnNames> columns;
|
||||||
|
|
||||||
/// Filters for back references
|
/// Filters for back references
|
||||||
final List<_ReferencedFilter> backRefFilters;
|
final List<_ReferencedFilter> backRefFilters;
|
||||||
|
|
||||||
_TableNames(this.table, this._scope)
|
_TableNames(this.table, this.scope, this.dbScope)
|
||||||
: filterComposer = '\$${table.entityInfoName}FilterComposer',
|
: filterComposer = '\$${table.entityInfoName}FilterComposer',
|
||||||
orderingComposer = '\$${table.entityInfoName}OrderingComposer',
|
orderingComposer = '\$${table.entityInfoName}OrderingComposer',
|
||||||
processedTableManager =
|
processedTableManager =
|
||||||
|
@ -221,9 +219,6 @@ class _TableNames {
|
||||||
'\$${table.entityInfoName}InsertCompanionBuilder',
|
'\$${table.entityInfoName}InsertCompanionBuilder',
|
||||||
updateCompanionBuilderTypeDefName =
|
updateCompanionBuilderTypeDefName =
|
||||||
'\$${table.entityInfoName}UpdateCompanionBuilder',
|
'\$${table.entityInfoName}UpdateCompanionBuilder',
|
||||||
rowClassName = table.nameOfRowClass,
|
|
||||||
tableClassName = table.entityInfoName,
|
|
||||||
tableGetterName = table.dbGetterName,
|
|
||||||
backRefFilters = [],
|
backRefFilters = [],
|
||||||
columns = [];
|
columns = [];
|
||||||
|
|
||||||
|
@ -236,11 +231,11 @@ class _TableNames {
|
||||||
..writeln('$filterComposer(super.db, super.table);');
|
..writeln('$filterComposer(super.db, super.table);');
|
||||||
for (var c in columns) {
|
for (var c in columns) {
|
||||||
for (var f in c.filters) {
|
for (var f in c.filters) {
|
||||||
f.writeFilter(leaf, _scope.generationOptions.isModular);
|
f.writeFilter(leaf, scope.generationOptions.isModular);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var f in backRefFilters) {
|
for (var f in backRefFilters) {
|
||||||
f.writeFilter(leaf, _scope.generationOptions.isModular);
|
f.writeFilter(leaf, scope.generationOptions.isModular);
|
||||||
}
|
}
|
||||||
leaf.writeln('}');
|
leaf.writeln('}');
|
||||||
}
|
}
|
||||||
|
@ -254,18 +249,19 @@ class _TableNames {
|
||||||
..writeln('$orderingComposer(super.db, super.table);');
|
..writeln('$orderingComposer(super.db, super.table);');
|
||||||
for (var c in columns) {
|
for (var c in columns) {
|
||||||
for (var o in c.orderings) {
|
for (var o in c.orderings) {
|
||||||
o.writeOrdering(leaf, _scope.generationOptions.isModular);
|
o.writeOrdering(leaf, scope.generationOptions.isModular);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
leaf.writeln('}');
|
leaf.writeln('}');
|
||||||
}
|
}
|
||||||
|
|
||||||
void _writeProcessedTableManager(TextEmitter leaf, String dbClassName) {
|
void _writeProcessedTableManager(TextEmitter leaf, String dbClassName) {
|
||||||
|
print(table.entityInfoName);
|
||||||
leaf
|
leaf
|
||||||
..write('class $processedTableManager extends ')
|
..write('class $processedTableManager extends ')
|
||||||
..writeDriftRef('ProcessedTableManager')
|
..writeDriftRef('ProcessedTableManager')
|
||||||
..writeln(
|
..writeln(
|
||||||
'<$dbClassName,$tableClassName,$rowClassName,$filterComposer,$orderingComposer,$processedTableManager,$insertCompanionBuilderTypeDefName,$updateCompanionBuilderTypeDefName> {')
|
'<$dbClassName,${tableClassName},${rowClassName},$filterComposer,$orderingComposer,$processedTableManager,$insertCompanionBuilderTypeDefName,$updateCompanionBuilderTypeDefName> {')
|
||||||
..writeln('const $processedTableManager(super.state);')
|
..writeln('const $processedTableManager(super.state);')
|
||||||
..writeln('}');
|
..writeln('}');
|
||||||
}
|
}
|
||||||
|
@ -365,7 +361,8 @@ class _TableNames {
|
||||||
?.otherColumn;
|
?.otherColumn;
|
||||||
final referencedTable = referencedCol?.owner;
|
final referencedTable = referencedCol?.owner;
|
||||||
if (referencedCol != null && referencedTable is DriftTable) {
|
if (referencedCol != null && referencedTable is DriftTable) {
|
||||||
final referencedTableNames = _TableNames(referencedTable, _scope);
|
final referencedTableNames =
|
||||||
|
_TableNames(referencedTable, scope, dbScope);
|
||||||
final referencedColumnNames =
|
final referencedColumnNames =
|
||||||
_ColumnNames(referencedCol.nameInDart, [], []);
|
_ColumnNames(referencedCol.nameInDart, [], []);
|
||||||
c.filters.add(_ReferencedFilter(c.fieldGetter, "${c.fieldGetter}Ref",
|
c.filters.add(_ReferencedFilter(c.fieldGetter, "${c.fieldGetter}Ref",
|
||||||
|
@ -379,10 +376,10 @@ class _TableNames {
|
||||||
columns.add(c);
|
columns.add(c);
|
||||||
}
|
}
|
||||||
for (var otherTable in tables) {
|
for (var otherTable in tables) {
|
||||||
final otherTableNames = _TableNames(otherTable, _scope);
|
final otherTableNames = _TableNames(otherTable, scope, dbScope);
|
||||||
|
|
||||||
/// We are adding backrefs now, skip the current table
|
/// We are adding backrefs now, skip the current table
|
||||||
if (otherTableNames.tableClassName == tableClassName) {
|
if (otherTableNames.table.entityInfoName == table.entityInfoName) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (var otherColumn in otherTable.columns) {
|
for (var otherColumn in otherTable.columns) {
|
||||||
|
@ -392,15 +389,17 @@ class _TableNames {
|
||||||
?.otherColumn;
|
?.otherColumn;
|
||||||
final referencedTable = referencedCol?.owner;
|
final referencedTable = referencedCol?.owner;
|
||||||
if (referencedCol != null && referencedTable is DriftTable) {
|
if (referencedCol != null && referencedTable is DriftTable) {
|
||||||
final referencedTableNames = _TableNames(referencedTable, _scope);
|
final referencedTableNames =
|
||||||
|
_TableNames(referencedTable, scope, dbScope);
|
||||||
final referencedColumnNames =
|
final referencedColumnNames =
|
||||||
_ColumnNames(referencedCol.nameInDart, [], []);
|
_ColumnNames(referencedCol.nameInDart, [], []);
|
||||||
|
|
||||||
// If we are referencing the current table, add a back ref
|
// If we are referencing the current table, add a back ref
|
||||||
if (referencedTableNames.tableClassName == tableClassName) {
|
if (referencedTableNames.table.entityInfoName ==
|
||||||
|
table.entityInfoName) {
|
||||||
backRefFilters.add(_ReferencedFilter(
|
backRefFilters.add(_ReferencedFilter(
|
||||||
referencedColumnNames.fieldGetter,
|
referencedColumnNames.fieldGetter,
|
||||||
"${otherTableNames.tableClassName.camelCase}Refs",
|
"${otherTableNames.table.dbGetterName}Refs",
|
||||||
otherTableNames,
|
otherTableNames,
|
||||||
referencedColumnNames));
|
referencedColumnNames));
|
||||||
}
|
}
|
||||||
|
@ -442,15 +441,16 @@ class _TableNames {
|
||||||
|
|
||||||
class ManagerWriter {
|
class ManagerWriter {
|
||||||
final Scope _scope;
|
final Scope _scope;
|
||||||
|
final Scope _dbScope;
|
||||||
final String _dbClassName;
|
final String _dbClassName;
|
||||||
late final List<DriftTable> _addedTables;
|
late final List<DriftTable> _addedTables;
|
||||||
|
|
||||||
ManagerWriter(this._scope, this._dbClassName) {
|
ManagerWriter(this._scope, this._dbScope, this._dbClassName) {
|
||||||
_addedTables = [];
|
_addedTables = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
String get managerGetter {
|
String get managerGetter {
|
||||||
return '''$_dbMangerName get managers => $_dbMangerName(this);''';
|
return '$_dbMangerName get managers => $_dbMangerName(this);';
|
||||||
}
|
}
|
||||||
|
|
||||||
void addTable(DriftTable table) {
|
void addTable(DriftTable table) {
|
||||||
|
@ -463,7 +463,7 @@ class ManagerWriter {
|
||||||
final leaf = _scope.leaf();
|
final leaf = _scope.leaf();
|
||||||
final tableNames = <_TableNames>[];
|
final tableNames = <_TableNames>[];
|
||||||
for (var table in _addedTables) {
|
for (var table in _addedTables) {
|
||||||
final t = _TableNames(table, _scope);
|
final t = _TableNames(table, _scope, _dbScope);
|
||||||
t.addFiltersAndOrderings(_addedTables, leaf);
|
t.addFiltersAndOrderings(_addedTables, leaf);
|
||||||
tableNames.add(t);
|
tableNames.add(t);
|
||||||
}
|
}
|
||||||
|
@ -477,7 +477,7 @@ class ManagerWriter {
|
||||||
? _scope.drift("GeneratedDatabase")
|
? _scope.drift("GeneratedDatabase")
|
||||||
: _dbClassName);
|
: _dbClassName);
|
||||||
tableManagerGetters.writeln(
|
tableManagerGetters.writeln(
|
||||||
"${table.rootTableManager} get ${table.tableGetterName} => ${table.rootTableManager}(_db, _db.${table.tableGetterName});");
|
"${table.rootTableManager} get ${table.table.dbGetterName} => ${table.rootTableManager}(_db, _db.${table.table.dbGetterName});");
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf.write("""
|
leaf.write("""
|
||||||
|
|
Loading…
Reference in New Issue