diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 689e2217..f1d7201b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,13 +82,17 @@ jobs: run: flutter packages get working-directory: floor - - name: Install SQLite - run: sudo apt-get -y install sqlite3 libsqlite3-dev + - name: Run generator + run: flutter packages pub run build_runner build + working-directory: floor - name: Analyze run: flutter analyze working-directory: floor + - name: Install SQLite + run: sudo apt-get -y install sqlite3 libsqlite3-dev + - name: Run tests run: flutter test --coverage --coverage-path coverage/lcov.info working-directory: floor diff --git a/.gitignore b/.gitignore index 4d3dedd0..eeae4983 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Miscellaneous +floor/test/integration/**/*.g.dart *.class *.lock *.log diff --git a/floor/test/integration/blob_test/blob_test.g.dart b/floor/test/integration/blob_test/blob_test.g.dart deleted file mode 100644 index 391aad9e..00000000 --- a/floor/test/integration/blob_test/blob_test.g.dart +++ /dev/null @@ -1,131 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'blob_test.dart'; - -// ************************************************************************** -// FloorGenerator -// ************************************************************************** - -class $FloorTestDatabase { - /// Creates a database builder for a persistent database. - /// Once a database is built, you should keep a reference to it and re-use it. - static _$TestDatabaseBuilder databaseBuilder(String name) => - _$TestDatabaseBuilder(name); - - /// Creates a database builder for an in memory database. - /// Information stored in an in memory database disappears when the process is killed. - /// Once a database is built, you should keep a reference to it and re-use it. - static _$TestDatabaseBuilder inMemoryDatabaseBuilder() => - _$TestDatabaseBuilder(null); -} - -class _$TestDatabaseBuilder { - _$TestDatabaseBuilder(this.name); - - final String name; - - final List _migrations = []; - - Callback _callback; - - /// Adds migrations to the builder. - _$TestDatabaseBuilder addMigrations(List migrations) { - _migrations.addAll(migrations); - return this; - } - - /// Adds a database [Callback] to the builder. - _$TestDatabaseBuilder addCallback(Callback callback) { - _callback = callback; - return this; - } - - /// Creates the database and initializes it. - Future build() async { - final path = name != null - ? join(await sqflite.getDatabasesPath(), name) - : ':memory:'; - final database = _$TestDatabase(); - database.database = await database.open( - path, - _migrations, - _callback, - ); - return database; - } -} - -class _$TestDatabase extends TestDatabase { - _$TestDatabase([StreamController listener]) { - changeListener = listener ?? StreamController.broadcast(); - } - - PersonDao _personDaoInstance; - - Future open(String path, List migrations, - [Callback callback]) async { - return sqflite.openDatabase( - path, - version: 1, - onConfigure: (database) async { - await database.execute('PRAGMA foreign_keys = ON'); - }, - onOpen: (database) async { - await callback?.onOpen?.call(database); - }, - onUpgrade: (database, startVersion, endVersion) async { - MigrationAdapter.runMigrations( - database, startVersion, endVersion, migrations); - - await callback?.onUpgrade?.call(database, startVersion, endVersion); - }, - onCreate: (database, version) async { - await database.execute( - 'CREATE TABLE IF NOT EXISTS `Person` (`id` INTEGER, `name` TEXT, `picture` BLOB, PRIMARY KEY (`id`))'); - - await callback?.onCreate?.call(database, version); - }, - ); - } - - @override - PersonDao get personDao { - return _personDaoInstance ??= _$PersonDao(database, changeListener); - } -} - -class _$PersonDao extends PersonDao { - _$PersonDao(this.database, this.changeListener) - : _queryAdapter = QueryAdapter(database), - _personInsertionAdapter = InsertionAdapter( - database, - 'Person', - (Person item) => { - 'id': item.id, - 'name': item.name, - 'picture': item.picture - }); - - final sqflite.DatabaseExecutor database; - - final StreamController changeListener; - - final QueryAdapter _queryAdapter; - - static final _personMapper = (Map row) => Person( - row['id'] as int, row['name'] as String, row['picture'] as Uint8List); - - final InsertionAdapter _personInsertionAdapter; - - @override - Future findPersonByPicture(Uint8List picture) async { - return _queryAdapter.query('SELECT * FROM Person WHERE picture = ?', - arguments: [picture], mapper: _personMapper); - } - - @override - Future insertPerson(Person person) async { - await _personInsertionAdapter.insert( - person, sqflite.ConflictAlgorithm.abort); - } -} diff --git a/floor/test/integration/database.g.dart b/floor/test/integration/database.g.dart deleted file mode 100644 index 1d5b7378..00000000 --- a/floor/test/integration/database.g.dart +++ /dev/null @@ -1,332 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'database.dart'; - -// ************************************************************************** -// FloorGenerator -// ************************************************************************** - -class $FloorTestDatabase { - /// Creates a database builder for a persistent database. - /// Once a database is built, you should keep a reference to it and re-use it. - static _$TestDatabaseBuilder databaseBuilder(String name) => - _$TestDatabaseBuilder(name); - - /// Creates a database builder for an in memory database. - /// Information stored in an in memory database disappears when the process is killed. - /// Once a database is built, you should keep a reference to it and re-use it. - static _$TestDatabaseBuilder inMemoryDatabaseBuilder() => - _$TestDatabaseBuilder(null); -} - -class _$TestDatabaseBuilder { - _$TestDatabaseBuilder(this.name); - - final String name; - - final List _migrations = []; - - Callback _callback; - - /// Adds migrations to the builder. - _$TestDatabaseBuilder addMigrations(List migrations) { - _migrations.addAll(migrations); - return this; - } - - /// Adds a database [Callback] to the builder. - _$TestDatabaseBuilder addCallback(Callback callback) { - _callback = callback; - return this; - } - - /// Creates the database and initializes it. - Future build() async { - final path = name != null - ? join(await sqflite.getDatabasesPath(), name) - : ':memory:'; - final database = _$TestDatabase(); - database.database = await database.open( - path, - _migrations, - _callback, - ); - return database; - } -} - -class _$TestDatabase extends TestDatabase { - _$TestDatabase([StreamController listener]) { - changeListener = listener ?? StreamController.broadcast(); - } - - PersonDao _personDaoInstance; - - DogDao _dogDaoInstance; - - Future open(String path, List migrations, - [Callback callback]) async { - return sqflite.openDatabase( - path, - version: 2, - onConfigure: (database) async { - await database.execute('PRAGMA foreign_keys = ON'); - }, - onOpen: (database) async { - await callback?.onOpen?.call(database); - }, - onUpgrade: (database, startVersion, endVersion) async { - MigrationAdapter.runMigrations( - database, startVersion, endVersion, migrations); - - await callback?.onUpgrade?.call(database, startVersion, endVersion); - }, - onCreate: (database, version) async { - await database.execute( - 'CREATE TABLE IF NOT EXISTS `person` (`id` INTEGER, `custom_name` TEXT NOT NULL, PRIMARY KEY (`id`))'); - await database.execute( - 'CREATE TABLE IF NOT EXISTS `dog` (`id` INTEGER, `name` TEXT, `nick_name` TEXT, `owner_id` INTEGER, FOREIGN KEY (`owner_id`) REFERENCES `person` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE, PRIMARY KEY (`id`))'); - await database.execute( - 'CREATE INDEX `index_person_custom_name` ON `person` (`custom_name`)'); - - await callback?.onCreate?.call(database, version); - }, - ); - } - - @override - PersonDao get personDao { - return _personDaoInstance ??= _$PersonDao(database, changeListener); - } - - @override - DogDao get dogDao { - return _dogDaoInstance ??= _$DogDao(database, changeListener); - } -} - -class _$PersonDao extends PersonDao { - _$PersonDao(this.database, this.changeListener) - : _queryAdapter = QueryAdapter(database, changeListener), - _personInsertionAdapter = InsertionAdapter( - database, - 'person', - (Person item) => - {'id': item.id, 'custom_name': item.name}, - changeListener), - _personUpdateAdapter = UpdateAdapter( - database, - 'person', - ['id'], - (Person item) => - {'id': item.id, 'custom_name': item.name}, - changeListener), - _personDeletionAdapter = DeletionAdapter( - database, - 'person', - ['id'], - (Person item) => - {'id': item.id, 'custom_name': item.name}, - changeListener); - - final sqflite.DatabaseExecutor database; - - final StreamController changeListener; - - final QueryAdapter _queryAdapter; - - static final _personMapper = (Map row) => - Person(row['id'] as int, row['custom_name'] as String); - - final InsertionAdapter _personInsertionAdapter; - - final UpdateAdapter _personUpdateAdapter; - - final DeletionAdapter _personDeletionAdapter; - - @override - Future> findAllPersons() async { - return _queryAdapter.queryList('SELECT * FROM person', - mapper: _personMapper); - } - - @override - Stream> findAllPersonsAsStream() { - return _queryAdapter.queryListStream('SELECT * FROM person', - tableName: 'person', mapper: _personMapper); - } - - @override - Future findPersonById(int id) async { - return _queryAdapter.query('SELECT * FROM person WHERE id = ?', - arguments: [id], mapper: _personMapper); - } - - @override - Stream findPersonByIdAsStream(int id) { - return _queryAdapter.queryStream('SELECT * FROM person WHERE id = ?', - arguments: [id], tableName: 'person', mapper: _personMapper); - } - - @override - Future findPersonByIdAndName(int id, String name) async { - return _queryAdapter.query( - 'SELECT * FROM person WHERE id = ? AND custom_name = ?', - arguments: [id, name], - mapper: _personMapper); - } - - @override - Future> findPersonsWithIds(List ids) async { - final valueList1 = ids.map((value) => "'$value'").join(', '); - return _queryAdapter.queryList( - 'SELECT * FROM person WHERE id IN ($valueList1)', - mapper: _personMapper); - } - - @override - Future> findPersonsWithNames(List names) async { - final valueList1 = names.map((value) => "'$value'").join(', '); - return _queryAdapter.queryList( - 'SELECT * FROM person WHERE custom_name IN ($valueList1)', - mapper: _personMapper); - } - - @override - Future> findPersonsWithNamesLike(String name) async { - return _queryAdapter.queryList( - 'SELECT * FROM person WHERE custom_name LIKE ?', - arguments: [name], - mapper: _personMapper); - } - - @override - Future deleteAllPersons() async { - await _queryAdapter.queryNoReturn('DELETE FROM person'); - } - - @override - Future insertPerson(Person person) async { - await _personInsertionAdapter.insert( - person, sqflite.ConflictAlgorithm.replace); - } - - @override - Future insertPersons(List persons) async { - await _personInsertionAdapter.insertList( - persons, sqflite.ConflictAlgorithm.abort); - } - - @override - Future insertPersonWithReturn(Person person) { - return _personInsertionAdapter.insertAndReturnId( - person, sqflite.ConflictAlgorithm.abort); - } - - @override - Future> insertPersonsWithReturn(List persons) { - return _personInsertionAdapter.insertListAndReturnIds( - persons, sqflite.ConflictAlgorithm.abort); - } - - @override - Future updatePerson(Person person) async { - await _personUpdateAdapter.update(person, sqflite.ConflictAlgorithm.abort); - } - - @override - Future updatePersons(List persons) async { - await _personUpdateAdapter.updateList( - persons, sqflite.ConflictAlgorithm.abort); - } - - @override - Future updatePersonWithReturn(Person person) { - return _personUpdateAdapter.updateAndReturnChangedRows( - person, sqflite.ConflictAlgorithm.abort); - } - - @override - Future updatePersonsWithReturn(List persons) { - return _personUpdateAdapter.updateListAndReturnChangedRows( - persons, sqflite.ConflictAlgorithm.abort); - } - - @override - Future deletePerson(Person person) async { - await _personDeletionAdapter.delete(person); - } - - @override - Future deletePersons(List person) async { - await _personDeletionAdapter.deleteList(person); - } - - @override - Future deletePersonWithReturn(Person person) { - return _personDeletionAdapter.deleteAndReturnChangedRows(person); - } - - @override - Future deletePersonsWithReturn(List persons) { - return _personDeletionAdapter.deleteListAndReturnChangedRows(persons); - } - - @override - Future replacePersons(List persons) async { - if (database is sqflite.Transaction) { - await super.replacePersons(persons); - } else { - await (database as sqflite.Database) - .transaction((transaction) async { - final transactionDatabase = _$TestDatabase(changeListener) - ..database = transaction; - await transactionDatabase.personDao.replacePersons(persons); - }); - } - } -} - -class _$DogDao extends DogDao { - _$DogDao(this.database, this.changeListener) - : _queryAdapter = QueryAdapter(database), - _dogInsertionAdapter = InsertionAdapter( - database, - 'dog', - (Dog item) => { - 'id': item.id, - 'name': item.name, - 'nick_name': item.nickName, - 'owner_id': item.ownerId - }); - - final sqflite.DatabaseExecutor database; - - final StreamController changeListener; - - final QueryAdapter _queryAdapter; - - static final _dogMapper = (Map row) => Dog( - row['id'] as int, - row['name'] as String, - row['nick_name'] as String, - row['owner_id'] as int); - - final InsertionAdapter _dogInsertionAdapter; - - @override - Future findDogForPersonId(int id) async { - return _queryAdapter.query('SELECT * FROM dog WHERE owner_id = ?', - arguments: [id], mapper: _dogMapper); - } - - @override - Future> findAllDogs() async { - return _queryAdapter.queryList('SELECT * FROM dog', mapper: _dogMapper); - } - - @override - Future insertDog(Dog dog) async { - await _dogInsertionAdapter.insert(dog, sqflite.ConflictAlgorithm.abort); - } -}