import 'package:meta/meta.dart'; import 'package:sally/sally.dart'; import 'package:sally/src/runtime/executor/stream_queries.dart'; import 'package:sally/src/runtime/executor/type_system.dart'; import 'package:sally/src/runtime/migration.dart'; import 'package:sally/src/runtime/statements/delete.dart'; import 'package:sally/src/runtime/statements/select.dart'; import 'package:sally/src/runtime/statements/update.dart'; /// A base class for all generated databases. abstract class GeneratedDatabase { final SqlTypeSystem typeSystem; final QueryExecutor executor; final StreamQueryStore streamQueries = StreamQueryStore(); int get schemaVersion; MigrationStrategy get migration; List get allTables; GeneratedDatabase(this.typeSystem, this.executor); /// Creates a migrator with the provided query executor. We sometimes can't /// use the regular [GeneratedDatabase.executor] because migration happens /// before that executor is ready. Migrator _createMigrator(SqlExecutor executor) => Migrator(this, executor); void markTableUpdated(String tableName) { streamQueries.handleTableUpdates(tableName); } Future handleDatabaseCreation({@required SqlExecutor executor}) { final migrator = _createMigrator(executor); return migration.onCreate(migrator); } Future handleDatabaseVersionChange( {@required SqlExecutor executor, int from, int to}) { final migrator = _createMigrator(executor); return migration.onUpgrade(migrator, from, to); } InsertStatement into(TableInfo table) => InsertStatement(this, table); UpdateStatement update( TableInfo table) => UpdateStatement(this, table); SelectStatement select( TableInfo table) { return SelectStatement(this, table); } DeleteStatement delete
(TableInfo table) => DeleteStatement
(this, table); } abstract class QueryExecutor { GeneratedDatabase databaseInfo; Future ensureOpen(); Future>> runSelect( String statement, List args); Future runInsert(String statement, List args); Future runUpdate(String statement, List args); Future runDelete(String statement, List args); Future runCustom(String statement); }