open method

  1. @override
CommonDatabase open(
  1. String filename, {
  2. String? vfs,
  3. OpenMode mode = OpenMode.readWriteCreate,
  4. bool uri = false,
  5. bool? mutex,
})
inherited

Opens a database file.

The vfs option can be used to set the appropriate virtual file system implementation. When null, the default file system will be used.

If uri is enabled (defaults to false), the filename will be interpreted as an uri as according to https://www.sqlite.org/uri.html.

If the mutex parameter is set to true, the SQLITE_OPEN_FULLMUTEX flag will be set. If it's set to false, SQLITE_OPEN_NOMUTEX will be enabled. By default, neither parameter will be set.

Implementation

@override
CommonDatabase open(String filename,
    {String? vfs,
    OpenMode mode = OpenMode.readWriteCreate,
    bool uri = false,
    bool? mutex}) {
  int flags;
  switch (mode) {
    case OpenMode.readOnly:
      flags = SqlFlag.SQLITE_OPEN_READONLY;
      break;
    case OpenMode.readWrite:
      flags = SqlFlag.SQLITE_OPEN_READWRITE;
      break;
    case OpenMode.readWriteCreate:
      flags = SqlFlag.SQLITE_OPEN_READWRITE | SqlFlag.SQLITE_OPEN_CREATE;
      break;
  }

  if (uri) {
    flags |= SqlFlag.SQLITE_OPEN_URI;
  }

  if (mutex != null) {
    flags |=
        mutex ? SqlFlag.SQLITE_OPEN_FULLMUTEX : SqlFlag.SQLITE_OPEN_NOMUTEX;
  }

  final result = bindings.sqlite3_open_v2(filename, flags, vfs);
  if (result.resultCode != SqlError.SQLITE_OK) {
    final exception = createExceptionRaw(
        bindings, result.result, result.resultCode,
        operation: 'opening the database');
    // Close the database after creating the exception, which needs to read
    // the extended error from the database.
    result.result.sqlite3_close_v2();
    throw exception;
  }

  return wrapDatabase(result.result..sqlite3_extended_result_codes(1));
}