diff --git a/lib/models/create_empty_db.dart b/lib/models/create_empty_db.dart index e69de29..e3f80bd 100644 --- a/lib/models/create_empty_db.dart +++ b/lib/models/create_empty_db.dart @@ -0,0 +1,27 @@ +import 'dart:io'; +import 'dart:isolate'; +import 'package:path/path.dart'; + +import 'package:sqflite_common/sqlite_api.dart'; + +String migrationDirPath() { + final packageUri = Uri.parse('package:jadb/'); + final packagePath = Isolate.resolvePackageUriSync(packageUri); + return packagePath!.resolve('../migrations').toFilePath(); +} + +Future createEmptyDb(DatabaseExecutor db) async { + List migrationFiles = []; + for (final file in Directory(migrationDirPath()).listSync()) { + if (file is File && file.path.endsWith('.sql')) { + migrationFiles.add(file.path); + } + } + + migrationFiles.sort((a, b) => basename(a).compareTo(basename(b))); + + for (final file in migrationFiles) { + final sql = await File(file).readAsString(); + await db.execute(sql); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 6db64ec..4b65b0c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 homepage: https://git.pvv.ntnu.no/oysteikt/jadb environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.2.0 <4.0.0' dependencies: args: ^2.7.0 diff --git a/test/models/create_empty_db_test.dart b/test/models/create_empty_db_test.dart new file mode 100644 index 0000000..9ced632 --- /dev/null +++ b/test/models/create_empty_db_test.dart @@ -0,0 +1,33 @@ +import 'dart:ffi'; +import 'dart:io'; + +import 'package:jadb/models/create_empty_db.dart'; +import 'package:jadb/search.dart'; +import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:test/test.dart'; +import 'package:sqlite3/open.dart'; + +Future setup_inmemory_database() async { + final libsqlitePath = Platform.environment['LIBSQLITE_PATH']; + + if (libsqlitePath == null) { + throw Exception("LIBSQLITE_PATH is not set"); + } + + final db_connection = await createDatabaseFactoryFfi( + ffiInit: () => + open.overrideForAll(() => DynamicLibrary.open(libsqlitePath)), + ).openDatabase(':memory:'); + + return db_connection; +} + +void main() { + test("Create empty db", () async { + final db = await setup_inmemory_database(); + + await createEmptyDb(db); + + await db.jadbVerifyTables(); + }); +}