6 个版本 (稳定版)

2.0.2 2023年9月11日
2.0.1 2023年2月26日
2.0.0 2022年7月3日
1.0.0 2021年10月10日
0.1.1 2020年8月25日

590数据库接口 中排名

Download history 6/week @ 2024-04-15 1/week @ 2024-04-22 2/week @ 2024-05-20 40/week @ 2024-06-03 10/week @ 2024-06-10 23/week @ 2024-06-17 9/week @ 2024-06-24 1/week @ 2024-07-01 9/week @ 2024-07-08 35/week @ 2024-07-22 65/week @ 2024-07-29

每月下载量 109

Apache-2.0

480KB
12K SLoC

C 5.5K SLoC // 0.0% comments C++ 4K SLoC // 0.1% comments Rust 3K SLoC // 0.0% comments Shell 56 SLoC // 0.1% comments

rsmgclient - Rust Memgraph 客户端

rsmgclient 是 Rust 编程语言的 Memgraph 数据库适配器。该 rsmgclient crate 是适配器的当前实现。它通过围绕 mgclient(官方 Memgraph C/C++ 客户端库)进行封装来实现。

安装

先决条件

  • Rust 1.42.0 或更高版本
  • mgclient 的先决条件
    • 支持 C11 标准的 C 编译器
    • CMake 3.8 或更高版本
    • OpenSSL 1.0.2 或更高版本

从 crates.io 安装

一旦满足先决条件,如果您想将 rsmgclient 作为库用于自己的 Rust 项目,可以使用 cargo 安装它

cargo install rsmgclient

注意:Windows 上的默认 OpenSSL 路径为 C:\Program Files\OpenSSL-Win64\lib,如果您想更改该路径,请提供 OPENSSL_LIB_DIR 环境变量。

从源码构建

要为 rsmgclient 贡献或只是更详细地了解其构建方式,您需要

一旦克隆了 rsmgclient,您需要构建它,然后可以运行测试套件以验证其是否正确工作

git submodule update --init
cargo build
# Please run Memgraph based on the quick start guide
cargo test

在 MacOS 上,构建将尝试使用 MacPorts 或 Homebrew 检测 OpenSSL。

在Windows上,bindgen需要libclang,这是LLVM的一部分。如果LLVM尚未安装,请访问LLVM下载页面,下载并安装LLVM.exe文件(选择将LLVM添加到PATH的选项)。此外,默认的OpenSSL路径是C:\Program Files\OpenSSL-Win64\lib,如果您想更改它,请在构建阶段提供OPENSSL_LIB_DIR环境变量。

文档

在线文档可以在docs.rs页面找到。

代码示例

src/main.rs是一个示例,展示了基本命令的一些用法。

use rsmgclient::{ConnectParams, Connection, MgError, Value};

fn execute_query() -> Result<(), MgError> {
    // Connect to Memgraph.
    let connect_params = ConnectParams {
        host: Some(String::from("localhost")),
        ..Default::default()
    };
    let mut connection = Connection::connect(&connect_params)?;

    // Create simple graph.
    connection.execute_without_results(
        "CREATE (p1:Person {name: 'Alice'})-[l1:Likes]->(m:Software {name: 'Memgraph'}) \
         CREATE (p2:Person {name: 'John'})-[l2:Likes]->(m);",
    )?;

    // Fetch the graph.
    let columns = connection.execute("MATCH (n)-[r]->(m) RETURN n, r, m;", None)?;
    println!("Columns: {}", columns.join(", "));
    for record in connection.fetchall()? {
        for value in record.values {
            match value {
                Value::Node(node) => print!("{}", node),
                Value::Relationship(edge) => print!("-{}-", edge),
                value => print!("{}", value),
            }
        }
        println!();
    }
    connection.commit()?;

    Ok(())
}

fn main() {
    if let Err(error) = execute_query() {
        panic!("{}", error)
    }
}

依赖关系

~1–3MB
~58K SLoC