Trait diesel::connection::Connection[][src]

pub trait Connection: SimpleConnection + Sized + Send {
    type Backend: Backend;
    fn establish(database_url: &str) -> ConnectionResult<Self>;

    fn transaction<T, E, F>(&self, f: F) -> Result<T, E>
    where
        F: FnOnce() -> Result<T, E>,
        E: From<Error>
, { ... }
fn begin_test_transaction(&self) -> QueryResult<()> { ... }
fn test_transaction<T, E, F>(&self, f: F) -> T
    where
        F: FnOnce() -> Result<T, E>,
        E: Debug
, { ... } }
[]

A connection to a database

Associated Types

[]

The backend this type connects to

Required Methods

[]

Establishes a new connection to the database

The argument to this method varies by backend. See the documentation for that backend's connection class for details about what it accepts.

Provided Methods

[]

Executes the given function inside of a database transaction

If there is already an open transaction, savepoints will be used instead.

Example

use diesel::result::Error;

conn.transaction::<_, Error, _>(|| {
    diesel::insert_into(users)
        .values(name.eq("Ruby"))
        .execute(&conn)?;

    let all_names = users.select(name).load::<String>(&conn)?;
    assert_eq!(vec!["Sean", "Tess", "Ruby"], all_names);

    Ok(())
})?;

conn.transaction::<(), _, _>(|| {
    diesel::insert_into(users)
        .values(name.eq("Pascal"))
        .execute(&conn)?;

    let all_names = users.select(name).load::<String>(&conn)?;
    assert_eq!(vec!["Sean", "Tess", "Ruby", "Pascal"], all_names);

    // If we want to roll back the transaction, but don't have an
    // actual error to return, we can return `RollbackTransaction`.
    Err(Error::RollbackTransaction)
});

let all_names = users.select(name).load::<String>(&conn)?;
assert_eq!(vec!["Sean", "Tess", "Ruby"], all_names);

[]

Creates a transaction that will never be committed. This is useful for tests. Panics if called while inside of a transaction.

[]

Executes the given function inside a transaction, but does not commit it. Panics if the given function returns an error.

Example

use diesel::result::Error;

conn.test_transaction::<_, Error, _>(|| {
    diesel::insert_into(users)
        .values(name.eq("Ruby"))
        .execute(&conn)?;

    let all_names = users.select(name).load::<String>(&conn)?;
    assert_eq!(vec!["Sean", "Tess", "Ruby"], all_names);

    Ok(())
});

// Even though we returned `Ok`, the transaction wasn't committed.
let all_names = users.select(name).load::<String>(&conn)?;
assert_eq!(vec!["Sean", "Tess"], all_names);

Implementations on Foreign Types

impl<C> Connection for PooledConnection<ConnectionManager<C>> where
    C: Connection<TransactionManager = AnsiTransactionManager> + Send + 'static,
    C::Backend: UsesAnsiSavepointSyntax
[src]

[]

Implementors