Crate r2d2_mysql[][src]

Expand description

r2d2-mysql

MySQL support for the r2d2 connection pool (Rust) . see r2d2 .

Install

Just include another [dependencies.*] section into your Cargo.toml:

[dependencies.r2d2_mysql]
git = "https://github.com/outersky/r2d2-mysql"
version="*"

Sample

extern crate mysql;
extern crate r2d2_mysql;
extern crate r2d2;

use std::env;
use std::sync::Arc;
use std::thread;
use mysql::{Opts,OptsBuilder};
use mysql::prelude::Queryable;
use r2d2_mysql::MysqlConnectionManager;

fn main() {
	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()
                    .map_err(|err| {
                        println!(
                            "get connection from pool error in line:{} ! error: {:?}",
                            line!(),
                            err
                        )
                    })
                    .unwrap();
                let _ = conn.query("SELECT version()").map(|_: Vec<String>| ()).map_err(|err| {
                    println!("execute query error in line:{} ! error: {:?}", line!(), err)
                });
            });
            tasks.push(th);
        }

    for th in tasks {
        let _ = th.join();
    }
}

Re-exports

pub extern crate mysql;
pub extern crate r2d2;
pub use pool::MysqlConnectionManager;

Modules