Include information about all tables in generated db code

This commit is contained in:
Simon Binder 2019-02-09 14:01:03 +01:00
parent e4913219e4
commit a2e3eb8a9d
5 changed files with 22 additions and 9 deletions

View File

@ -3,28 +3,26 @@ import 'package:sally/sally.dart';
part 'example.g.dart';
class Products extends Table {
IntColumn get id => integer().named('products_id').autoIncrement()();
TextColumn get name => text()();
}
class Users extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 6, max: 32)();
}
@UseSally(tables: [Products, Users])
class ShopDb extends _$ShopDb {
Future<List<User>> allUsers() => select(users).get();
Future<List<User>> userByName(String name) => (select(users)..where((u) => u.name.equalsVal(name))).get();
Future<List<User>> userByName(String name) =>
(select(users)..where((u) => u.name.equalsVal(name))).get();
Future<void> deleteUser(User user) =>
(delete(users)..where((u) => u.id.equalsVal(user.id))).go();
@override
MigrationStrategy get migration => MigrationStrategy();
@override
int get schemaVersion => 1;
}
}

View File

@ -74,4 +74,6 @@ abstract class _$ShopDb extends GeneratedDatabase {
_$ShopDb() : super(const SqlTypeSystem.withDefaults(), null);
_$ProductsTable get products => _$ProductsTable(this);
_$UsersTable get users => _$UsersTable(this);
@override
List<TableInfo> get allTables => [products, users];
}

View File

@ -12,6 +12,8 @@ abstract class GeneratedDatabase {
int get schemaVersion;
MigrationStrategy get migration;
List<TableInfo> get allTables;
GeneratedDatabase(this.typeSystem, this.executor);
SelectStatement<Table, ReturnType> select<Table, ReturnType>(

View File

@ -51,4 +51,7 @@ class TestDatabase extends GeneratedDatabase {
@override
int get schemaVersion => 1;
@override
List<TableInfo> get allTables => [users];
}

View File

@ -9,6 +9,7 @@ class DatabaseWriter {
DatabaseWriter(this.db);
void write(StringBuffer buffer) {
// Write referenced tables
for (final table in db.tables) {
TableWriter(table).writeInto(buffer);
}
@ -18,13 +19,20 @@ class DatabaseWriter {
buffer.write('abstract class $className extends GeneratedDatabase {\n'
'$className() : super(const SqlTypeSystem.withDefaults(), null); \n');
final tableGetters = <String>[];
for (var table in db.tables) {
final tableFieldName = ReCase(table.fromClass.name).camelCase;
tableGetters.add(tableFieldName);
final tableClassName = table.tableInfoName;
buffer.write('$tableClassName get $tableFieldName => $tableClassName(this);');
}
buffer.write('}');
// Write List of tables, close bracket for class
buffer
..write('@override\nList<TableInfo> get allTables => [')
..write(tableGetters.join(','))
..write('];\n}');
}
}