Skip to content

Commit 2c3b63e

Browse files
committed
Make the SyncConnectionWrapper poolable
1 parent c2effd3 commit 2c3b63e

File tree

6 files changed

+64
-13
lines changed

6 files changed

+64
-13
lines changed

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ pub mod pg;
9393
))]
9494
pub mod pooled_connection;
9595
mod run_query_dsl;
96+
#[cfg(any(feature = "postgres", feature = "mysql"))]
9697
mod stmt_cache;
9798
#[cfg(feature = "sync-connection-wrapper")]
9899
pub mod sync_connection_wrapper;

src/pooled_connection/bb8.rs

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
//! # config
2828
//! # }
2929
//! #
30+
//! # #[cfg(feature = "sqlite")]
31+
//! # fn get_config() -> AsyncDieselConnectionManager<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>> {
32+
//! # let db_url = database_url_from_env("SQLITE_DATABASE_URL");
33+
//! # let config = AsyncDieselConnectionManager::<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>>::new(db_url);
34+
//! # config
35+
//! # }
36+
//! #
3037
//! # async fn run_test() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
3138
//! # use schema::users::dsl::*;
3239
//! # let config = get_config();

src/pooled_connection/deadpool.rs

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
//! # config
2828
//! # }
2929
//! #
30+
//! # #[cfg(feature = "sqlite")]
31+
//! # fn get_config() -> AsyncDieselConnectionManager<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>> {
32+
//! # let db_url = database_url_from_env("SQLITE_DATABASE_URL");
33+
//! # let config = AsyncDieselConnectionManager::<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>>::new(db_url);
34+
//! # config
35+
//! # }
36+
//! #
3037
//! # async fn run_test() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
3138
//! # use schema::users::dsl::*;
3239
//! # let config = get_config();

src/pooled_connection/mobc.rs

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
//! # config
2828
//! # }
2929
//! #
30+
//! # #[cfg(feature = "sqlite")]
31+
//! # fn get_config() -> AsyncDieselConnectionManager<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>> {
32+
//! # let db_url = database_url_from_env("SQLITE_DATABASE_URL");
33+
//! # let config = AsyncDieselConnectionManager::<diesel_async::sync_connection_wrapper::SyncConnectionWrapper<diesel::SqliteConnection>>::new(db_url);
34+
//! # config
35+
//! # }
36+
//! #
3037
//! # async fn run_test() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
3138
//! # use schema::users::dsl::*;
3239
//! # let config = get_config();

src/sync_connection_wrapper.rs

+15
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,18 @@ impl<C> SyncConnectionWrapper<C> {
284284
}
285285
}
286286
}
287+
288+
#[cfg(any(
289+
feature = "deadpool",
290+
feature = "bb8",
291+
feature = "mobc",
292+
feature = "r2d2"
293+
))]
294+
impl<C> crate::pooled_connection::PoolableConnection for SyncConnectionWrapper<C>
295+
where
296+
Self: AsyncConnection,
297+
{
298+
fn is_broken(&mut self) -> bool {
299+
Self::TransactionManager::is_broken_transaction_manager(self)
300+
}
301+
}

tests/pooling.rs

+27-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use super::{users, User};
22
use diesel::prelude::*;
3-
use diesel_async::{RunQueryDsl, SaveChangesDsl};
3+
use diesel_async::RunQueryDsl;
4+
#[cfg(not(feature = "sqlite"))]
5+
use diesel_async::SaveChangesDsl;
46

57
#[tokio::test]
68
#[cfg(feature = "bb8")]
@@ -23,13 +25,17 @@ async fn save_changes_bb8() {
2325
.await
2426
.unwrap();
2527

26-
let mut u = users::table.first::<User>(&mut conn).await.unwrap();
28+
let u = users::table.first::<User>(&mut conn).await.unwrap();
2729
assert_eq!(u.name, "John");
2830

29-
u.name = "Jane".into();
30-
let u2: User = u.save_changes(&mut conn).await.unwrap();
31+
#[cfg(not(feature = "sqlite"))]
32+
{
33+
let mut u = u;
34+
u.name = "Jane".into();
35+
let u2: User = u.save_changes(&mut conn).await.unwrap();
3136

32-
assert_eq!(u2.name, "Jane");
37+
assert_eq!(u2.name, "Jane");
38+
}
3339
}
3440

3541
#[tokio::test]
@@ -53,13 +59,17 @@ async fn save_changes_deadpool() {
5359
.await
5460
.unwrap();
5561

56-
let mut u = users::table.first::<User>(&mut conn).await.unwrap();
62+
let u = users::table.first::<User>(&mut conn).await.unwrap();
5763
assert_eq!(u.name, "John");
5864

59-
u.name = "Jane".into();
60-
let u2: User = u.save_changes(&mut conn).await.unwrap();
65+
#[cfg(not(feature = "sqlite"))]
66+
{
67+
let mut u = u;
68+
u.name = "Jane".into();
69+
let u2: User = u.save_changes(&mut conn).await.unwrap();
6170

62-
assert_eq!(u2.name, "Jane");
71+
assert_eq!(u2.name, "Jane");
72+
}
6373
}
6474

6575
#[tokio::test]
@@ -83,11 +93,15 @@ async fn save_changes_mobc() {
8393
.await
8494
.unwrap();
8595

86-
let mut u = users::table.first::<User>(&mut conn).await.unwrap();
96+
let u = users::table.first::<User>(&mut conn).await.unwrap();
8797
assert_eq!(u.name, "John");
8898

89-
u.name = "Jane".into();
90-
let u2: User = u.save_changes(&mut conn).await.unwrap();
99+
#[cfg(not(feature = "sqlite"))]
100+
{
101+
let mut u = u;
102+
u.name = "Jane".into();
103+
let u2: User = u.save_changes(&mut conn).await.unwrap();
91104

92-
assert_eq!(u2.name, "Jane");
105+
assert_eq!(u2.name, "Jane");
106+
}
93107
}

0 commit comments

Comments
 (0)