From 76a4ce7f6776319f815359fff609ae558e04b236 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Sun, 24 Mar 2024 18:02:20 +0100 Subject: [PATCH] fix: Make database deleteable without the need to init the boxcollection --- lib/src/database/indexeddb_box.dart | 10 +++++----- lib/src/database/matrix_sdk_database.dart | 5 ++++- lib/src/database/sqflite_box.dart | 10 +++++----- test/box_test.dart | 5 +++-- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/src/database/indexeddb_box.dart b/lib/src/database/indexeddb_box.dart index fe869f15..a5f56571 100644 --- a/lib/src/database/indexeddb_box.dart +++ b/lib/src/database/indexeddb_box.dart @@ -9,10 +9,9 @@ import 'package:matrix/src/database/zone_transaction_mixin.dart'; class BoxCollection with ZoneTransactionMixin { final Database _db; final Set boxNames; - final String _name; - final IdbFactory _idbFactory; + final String name; - BoxCollection(this._db, this.boxNames, this._name, this._idbFactory); + BoxCollection(this._db, this.boxNames, this.name); static Future open( String name, @@ -29,7 +28,7 @@ class BoxCollection with ZoneTransactionMixin { db.createObjectStore(name, autoIncrement: true); } }); - return BoxCollection(db, boxNames, name, idbFactory); + return BoxCollection(db, boxNames, name); } Box openBox(String name) { @@ -81,7 +80,8 @@ class BoxCollection with ZoneTransactionMixin { return _db.close(); } - Future delete() => _idbFactory.deleteDatabase(_name); + static Future delete(String path, [IdbFactory? factory]) => + (factory ?? window.indexedDB!).deleteDatabase(path); } class Box { diff --git a/lib/src/database/matrix_sdk_database.dart b/lib/src/database/matrix_sdk_database.dart index 8e39bdca..89a89575 100644 --- a/lib/src/database/matrix_sdk_database.dart +++ b/lib/src/database/matrix_sdk_database.dart @@ -1594,5 +1594,8 @@ class MatrixSdkDatabase extends DatabaseApi { } @override - Future delete() => _collection.delete(); + Future delete() => BoxCollection.delete( + name, + sqfliteFactory ?? idbFactory, + ); } diff --git a/lib/src/database/sqflite_box.dart b/lib/src/database/sqflite_box.dart index 459be4a7..61c10ad8 100644 --- a/lib/src/database/sqflite_box.dart +++ b/lib/src/database/sqflite_box.dart @@ -10,9 +10,9 @@ import 'package:matrix/src/database/zone_transaction_mixin.dart'; class BoxCollection with ZoneTransactionMixin { final Database _db; final Set boxNames; - final DatabaseFactory? _factory; + final String name; - BoxCollection(this._db, this.boxNames, this._factory); + BoxCollection(this._db, this.boxNames, this.name); static Future open( String name, @@ -32,7 +32,7 @@ class BoxCollection with ZoneTransactionMixin { batch.execute('CREATE INDEX IF NOT EXISTS k_index ON $name (k)'); } await batch.commit(noResult: true); - return BoxCollection(sqfliteDatabase, boxNames, sqfliteFactory); + return BoxCollection(sqfliteDatabase, boxNames, name); } Box openBox(String name) { @@ -67,8 +67,8 @@ class BoxCollection with ZoneTransactionMixin { Future close() => _db.close(); - Future delete() => - (_factory ?? databaseFactory).deleteDatabase(_db.path); + static Future delete(String path, [DatabaseFactory? factory]) => + (factory ?? databaseFactory).deleteDatabase(path); } class Box { diff --git a/test/box_test.dart b/test/box_test.dart index 5b66514d..e5d352ef 100644 --- a/test/box_test.dart +++ b/test/box_test.dart @@ -9,8 +9,9 @@ void main() { const Set boxNames = {'cats', 'dogs'}; const data = {'name': 'Fluffy', 'age': 2}; const data2 = {'name': 'Loki', 'age': 4}; + late Database db; setUp(() async { - final db = await databaseFactoryFfi.openDatabase(':memory:'); + db = await databaseFactoryFfi.openDatabase(':memory:'); collection = await BoxCollection.open( 'testbox', boxNames, @@ -91,7 +92,7 @@ void main() { }); test('Box.delete', () async { - await collection.delete(); + await BoxCollection.delete(db.path, databaseFactoryFfi); }); }); }