pub struct SqliteConnection { /* private fields */ }
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
Source§impl AnyConnectionBackend for SqliteConnection
impl AnyConnectionBackend for SqliteConnection
Source§fn close(self: Box<Self>) -> BoxFuture<'static, Result<()>>
fn close(self: Box<Self>) -> BoxFuture<'static, Result<()>>
Source§fn ping(&mut self) -> BoxFuture<'_, Result<()>>
fn ping(&mut self) -> BoxFuture<'_, Result<()>>
Source§fn begin(
&mut self,
statement: Option<Cow<'static, str>>,
) -> BoxFuture<'_, Result<()>>
fn begin( &mut self, statement: Option<Cow<'static, str>>, ) -> BoxFuture<'_, Result<()>>
fn commit(&mut self) -> BoxFuture<'_, Result<()>>
fn rollback(&mut self) -> BoxFuture<'_, Result<()>>
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 fetch_many<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> BoxStream<'q, Result<Either<AnyQueryResult, AnyRow>>>
fn fetch_optional<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> BoxFuture<'q, Result<Option<AnyRow>>>
fn prepare_with<'c, 'q: 'c>( &'c mut self, sql: &'q str, _parameters: &[AnyTypeInfo], ) -> BoxFuture<'c, Result<AnyStatement<'q>>>
fn describe<'q>( &'q mut self, sql: &'q str, ) -> BoxFuture<'q, Result<Describe<Any>>>
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) -> BoxFuture<'_, Result<(), Error>>
fn ping(&mut self) -> BoxFuture<'_, Result<(), Error>>
Ensure the background worker thread is alive and accepting commands.
type Database = Sqlite
type Options = SqliteConnectOptions
Source§fn close(self) -> BoxFuture<'static, Result<(), Error>>
fn close(self) -> BoxFuture<'static, Result<(), Error>>
Source§fn begin(
&mut self,
) -> BoxFuture<'_, Result<Transaction<'_, Self::Database>, Error>>where
Self: Sized,
fn begin(
&mut self,
) -> BoxFuture<'_, Result<Transaction<'_, Self::Database>, Error>>where
Self: Sized,
Source§fn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> BoxFuture<'_, Result<Transaction<'_, Self::Database>, Error>>where
Self: Sized,
fn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> BoxFuture<'_, Result<Transaction<'_, Self::Database>, Error>>where
Self: Sized,
Source§fn cached_statements_size(&self) -> usize
fn cached_statements_size(&self) -> usize
Source§fn clear_cached_statements(&mut self) -> BoxFuture<'_, Result<(), Error>>
fn clear_cached_statements(&mut self) -> BoxFuture<'_, Result<(), Error>>
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,
) -> BoxStream<'e, Result<Either<SqliteQueryResult, SqliteRow>, Error>>
fn fetch_many<'e, 'q, E>( self, query: E, ) -> BoxStream<'e, Result<Either<SqliteQueryResult, SqliteRow>, Error>>
Source§fn fetch_optional<'e, 'q, E>(
self,
query: E,
) -> BoxFuture<'e, Result<Option<SqliteRow>, Error>>
fn fetch_optional<'e, 'q, E>( self, query: E, ) -> BoxFuture<'e, Result<Option<SqliteRow>, Error>>
Source§fn prepare_with<'e, 'q: 'e>(
self,
sql: &'q str,
_parameters: &[SqliteTypeInfo],
) -> BoxFuture<'e, Result<SqliteStatement<'q>, Error>>where
'c: 'e,
fn prepare_with<'e, 'q: 'e>(
self,
sql: &'q str,
_parameters: &[SqliteTypeInfo],
) -> BoxFuture<'e, Result<SqliteStatement<'q>, Error>>where
'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
.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