|
1 | 1 | use sqlx::any::{AnyConnectOptions, AnyPoolOptions};
|
2 | 2 | use sqlx::Executor;
|
| 3 | +use sqlx_core::connection::ConnectOptions; |
| 4 | +use sqlx_core::pool::PoolConnectMetadata; |
3 | 5 | use std::sync::{
|
4 |
| - atomic::{AtomicI32, AtomicUsize, Ordering}, |
| 6 | + atomic::{AtomicI32, Ordering}, |
5 | 7 | Arc, Mutex,
|
6 | 8 | };
|
7 | 9 | use std::time::Duration;
|
8 | 10 |
|
9 |
| -#[sqlx_macros::test] |
10 |
| -async fn pool_should_invoke_after_connect() -> anyhow::Result<()> { |
11 |
| - sqlx::any::install_default_drivers(); |
12 |
| - |
13 |
| - let counter = Arc::new(AtomicUsize::new(0)); |
14 |
| - |
15 |
| - let pool = AnyPoolOptions::new() |
16 |
| - .after_connect({ |
17 |
| - let counter = counter.clone(); |
18 |
| - move |_conn, _meta| { |
19 |
| - let counter = counter.clone(); |
20 |
| - Box::pin(async move { |
21 |
| - counter.fetch_add(1, Ordering::SeqCst); |
22 |
| - |
23 |
| - Ok(()) |
24 |
| - }) |
25 |
| - } |
26 |
| - }) |
27 |
| - .connect(&dotenvy::var("DATABASE_URL")?) |
28 |
| - .await?; |
29 |
| - |
30 |
| - let _ = pool.acquire().await?; |
31 |
| - let _ = pool.acquire().await?; |
32 |
| - let _ = pool.acquire().await?; |
33 |
| - let _ = pool.acquire().await?; |
34 |
| - |
35 |
| - // since connections are released asynchronously, |
36 |
| - // `.after_connect()` may be called more than once |
37 |
| - assert!(counter.load(Ordering::SeqCst) >= 1); |
38 |
| - |
39 |
| - Ok(()) |
40 |
| -} |
41 |
| - |
42 | 11 | // https://github.com/launchbadge/sqlx/issues/527
|
43 | 12 | #[sqlx_macros::test]
|
44 | 13 | async fn pool_should_be_returned_failed_transactions() -> anyhow::Result<()> {
|
@@ -83,38 +52,13 @@ async fn test_pool_callbacks() -> anyhow::Result<()> {
|
83 | 52 |
|
84 | 53 | sqlx_test::setup_if_needed();
|
85 | 54 |
|
86 |
| - let conn_options: AnyConnectOptions = std::env::var("DATABASE_URL")?.parse()?; |
| 55 | + let conn_options: Arc<AnyConnectOptions> = Arc::new(std::env::var("DATABASE_URL")?.parse()?); |
87 | 56 |
|
88 | 57 | let current_id = AtomicI32::new(0);
|
89 | 58 |
|
90 | 59 | let pool = AnyPoolOptions::new()
|
91 | 60 | .max_connections(1)
|
92 | 61 | .acquire_timeout(Duration::from_secs(5))
|
93 |
| - .after_connect(move |conn, meta| { |
94 |
| - assert_eq!(meta.age, Duration::ZERO); |
95 |
| - assert_eq!(meta.idle_for, Duration::ZERO); |
96 |
| - |
97 |
| - let id = current_id.fetch_add(1, Ordering::AcqRel); |
98 |
| - |
99 |
| - Box::pin(async move { |
100 |
| - let statement = format!( |
101 |
| - // language=SQL |
102 |
| - r#" |
103 |
| - CREATE TEMPORARY TABLE conn_stats( |
104 |
| - id int primary key, |
105 |
| - before_acquire_calls int default 0, |
106 |
| - after_release_calls int default 0 |
107 |
| - ); |
108 |
| - INSERT INTO conn_stats(id) VALUES ({}); |
109 |
| - "#, |
110 |
| - // Until we have generalized bind parameters |
111 |
| - id |
112 |
| - ); |
113 |
| - |
114 |
| - conn.execute(&statement[..]).await?; |
115 |
| - Ok(()) |
116 |
| - }) |
117 |
| - }) |
118 | 62 | .before_acquire(|conn, meta| {
|
119 | 63 | // `age` and `idle_for` should both be nonzero
|
120 | 64 | assert_ne!(meta.age, Duration::ZERO);
|
@@ -165,7 +109,31 @@ async fn test_pool_callbacks() -> anyhow::Result<()> {
|
165 | 109 | })
|
166 | 110 | })
|
167 | 111 | // Don't establish a connection yet.
|
168 |
| - .connect_lazy_with(conn_options); |
| 112 | + .connect_lazy_with_connector(move |_meta: PoolConnectMetadata| { |
| 113 | + let connect_opts = Arc::clone(&conn_options); |
| 114 | + let id = current_id.fetch_add(1, Ordering::AcqRel); |
| 115 | + |
| 116 | + async move { |
| 117 | + let mut conn = connect_opts.connect().await?; |
| 118 | + |
| 119 | + let statement = format!( |
| 120 | + // language=SQL |
| 121 | + r#" |
| 122 | + CREATE TEMPORARY TABLE conn_stats( |
| 123 | + id int primary key, |
| 124 | + before_acquire_calls int default 0, |
| 125 | + after_release_calls int default 0 |
| 126 | + ); |
| 127 | + INSERT INTO conn_stats(id) VALUES ({}); |
| 128 | + "#, |
| 129 | + // Until we have generalized bind parameters |
| 130 | + id |
| 131 | + ); |
| 132 | + |
| 133 | + conn.execute(&statement[..]).await?; |
| 134 | + Ok(conn) |
| 135 | + } |
| 136 | + }); |
169 | 137 |
|
170 | 138 | // Expected pattern of (id, before_acquire_calls, after_release_calls)
|
171 | 139 | let pattern = [
|
|
0 commit comments