openDB method

  1. @override
Future<DatabaseInfo> openDB(
  1. String path, {
  2. int version = 0,
  3. OnCreate? onCreate,
  4. OnUpgrade? onUpgrade,
  5. String? dbName,
  6. bool useGRPC = false,
})
override

Open the Database and returns DatabaseInfo with creation status, version and sqlite version.

Implementation

@override
Future<DatabaseInfo> openDB(
  String path, {
  int version = 0,
  OnCreate? onCreate,
  OnUpgrade? onUpgrade,
  String? dbName,
  bool useGRPC = false,
}) async {
  dbName ??= defaultDBName;
  bool missingDB = true;
  if (path == inMemoryDatabasePath) {
    databases.add(db: Sqlite3Database(sqlite3.openInMemory()), name: dbName);
  } else {
    final File f = File(path);
    missingDB = !f.existsSync();
    if (missingDB) {
      var dir = Directory.fromUri(Uri.directory(path));
      if (!dir.parent.existsSync()) {
        dir.parent.createSync(recursive: true);
      }
    }
    databases.add(db: Sqlite3Database(sqlite3.open(path)), name: dbName);
    if (debugMode) {
      // ignore: avoid_print
      print("DB location: ${databases.get(dbName)}");
    }
  }
  if (missingDB && onCreate != null) {
    await onCreate();
  }
  int currentVersion = await getVersion(dbName: dbName);
  if (onUpgrade != null && version != currentVersion) {
    await onUpgrade(currentVersion, version);
  }
  if (version != currentVersion) {
    await setVersion(version, dbName: dbName);
  }
  return DatabaseInfo(
      path: path,
      created: missingDB,
      version: version,
      dbName: dbName,
      sqliteVersion: sqlite3.version.toString());
}