r2d2_odbc_api

Crates.ior2d2_odbc_api
lib.rsr2d2_odbc_api
version0.2.0
sourcesrc
created_at2021-08-25 16:27:59.236407
updated_at2022-10-11 12:40:29.423552
descriptionODBC support for the r2d2 connection pool Via odbc-api Based on https://github.com/Koka/r2d2-odbc
homepagehttps://github.com/genusistimelord/r2d2_odbc_api
repositoryhttps://github.com/genusistimelord/r2d2_odbc_api
max_upload_size
id442256
size90,040
Andrew Wheeler(Genusis) (genusistimelord)

documentation

https://docs.rs/r2d2_odbc_api

README

r2d2-odbc-api

[ODBC] adapter for [r2d2] connection pool with custom Pooling.

crates.io docs.rs Minimum Rust Version

License

This project is licensed under either Apache License, Version 2.0, zlib License, or MIT License, at your option.

Example


extern crate anyhow;
extern crate odbc_api;
extern crate r2d2;
extern crate r2d2_odbc_api;

use anyhow::Error;
use odbc_api::*;
use r2d2_odbc_api::ODBCConnectionManager;
use std::str;
use std::thread;

fn main() -> Result<(), Error> {
    let max_pool_size = 10;
    let manager = ODBCConnectionManager::new("DSN=PostgreSQL", max_pool_size);
    let pool = r2d2::Pool::builder()
        .max_size(max_pool_size)
        .build(manager)
        .unwrap();

    let mut children = vec![];
    for i in 0..10i32 {
        let pool = pool.clone();
        children.push(thread::spawn(move || {
            let pool_conn = pool.get().unwrap();

            if let Some(cursor) = pool_conn.execute("SELECT version()", ()).unwrap() {
                let mut buffers =
                    buffers::TextRowSet::for_cursor(5000, &cursor, Some(4096)).unwrap();
                let mut row_set_cursor = cursor.bind_buffer(&mut buffers).unwrap();

                while let Some(batch) = row_set_cursor.fetch().unwrap() {
                    if let Some(val) = batch.at(0, 0) {
                        println!("THREAD {} {}", i, str::from_utf8(val).unwrap());
                    }
                }
            };
        }));
    }

    for child in children {
        let _ = child.join();
    }

    Ok(())
}

Commit count: 35

cargo fmt