Rust 连接器

Crates.io Crates.io

Rust 连接器仍然在快速开发中,版本API变动在所难免,在1.0 之前无法保证其向后兼容,请使用时注意版本及对应的文档。

感谢 @songtianyilibtdengine 的贡献,使Rust社区能够使用Rust 连接TDengine. libtaos-rs 项目旨在为Rust开发者提供官方支持,使用taosc接口及HTTP接口构建兼容API以便于用户切换接口方式。

依赖

默认情况下,libtaos-rs 使用 C 接口连接数据库,所以您需要:

  • TDengine客户端
  • clang: bindgen 使用 libclangAST 来生成对应的Rust绑定。

特性列表

  • [x] C 接口的Rust绑定
  • [x] 使用 rest feature 来启用 RESTful API.
  • x 连接池支持(feature r2d2
  • [ ] 迭代器接口
  • [ ] 流式计算接口
  • [ ] 订阅支持

构建和测试

cargo build
cargo test

测试使用默认用户名密码和本地连接。您可以根据具体情况设置环境变量:

  • TEST_TAOS_IP
  • TEST_TAOS_PORT
  • TEST_TAOS_USER
  • TEST_TAOS_PASS
  • TEST_TAOS_DB

使用

使用默认的taosc 连接方式,可以在 Cargo.toml 中直接添加 libtaos 依赖:

[dependencies]
libtaos = "v0.3.8"

添加 feature r2d2 来启动连接池:

[dependencies]
libtaos = { version = "*", features = ["r2d2"] }

对于RESTful接口,可使用 rest 特性来替代taosc,免去安装TDengine客户端。

[dependencies]
libtaos = { version = "*", features = ["rest"] }

本项目中提供一个 示例程序 如下:

// ...
#[tokio::main]
async fn main() -> Result<(), Error> {
    init();
    let taos = taos_connect()?;

    assert_eq!(
        taos.query("drop database if exists demo").await.is_ok(),
        true
    );
    assert_eq!(taos.query("create database demo").await.is_ok(), true);
    assert_eq!(taos.query("use demo").await.is_ok(), true);
    assert_eq!(
        taos.query("create table m1 (ts timestamp, speed int)")
            .await
            .is_ok(),
        true
    );

    for i in 0..10i32 {
        assert_eq!(
            taos.query(format!("insert into m1 values (now+{}s, {})", i, i).as_str())
                .await
                .is_ok(),
            true
        );
    }
    let rows = taos.query("select * from m1").await?;

    println!("{}", rows.column_meta.into_iter().map(|col| col.name).join(","));
    for row in rows.rows {
        println!("{}", row.into_iter().join(","));
    }
    Ok(())
}

您可以在 bailongma-rs - 一个 Rust 编写的 Prometheus 远程存储 API 适配器 - 看到如何在具体应用中使用 Rust 连接器。