Struct diesel::sqlite::SqliteConnection
source · pub struct SqliteConnection { /* private fields */ }
sqlite
only.Expand description
Connections for the SQLite backend. Unlike other backends, SQLite supported connection URLs are:
- File paths (
test.db
) - URIs (
file://test.db
) - Special identifiers (
:memory:
)
§Supported loading model implementations
As SqliteConnection
only supports a single loading mode implementation
it is not required to explicitly specify a loading mode
when calling RunQueryDsl::load_iter()
or LoadConnection::load
§DefaultLoadingMode
SqliteConnection
only supports a single loading mode, which loads
values row by row from the result set.
use diesel::connection::DefaultLoadingMode;
{ // scope to restrict the lifetime of the iterator
let iter1 = users::table.load_iter::<(i32, String), DefaultLoadingMode>(connection)?;
for r in iter1 {
let (id, name) = r?;
println!("Id: {} Name: {}", id, name);
}
}
// works without specifying the loading mode
let iter2 = users::table.load_iter::<(i32, String), _>(connection)?;
for r in iter2 {
let (id, name) = r?;
println!("Id: {} Name: {}", id, name);
}
This mode does not support creating multiple iterators using the same connection.
use diesel::connection::DefaultLoadingMode;
let iter1 = users::table.load_iter::<(i32, String), DefaultLoadingMode>(connection)?;
let iter2 = users::table.load_iter::<(i32, String), DefaultLoadingMode>(connection)?;
for r in iter1 {
let (id, name) = r?;
println!("Id: {} Name: {}", id, name);
}
for r in iter2 {
let (id, name) = r?;
println!("Id: {} Name: {}", id, name);
}
Implementations§
source§impl SqliteConnection
impl SqliteConnection
sourcepub fn immediate_transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
pub fn immediate_transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
Run a transaction with BEGIN IMMEDIATE
This method will return an error if a transaction is already open.
§Example
conn.immediate_transaction(|conn| {
// Do stuff in a transaction
Ok(())
})
sourcepub fn exclusive_transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
pub fn exclusive_transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
Run a transaction with BEGIN EXCLUSIVE
This method will return an error if a transaction is already open.
§Example
conn.exclusive_transaction(|conn| {
// Do stuff in a transaction
Ok(())
})
sourcepub fn register_collation<F>(
&mut self,
collation_name: &str,
collation: F
) -> QueryResult<()>
pub fn register_collation<F>( &mut self, collation_name: &str, collation: F ) -> QueryResult<()>
Register a collation function.
collation
must always return the same answer given the same inputs.
If collation
panics and unwinds the stack, the process is aborted, since it is used
across a C FFI boundary, which cannot be unwound across and there is no way to
signal failures via the SQLite interface in this case..
If the name is already registered it will be overwritten.
This method will return an error if registering the function fails, either due to an out-of-memory situation or because a collation with that name already exists and is currently being used in parallel by a query.
The collation needs to be specified when creating a table:
CREATE TABLE my_table ( str TEXT COLLATE MY_COLLATION )
,
where MY_COLLATION
corresponds to name passed as collation_name
.
§Example
// sqlite NOCASE only works for ASCII characters,
// this collation allows handling UTF-8 (barring locale differences)
conn.register_collation("RUSTNOCASE", |rhs, lhs| {
rhs.to_lowercase().cmp(&lhs.to_lowercase())
})
Trait Implementations§
source§impl Connection for SqliteConnection
impl Connection for SqliteConnection
source§fn establish(database_url: &str) -> ConnectionResult<Self>
fn establish(database_url: &str) -> ConnectionResult<Self>
Establish a connection to the database specified by database_url
.
See SqliteConnection for supported database_url
.
If the database does not exist, this method will try to create a new database and then establish a connection to it.
§type TransactionManager = AnsiTransactionManager
type TransactionManager = AnsiTransactionManager
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§fn execute_returning_count<T>(&mut self, source: &T) -> QueryResult<usize>
fn execute_returning_count<T>(&mut self, source: &T) -> QueryResult<usize>
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§fn transaction_state(&mut self) -> &mut AnsiTransactionManagerwhere
Self: Sized,
fn transaction_state(&mut self) -> &mut AnsiTransactionManagerwhere
Self: Sized,
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§fn transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
fn transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
source§fn begin_test_transaction(&mut self) -> QueryResult<()>
fn begin_test_transaction(&mut self) -> QueryResult<()>
source§impl LoadConnection for SqliteConnection
impl LoadConnection for SqliteConnection
§type Cursor<'conn, 'query> = StatementIterator<'conn, 'query>
type Cursor<'conn, 'query> = StatementIterator<'conn, 'query>
LoadConnection::load
Read more§type Row<'conn, 'query> = SqliteRow<'conn, 'query>
type Row<'conn, 'query> = SqliteRow<'conn, 'query>
Iterator::Item
for the iterator implementation
of LoadConnection::Cursor
source§fn load<'conn, 'query, T>(
&'conn mut self,
source: T
) -> QueryResult<Self::Cursor<'conn, 'query>>where
T: Query + QueryFragment<Self::Backend> + QueryId + 'query,
Self::Backend: QueryMetadata<T::SqlType>,
fn load<'conn, 'query, T>(
&'conn mut self,
source: T
) -> QueryResult<Self::Cursor<'conn, 'query>>where
T: Query + QueryFragment<Self::Backend> + QueryId + 'query,
Self::Backend: QueryMetadata<T::SqlType>,
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§impl MultiConnectionHelper for SqliteConnection
impl MultiConnectionHelper for SqliteConnection
source§fn to_any<'a>(
lookup: &mut <Self::Backend as TypeMetadata>::MetadataLookup
) -> &mut (dyn Any + 'a)
fn to_any<'a>( lookup: &mut <Self::Backend as TypeMetadata>::MetadataLookup ) -> &mut (dyn Any + 'a)
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§fn from_any(
lookup: &mut dyn Any
) -> Option<&mut <Self::Backend as TypeMetadata>::MetadataLookup>
fn from_any( lookup: &mut dyn Any ) -> Option<&mut <Self::Backend as TypeMetadata>::MetadataLookup>
i-implement-a-third-party-backend-and-opt-into-breaking-changes
only.source§impl R2D2Connection for SqliteConnection
Available on crate feature r2d2
only.
impl R2D2Connection for SqliteConnection
r2d2
only.