#r2d2 #pool #connection-pool #odbc #sql #connection-manager

r2d2_odbc_api

基于odbc-api为r2d2连接池提供ODBC支持,基于https://github.com/Koka/r2d2-odbc

6个版本

使用旧Rust 2015

0.2.0 2022年10月11日
0.1.4 2022年1月20日
0.1.3 2021年10月13日
0.1.2 2021年8月25日

#2564数据库接口

MIT OR Apache-2.0 OR Zlib

26KB
190

r2d2-odbc-api

[ODBC][r2d2] 连接池提供适配器,具有自定义池化。

crates.io docs.rs Minimum Rust Version

许可证

此项目受以下任一许可证的许可:Apache License, Version 2.0、zlib License或MIT License,由您选择。

示例


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(())
}

依赖项

~2–37MB
~578K SLoC