pub struct SqliteConnection { /* private fields */ }
_sqlite
only.Expand description
A connection to an open Sqlite database.
Because SQLite is an in-process database accessed by blocking API calls, SQLx uses a background thread and communicates with it via channels to allow non-blocking access to the database.
Dropping this struct will signal the worker thread to quit and close the database, though if an error occurs there is no way to pass it back to the user this way.
You can explicitly call .close()
to ensure the database is closed successfully
or get an error otherwise.
Implementationsยง
Sourceยงimpl SqliteConnection
impl SqliteConnection
Sourcepub async fn serialize(
&mut self,
schema: Option<&str>,
) -> Result<SqliteOwnedBuf, Error>
pub async fn serialize( &mut self, schema: Option<&str>, ) -> Result<SqliteOwnedBuf, Error>
Serialize the given SQLite database schema using sqlite3_serialize()
.
The returned buffer is a SQLite managed allocation containing the equivalent data as writing the database to disk. It is freed on-drop.
To serialize the primary, unqualified schema (main
), pass None
for the schema name.
ยงErrors
Error::InvalidArgument
if the schema name contains a zero/NUL byte (\0
).Error::Database
if the schema does not exist or another error occurs.
Sourcepub async fn deserialize(
&mut self,
schema: Option<&str>,
data: SqliteOwnedBuf,
read_only: bool,
) -> Result<(), Error>
pub async fn deserialize( &mut self, schema: Option<&str>, data: SqliteOwnedBuf, read_only: bool, ) -> Result<(), Error>
Deserialize a SQLite database from a buffer into the specified schema using sqlite3_deserialize()
.
The given schema will be disconnected and re-connected as an in-memory database
backed by data
, which should be the serialized form of a database previously returned
by a call to Self::serialize()
, documented as being equivalent to
the contents of the database file on disk.
An error will be returned if a schema with the given name is not already attached.
You can use ATTACH ':memory' as "<schema name>"
to create an empty schema first.
Pass None
to deserialize to the primary, unqualified schema (main
).
The SQLite connection will take ownership of data
and will free it when the connection
is closed or the schema is detached (SQLITE_DESERIALIZE_FREEONCLOSE
).
If read_only
is true
, the schema is opened as read-only (SQLITE_DESERIALIZE_READONLY
).
If false
, the schema is marked as resizable (SQLITE_DESERIALIZE_RESIZABLE
).
If the database is in WAL mode, an error is returned.
See sqlite3_deserialize()
for details.
ยงErrors
Error::InvalidArgument
if the schema name contains a zero/NUL byte (\0
).Error::Database
if an error occurs during deserialization.
Sourceยงimpl SqliteConnection
impl SqliteConnection
Sourcepub async fn lock_handle(&mut self) -> Result<LockedSqliteHandle<'_>, Error>
pub async fn lock_handle(&mut self) -> Result<LockedSqliteHandle<'_>, Error>
Lock the SQLite database handle out from the worker thread so direct SQLite API calls can be made safely.
Returns an error if the worker thread crashed.
Trait Implementationsยง
Sourceยงimpl<'c> Acquire<'c> for &'c mut SqliteConnection
impl<'c> Acquire<'c> for &'c mut SqliteConnection
type Database = Sqlite
type Connection = &'c mut <Sqlite as Database>::Connection
fn acquire( self, ) -> Pin<Box<dyn Future<Output = Result<<&'c mut SqliteConnection as Acquire<'c>>::Connection, Error>> + Send + 'c>>
fn begin( self, ) -> Pin<Box<dyn Future<Output = Result<Transaction<'c, Sqlite>, Error>> + Send + 'c>>
Sourceยงimpl AnyConnectionBackend for SqliteConnection
impl AnyConnectionBackend for SqliteConnection
Sourceยงfn close(
self: Box<SqliteConnection>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
fn close( self: Box<SqliteConnection>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
Sourceยงfn ping(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn ping( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
Sourceยงfn begin(
&mut self,
statement: Option<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn begin( &mut self, statement: Option<Cow<'static, str>>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn commit( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn rollback( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn start_rollback(&mut self)
Sourceยงfn get_transaction_depth(&self) -> usize
fn get_transaction_depth(&self) -> usize
Sourceยงfn shrink_buffers(&mut self)
fn shrink_buffers(&mut self)
Connection::shrink_buffers()
.fn as_migrate(&mut self) -> Result<&mut (dyn Migrate + Send + 'static), Error>
fn fetch_many<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> Pin<Box<dyn Stream<Item = Result<Either<AnyQueryResult, AnyRow>, Error>> + Send + 'q>>
fn fetch_optional<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> Pin<Box<dyn Future<Output = Result<Option<AnyRow>, Error>> + Send + 'q>>
fn prepare_with<'c, 'q>(
&'c mut self,
sql: &'q str,
_parameters: &[AnyTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<AnyStatement<'q>, Error>> + Send + 'c>>where
'q: 'c,
fn describe<'q>( &'q mut self, sql: &'q str, ) -> Pin<Box<dyn Future<Output = Result<Describe<Any>, Error>> + Send + 'q>>
Sourceยงfn is_in_transaction(&self) -> bool
fn is_in_transaction(&self) -> bool
Sourceยงfn cached_statements_size(&self) -> usize
fn cached_statements_size(&self) -> usize
Sourceยงimpl Connection for SqliteConnection
impl Connection for SqliteConnection
Sourceยงfn ping(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn ping( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
Ensure the background worker thread is alive and accepting commands.
type Database = Sqlite
type Options = SqliteConnectOptions
Sourceยงfn close(self) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
fn close(self) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
Sourceยงfn begin(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <SqliteConnection as Connection>::Database>, Error>> + Send + '_>>where
SqliteConnection: Sized,
fn begin(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <SqliteConnection as Connection>::Database>, Error>> + Send + '_>>where
SqliteConnection: Sized,
Sourceยงfn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <SqliteConnection as Connection>::Database>, Error>> + Send + '_>>where
SqliteConnection: Sized,
fn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <SqliteConnection as Connection>::Database>, Error>> + Send + '_>>where
SqliteConnection: Sized,
Sourceยงfn cached_statements_size(&self) -> usize
fn cached_statements_size(&self) -> usize
Sourceยงfn clear_cached_statements(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn clear_cached_statements( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
Sourceยงfn shrink_buffers(&mut self)
fn shrink_buffers(&mut self)
Sourceยงfn is_in_transaction(&self) -> bool
fn is_in_transaction(&self) -> bool
true
if the connection is currently in a transaction. Read moreSourceยงfn transaction<'a, F, R, E>(
&'a mut self,
callback: F,
) -> Pin<Box<dyn Future<Output = Result<R, E>> + Send + 'a>>
fn transaction<'a, F, R, E>( &'a mut self, callback: F, ) -> Pin<Box<dyn Future<Output = Result<R, E>> + Send + 'a>>
Sourceยงimpl Debug for SqliteConnection
impl Debug for SqliteConnection
Sourceยงimpl<'c> Executor<'c> for &'c mut SqliteConnection
impl<'c> Executor<'c> for &'c mut SqliteConnection
type Database = Sqlite
Sourceยงfn fetch_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<Either<SqliteQueryResult, SqliteRow>, Error>> + Send + 'e>>
fn fetch_many<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Stream<Item = Result<Either<SqliteQueryResult, SqliteRow>, Error>> + Send + 'e>>
Sourceยงfn fetch_optional<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Option<SqliteRow>, Error>> + Send + 'e>>
fn fetch_optional<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Future<Output = Result<Option<SqliteRow>, Error>> + Send + 'e>>
Sourceยงfn prepare_with<'e, 'q>(
self,
sql: &'q str,
_parameters: &[SqliteTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<SqliteStatement<'q>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
fn prepare_with<'e, 'q>(
self,
sql: &'q str,
_parameters: &[SqliteTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<SqliteStatement<'q>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
Sourceยงfn execute<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>
fn execute<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Future<Output = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>
Sourceยงfn execute_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>
fn execute_many<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>
Sourceยงfn fetch<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::Row, Error>> + Send + 'e>>
fn fetch<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::Row, Error>> + Send + 'e>>
Sourceยงfn fetch_all<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Vec<<Self::Database as Database>::Row>, Error>> + Send + 'e>>
fn fetch_all<'e, 'q, E>( self, query: E, ) -> Pin<Box<dyn Future<Output = Result<Vec<<Self::Database as Database>::Row>, Error>> + Send + 'e>>
Vec
.Sourceยงimpl Migrate for SqliteConnection
impl Migrate for SqliteConnection
fn ensure_migrations_table( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn dirty_version( &mut self, ) -> Pin<Box<dyn Future<Output = Result<Option<i64>, MigrateError>> + Send + '_>>
fn list_applied_migrations( &mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<AppliedMigration>, MigrateError>> + Send + '_>>
fn lock( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn unlock( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn apply<'e, 'm>(
&'e mut self,
migration: &'m Migration,
) -> Pin<Box<dyn Future<Output = Result<Duration, MigrateError>> + Send + 'm>>where
'e: 'm,
fn revert<'e, 'm>(
&'e mut self,
migration: &'m Migration,
) -> Pin<Box<dyn Future<Output = Result<Duration, MigrateError>> + Send + 'm>>where
'e: 'm,
Auto Trait Implementationsยง
impl Freeze for SqliteConnection
impl !RefUnwindSafe for SqliteConnection
impl Send for SqliteConnection
impl Sync for SqliteConnection
impl Unpin for SqliteConnection
impl !UnwindSafe for SqliteConnection
Blanket Implementationsยง
Sourceยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Sourceยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Sourceยงimpl<T> Instrument for T
impl<T> Instrument for T
Sourceยงfn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Sourceยงfn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Sourceยงimpl<T> IntoEither for T
impl<T> IntoEither for T
Sourceยงfn into_either(self, into_left: bool) -> Either<Self, Self> โ
fn into_either(self, into_left: bool) -> Either<Self, Self> โ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSourceยงfn into_either_with<F>(self, into_left: F) -> Either<Self, Self> โ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> โ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more