diff --git a/contrib/db_pools/lib/Cargo.toml b/contrib/db_pools/lib/Cargo.toml index b71b249253..19e0635666 100644 --- a/contrib/db_pools/lib/Cargo.toml +++ b/contrib/db_pools/lib/Cargo.toml @@ -28,6 +28,7 @@ sqlx_macros = ["sqlx/macros"] # diesel features diesel_postgres = ["diesel-async/postgres", "diesel-async/deadpool", "deadpool", "diesel"] diesel_mysql = ["diesel-async/mysql", "diesel-async/deadpool", "deadpool", "diesel"] +diesel_sqlite = ["diesel-async/sqlite", "diesel-async/deadpool", "deadpool", "diesel"] # implicit features: mongodb [dependencies.rocket] @@ -40,7 +41,7 @@ path = "../codegen" version = "0.1.0" [dependencies.deadpool] -version = "0.12.1" +version = "0.13" default-features = false features = ["rt_tokio_1", "managed"] optional = true @@ -64,13 +65,13 @@ features = ["compat-3-0-0", "rustls-tls"] optional = true [dependencies.diesel-async] -version = "0.6.0" +version = "0.9.2" default-features = false features = ["async-connection-wrapper"] optional = true [dependencies.diesel] -version = "2.1" +version = "2.3.12" default-features = false optional = true diff --git a/contrib/db_pools/lib/src/diesel.rs b/contrib/db_pools/lib/src/diesel.rs index 9d4d935d9d..2ad39ecba5 100644 --- a/contrib/db_pools/lib/src/diesel.rs +++ b/contrib/db_pools/lib/src/diesel.rs @@ -95,6 +95,10 @@ pub use diesel_async::AsyncMysqlConnection; #[cfg(feature = "diesel_postgres")] pub use diesel_async::AsyncPgConnection; +#[doc(inline)] +#[cfg(feature = "diesel_sqlite")] +pub use diesel_async::sync_connection_wrapper::SyncConnectionWrapper; + /// Alias of a `Result` with an error type of [`Debug`] for a `diesel::Error`. /// /// `QueryResult` is a [`Responder`](rocket::response::Responder) when `T` (the @@ -150,3 +154,25 @@ pub type MysqlPool = Pool; /// ``` #[cfg(feature = "diesel_postgres")] pub type PgPool = Pool; + +/// Type alias for an `async` pool of Sqlite connections for `async` [diesel]. +/// +/// ```rust +/// # extern crate rocket; +/// # #[cfg(feature = "diesel_sqlite")] { +/// # use rocket::get; +/// use rocket_db_pools::{Database, Connection}; +/// use rocket_db_pools::diesel::{SqlitePool, prelude::*}; +/// +/// #[derive(Database)] +/// #[database("my_sqlite_db_name")] +/// struct Db(SqlitePool); +/// +/// #[get("/")] +/// async fn use_db(mut db: Connection) { +/// /* .. */ +/// } +/// # } +/// ``` +#[cfg(feature = "diesel_sqlite")] +pub type SqlitePool = Pool>; diff --git a/contrib/db_pools/lib/src/lib.rs b/contrib/db_pools/lib/src/lib.rs index 0ec23bb470..3eab6cee94 100644 --- a/contrib/db_pools/lib/src/lib.rs +++ b/contrib/db_pools/lib/src/lib.rs @@ -141,10 +141,11 @@ //! //! ## `diesel` (v2) //! -//! | Database | Feature | [`Pool`] Type | [`Connection`] Deref | -//! |----------|-------------------|-----------------------|----------------------------------| -//! | Postgres | `diesel_postgres` | [`diesel::PgPool`] | [`diesel::AsyncPgConnection`] | -//! | MySQL | `diesel_mysql` | [`diesel::MysqlPool`] | [`diesel::AsyncMysqlConnection`] | //! +//! | Database | Feature | [`Pool`] Type | [`Connection`] Deref | +//! |----------|-------------------|------------------------|--------------------------------------------------------------| +//! | Postgres | `diesel_postgres` | [`diesel::PgPool`] | [`diesel::AsyncPgConnection`] | +//! | MySQL | `diesel_mysql` | [`diesel::MysqlPool`] | [`diesel::AsyncMysqlConnection`] | +//! | SQLite | `diesel_sqlite` | [`diesel::SqlitePool`] | [`diesel::SyncConnectionWrapper>`] | //! //! See [`diesel`] for usage details. //! @@ -243,7 +244,11 @@ pub use rocket; #[doc(inline)] pub use rocket::figment; -#[cfg(any(feature = "diesel_postgres", feature = "diesel_mysql"))] pub mod diesel; +#[cfg(any( + feature = "diesel_postgres", + feature = "diesel_mysql", + feature = "diesel_sqlite" +))] pub mod diesel; #[cfg(feature = "deadpool_postgres")] pub use deadpool_postgres; #[cfg(feature = "deadpool_redis")] pub use deadpool_redis; #[cfg(feature = "mongodb")] pub use mongodb; diff --git a/contrib/db_pools/lib/src/pool.rs b/contrib/db_pools/lib/src/pool.rs index a7f685deb3..965ea5d661 100644 --- a/contrib/db_pools/lib/src/pool.rs +++ b/contrib/db_pools/lib/src/pool.rs @@ -192,6 +192,15 @@ mod deadpool_postgres { } } + #[cfg(feature = "diesel_sqlite")] + impl DeadManager for AsyncDieselConnectionManager< + diesel_async::sync_connection_wrapper::SyncConnectionWrapper:: + > { + fn new(config: &Config) -> Result { + Ok(Self::new(config.url.as_str())) + } + } + #[rocket::async_trait] impl>> crate::Pool for Pool where M::Type: Send, C: Send + 'static, M::Error: std::error::Error diff --git a/examples/databases/src/diesel_mysql.rs b/examples/databases/src/diesel_mysql.rs index 0cfa3f17fa..832cf9e56c 100644 --- a/examples/databases/src/diesel_mysql.rs +++ b/examples/databases/src/diesel_mysql.rs @@ -37,7 +37,7 @@ diesel::table! { async fn create(mut db: Connection, mut post: Json) -> Result>> { diesel::define_sql_function!(fn last_insert_id() -> BigInt); - let post = db.transaction(|mut conn| Box::pin(async move { + let post = db.transaction(async |mut conn| { diesel::insert_into(posts::table) .values(&*post) .execute(&mut conn) @@ -49,7 +49,7 @@ async fn create(mut db: Connection, mut post: Json) -> Result(post) - })).await?; + }).await?; Ok(Created::new("/").body(post)) }