NativeDatabase.memory constructor
- bool logStatements = false,
- SqliteResolver sqlite3 = _NativeDelegate._defaultResolver,
- DatabaseSetup? setup,
- bool cachePreparedStatements = _cacheStatementsByDefault,
Creates an in-memory database won't persist its changes on disk.
If logStatements
is true (defaults to false
), generated sql statements
will be printed before executing. This can be useful for debugging.
The cachePreparedStatements
flag (defaults to false
) controls whether
drift will cache prepared statement objects, which improves performance as
sqlite3 doesn't have to parse statements that are frequently used multiple
times. This will be the default in the next minor drift version.
The optional setup
function can be used to perform a setup just after
the database is opened, before drift is fully ready. This can be used to
add custom user-defined sql functions or to provide encryption keys in
SQLCipher implementations.
By default, drift runs migrations defined in your database class to create
tables when the database is first opened or to alter when when your schema
changes. This uses the user_version
sqlite3 pragma, which is compared
against the schemaVersion
getter of the database.
If you want to manage migrations independently or don't need them at all,
you can disable migrations in drift with the enableMigrations
parameter.
The sqlite3
parameter can be used to provide a function responsible for
obtaining an instance of the Sqlite3
bindings drift will use to open the
database. This is particularly relevant for users interested in using
drift with the native assets SDK feature, see SqliteResolver for an
example.
Implementation
factory NativeDatabase.memory({
bool logStatements = false,
SqliteResolver sqlite3 = _NativeDelegate._defaultResolver,
DatabaseSetup? setup,
bool cachePreparedStatements = _cacheStatementsByDefault,
}) {
return NativeDatabase._(
_NativeDelegate(
null,
setup,
// Disabling migrations makes no sense for in-memory databases, which
// would always be empty otherwise. They will also not be read-only, so
// what's the point...
true,
cachePreparedStatements,
sqlite3,
),
logStatements,
);
}