@@ -5,6 +5,8 @@ use std::sync::{
5
5
Arc , Mutex ,
6
6
} ;
7
7
use std:: time:: Duration ;
8
+ use sqlx_core:: connection:: ConnectOptions ;
9
+ use sqlx_core:: pool:: PoolConnectMetadata ;
8
10
9
11
#[ sqlx_macros:: test]
10
12
async fn pool_should_invoke_after_connect ( ) -> anyhow:: Result < ( ) > {
@@ -83,38 +85,13 @@ async fn test_pool_callbacks() -> anyhow::Result<()> {
83
85
84
86
sqlx_test:: setup_if_needed ( ) ;
85
87
86
- let conn_options: AnyConnectOptions = std:: env:: var ( "DATABASE_URL" ) ?. parse ( ) ?;
88
+ let conn_options: Arc < AnyConnectOptions > = Arc :: new ( std:: env:: var ( "DATABASE_URL" ) ?. parse ( ) ?) ;
87
89
88
90
let current_id = AtomicI32 :: new ( 0 ) ;
89
91
90
92
let pool = AnyPoolOptions :: new ( )
91
93
. max_connections ( 1 )
92
94
. 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
95
. before_acquire ( |conn, meta| {
119
96
// `age` and `idle_for` should both be nonzero
120
97
assert_ne ! ( meta. age, Duration :: ZERO ) ;
@@ -165,7 +142,31 @@ async fn test_pool_callbacks() -> anyhow::Result<()> {
165
142
} )
166
143
} )
167
144
// Don't establish a connection yet.
168
- . connect_lazy_with ( conn_options) ;
145
+ . connect_lazy_with_connector ( move |meta : PoolConnectMetadata | {
146
+ let connect_opts = Arc :: clone ( & conn_options) ;
147
+ let id = current_id. fetch_add ( 1 , Ordering :: AcqRel ) ;
148
+
149
+ async move {
150
+ let mut conn = connect_opts. connect ( ) . await ?;
151
+
152
+ let statement = format ! (
153
+ // language=SQL
154
+ r#"
155
+ CREATE TEMPORARY TABLE conn_stats(
156
+ id int primary key,
157
+ before_acquire_calls int default 0,
158
+ after_release_calls int default 0
159
+ );
160
+ INSERT INTO conn_stats(id) VALUES ({});
161
+ "# ,
162
+ // Until we have generalized bind parameters
163
+ id
164
+ ) ;
165
+
166
+ conn. execute ( & statement[ ..] ) . await ?;
167
+ Ok ( conn)
168
+ }
169
+ } ) ;
169
170
170
171
// Expected pattern of (id, before_acquire_calls, after_release_calls)
171
172
let pattern = [
0 commit comments