xOpen method
Opens a file, returning supported flags and a file instance.
Implementation
@override
XOpenResult xOpen(Sqlite3Filename path, int flags) {
final pathStr = path.path;
if (pathStr == null) return _memory.xOpen(path, flags);
final recognized = _recognizeType(pathStr);
if (recognized == null) return _memory.xOpen(path, flags);
final files = _requireFiles();
final create = (flags & SqlFlag.SQLITE_OPEN_CREATE) != 0;
final deleteOnClose = (flags & SqlFlag.SQLITE_OPEN_DELETEONCLOSE) != 0;
final existsAlready = files.exists(recognized);
if (!existsAlready) {
if (create) {
final syncHandle = files.handleFor(recognized);
syncHandle.truncate(0);
files.markExists(recognized, true);
} else {
throw const VfsException(SqlError.SQLITE_CANTOPEN);
}
}
return (
outFlags: 0,
file: _SimpleOpfsFile(this, recognized, deleteOnClose),
);
}