pub struct WriteGuard { /* private fields */ }Expand description
RAII guard for exclusive write access to a database connection
This guard wraps a pool connection and returns it to the pool on drop.
Only one WriteGuard can exist at a time (enforced by max_connections=1),
ensuring serialized write access.
The guard derefs to SqliteConnection allowing direct use with sqlx queries.
§Example
use sqlx_sqlite_conn_mgr::SqliteDatabase;
use sqlx::query;
let db = SqliteDatabase::connect("test.db", None).await?;
let mut writer = db.acquire_writer().await?;
// Use &mut *writer for write queries (e.g. INSERT/UPDATE/DELETE)
query("INSERT INTO users (name) VALUES (?)")
.bind("Alice")
.execute(&mut *writer)
.await?;
// Writer is automatically returned when droppedMethods from Deref<Target = 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::InvalidArgumentif the schema name contains a zero/NUL byte (\0).Error::Databaseif 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::InvalidArgumentif the schema name contains a zero/NUL byte (\0).Error::Databaseif an error occurs during deserialization.
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 Debug for WriteGuard
impl Debug for WriteGuard
Source§impl Deref for WriteGuard
impl Deref for WriteGuard
Auto Trait Implementations§
impl Freeze for WriteGuard
impl !RefUnwindSafe for WriteGuard
impl Send for WriteGuard
impl Sync for WriteGuard
impl Unpin for WriteGuard
impl !UnwindSafe for WriteGuard
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