1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
//! MySQL support for the [`r2d2`] connection pool (Rust).
//!
//! # Examples
//! ```
//! use std::{env, sync::Arc, thread};
//!
//! use r2d2_mysql::{
//! mysql::{prelude::*, Opts, OptsBuilder},
//! r2d2, MySqlConnectionManager,
//! };
//!
//! let url = env::var("DATABASE_URL").unwrap();
//! let opts = Opts::from_url(&url).unwrap();
//! let builder = OptsBuilder::from_opts(opts);
//! let manager = MySqlConnectionManager::new(builder);
//! let pool = Arc::new(r2d2::Pool::builder().max_size(4).build(manager).unwrap());
//!
//! let mut tasks = vec![];
//!
//! for _ in 0..3 {
//! let pool = pool.clone();
//! let th = thread::spawn(move || {
//! let mut conn = pool.get().expect("error getting connection from pool");
//!
//! let _ = conn
//! .query("SELECT version()")
//! .map(|rows: Vec<String>| rows.is_empty())
//! .expect("error executing query");
//! });
//!
//! tasks.push(th);
//! }
//!
//! for th in tasks {
//! let _ = th.join();
//! }
//! ```
pub use mysql;
pub use r2d2;
mod pool;
pub use self::pool::MySqlConnectionManager;
#[cfg(test)]
mod test {
use std::{env, sync::Arc, thread};
use mysql::{prelude::*, Opts, OptsBuilder};
use super::MySqlConnectionManager;
#[test]
fn query_pool() {
let url = env::var("DATABASE_URL").unwrap();
let opts = Opts::from_url(&url).unwrap();
let builder = OptsBuilder::from_opts(opts);
let manager = MySqlConnectionManager::new(builder);
let pool = Arc::new(r2d2::Pool::builder().max_size(4).build(manager).unwrap());
let mut tasks = vec![];
for _ in 0..3 {
let pool = pool.clone();
let th = thread::spawn(move || {
let mut conn = pool.get().expect("error getting connection from pool");
let _ = conn
.query("SELECT version()")
.map(|rows: Vec<String>| rows.is_empty())
.expect("error executing query");
});
tasks.push(th);
}
for th in tasks {
let _ = th.join();
}
}
}