9 个版本 (5 个破坏性更改)

0.6.0 2021 年 5 月 22 日
0.5.1 2020 年 6 月 22 日
0.4.0 2020 年 4 月 12 日
0.3.1 2020 年 4 月 8 日
0.1.0 2019 年 8 月 1 日

#2432数据库接口

每月 42 次下载
testcontainers-avk 中使用

Apache-2.0

160KB
5K SLoC

orientdb-rs

Build Status Codecov Status Crates.io Crates.io Download License Docs dependency status Codacy Badge

OrientDB 客户端

OrientDB 的 Rust 客户端。支持同步和异步(tokio 和 async-std)

安装

crates.io 安装

[dependencies]
orientdb-client = "*"

Cargo 功能

  • async-std-runtime: 使用 async-std 的异步 API。
  • tokio-runtime: 使用 tokio 的异步 API。
  • uuid: 添加对 UUID 的支持。
  • sugar: 添加用于查询并将结果绑定到结构体的便捷 API

示例

基本使用(同步)


use orientdb_client::{OrientDB};

fn main() -> Result<(), Box<std::error::Error>> {
    let client = OrientDB::connect(("localhost",2424))?;

    let session = client.session("demodb","admin","admin")?;

    let results : Vec<_> = session.query("select from V where id = :param").named(&[("param", &1)]).run()?.collect();


    println!("{:?}", results);

    Ok(())
}

基本使用(异步)

对于 async-std

激活功能 async-std-runtime

orientdb-client= {version= "*",features= ["async-std-runtime"] }

use async_std::task::block_on;
use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;

fn main() -> OrientResult<()> {
    block_on(async {
        let client = OrientDB::connect(("localhost", 2424)).await?;

        let session = client.session("demodb", "admin", "admin").await?;

        let mut stream = session.query("select from V limit 10").run().await?;

        while let Some(item) = stream.next().await {
            println!("Record {:?}", item?);
        }

        Ok(())
    })
}

对于 tokio

激活功能 tokio-runtime

orientdb-client= {version= "*",features= ["tokio-runtime"] }

use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;

#[tokio::main]
async fn main() -> OrientResult<()> {
    let client = OrientDB::connect(("localhost", 2424)).await?;

    let session = client.session("demodb", "admin", "admin").await?;

    let mut stream = session.query("select from V limit 10").run().await?;

    while let Some(item) = stream.next().await {
        println!("Record {:?}", item?);
    }

    Ok(())
}

其他功能

sugar 功能

sugar 功能为查询构建器添加了 3 个方法以启动查询。

  • fetch_one
  • fetch
  • stream 用于异步或 iter 用于同步

当您想执行查询并将 OResult 映射到结构体时,应使用这些方法而不是 run API。

sugar 在同步和异步模式下都受支持。

fetch_one

消费流并获取第一个结果(如果有的话)。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch one
let user: Option<User> = session
    .query("select from OUser limit 1")
    .fetch_one()
    .await?;

println!("User {:?}", user);`

fetch

将流收集到 Vec 并将其映射到结构体。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch 
let user: Vec<User> = session
    .query("select from OUser limit 1")
    .fetch()
    .await?;

println!("Users {:?}", user);`

stream

将流中的每个项目映射到结构体。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch stream and collect
let stream = session
            .query("select from OUser")
            .stream::<User>()
            .await?
            .collect::<Vec<_>>()
            .await;
println!("Users {:?}", user);

开发

编译

git clone https://github.com/wolf4ood/orientdb-rs.git
cd orientdb-rs
cargo build

运行测试

您可以使用 docker-compose 启动一个用于测试的实例。使用环境变量 ORIENTDB_SERVER 指定 OrientDB 的版本

cd docker-compose
export ORIENTDB_SERVER=3.0.23
docker-compose up -d
cd ..
cargo test

依赖关系

~4–16MB
~206K SLoC