#neo4j #macro #driver #bolt #version #docker #neo4rs

neo4rs-macros

neo4rs使用的宏

4个版本 (2个重大更新)

0.3.0 2023年11月14日
0.2.1 2021年1月10日
0.2.0 2020年12月31日
0.1.0 2020年12月21日

过程宏类别中排名第839

Download history 846/week @ 2024-03-13 1001/week @ 2024-03-20 1125/week @ 2024-03-27 1103/week @ 2024-04-03 1012/week @ 2024-04-10 921/week @ 2024-04-17 1045/week @ 2024-04-24 933/week @ 2024-05-01 1371/week @ 2024-05-08 1248/week @ 2024-05-15 1127/week @ 2024-05-22 1634/week @ 2024-05-29 1383/week @ 2024-06-05 834/week @ 2024-06-12 940/week @ 2024-06-19 1103/week @ 2024-06-26

每月下载量4,509
16个库中使用(通过neo4rs

MIT许可证

7KB
144 代码行

Neo4rs CI状态 Crates.io

neo4rs是针对Neo4j图数据库的驱动程序,由Rust编写。

neo4rs实现了bolt规范

此驱动程序与Neo4j 5.x和4.4版本兼容。仅支持最新的5.x版本,遵循Neo4j版本支持策略

API文档:Docs.rs

示例

    // concurrent queries
    let uri = "127.0.0.1:7687";
    let user = "neo4j";
    let pass = "neo";
    let graph = Graph::new(&uri, user, pass).await.unwrap();
    for _ in 1..=42 {
        let graph = graph.clone();
        tokio::spawn(async move {
            let mut result = graph.execute(
           query("MATCH (p:Person {name: $name}) RETURN p").param("name", "Mark")
        ).await.unwrap();
            while let Ok(Some(row)) = result.next().await {
            let node: Node = row.get("p").unwrap();
            let name: String = node.get("name").unwrap();
                println!("{}", name);
            }
        });
    }

    //Transactions
    let mut txn = graph.start_txn().await.unwrap();
    txn.run_queries([
        "CREATE (p:Person {name: 'mark'})",
        "CREATE (p:Person {name: 'jake'})",
        "CREATE (p:Person {name: 'luke'})",
    ])
    .await
    .unwrap();
    txn.commit().await.unwrap(); //or txn.rollback().await.unwrap();

MSRV

该库的最小支持Rust版本(MSRV)为1.63.0

MSRV(最低支持 Rust 版本)的变化不被视为破坏性更改。对于1.0.0版本之后的变化,MSRV 的更改可以在小版本增量中完成(例如,1.1.3 -> 1.2.0);对于1.0.0版本之前的变化,MSRV 的更改可以在补丁版本增量中完成(例如,0.1.3 -> 0.1.4)。

实施进度

[!重要] 此驱动程序仍在开发中,并非所有功能都已实现。

仅支持 Bolt 版本 4.0 和 4.1。后续版本的支持正在计划中。

这意味着,某些功能如书签或元素 ID 目前尚不支持。

开发

测试

此包包含单元测试和集成测试。单元测试使用 cargo test --lib 运行,无需运行 Neo4j 实例。集成测试使用 cargo test 运行,并需要运行中的 Neo4j 实例。

运行集成测试

要运行测试,您需要运行 docker 或现有的 Neo4j 实例。推荐使用 docker,因为测试不一定会在运行后清理。

使用 Docker

要使用 Docker 运行测试,您需要安装并运行 Docker。您可以通过设置环境变量 NEO4J_VERSION_TAG 来控制使用的 Neo4j 版本。默认版本是 4.2。测试将使用具有指定版本标记的官方 neo4j Docker 镜像。

您可能会遇到恐慌或测试失败,错误信息为 'failed to start container'。在这种情况下,请在运行测试之前先使用 docker pull neo4j:$NEO4J_VERSION_TAG 下载镜像。

这可能会发生在您使用的是镜像不支持的机器架构时,例如苹果硅 Mac 电脑上的 arm64。在这种情况下,下载镜像将失败,显示消息类似于 'no matching manifest for linux/arm64/v8'。您需要使用 --platform 标志为不同的架构下载镜像,例如 docker pull --platform linux/amd64 neo4j:$NEO4J_VERSION_TAG。Docker 中有一个实验性选项可以使用 Rosetta 运行这些镜像,这样测试就不会花费很长时间(请参阅 Docker 文档)。

您也可以使用像 4.4 这样的 newer neo4j 版本,它支持 arm64 架构。

使用现有的 Neo4j 实例

要使用现有的 Neo4j 实例运行测试,您需要将环境变量 NEO4J_TEST_URI 设置为连接字符串,例如 neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io。默认用户是 neo4j,但可以使用环境变量 NEO4J_TEST_USER 进行更改。默认密码是 neo,但可以使用环境变量 NEO4J_TEST_PASS 进行更改。

某些测试可能会根据 Neo4j 版本运行不同的查询。您可以使用环境变量 NEO4J_VERSION_TAG 来设置 Neo4j 实例的版本。

建议只运行单个集成测试,并在测试后手动清理数据库。

env NEO4J_TEST_URI=neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io NEO4J_TEST_USER=neo4j NEO4J_TEST_PASS=supersecret NEO4J_VERSION_TAG=5.8 cargo test --test <name of the integration test, see the file names in lib/tests/>

更新 CI 的 Cargo.lock 文件

我们进行了 CI 测试,以验证 MSRV 以及依赖项的最小版本。最小版本是满足 Cargo.toml 条目的最低版本,而不是默认的最高版本。

如果您更改了 Cargo.toml 中的任何内容,您需要更新 CI 的 Cargo.lock 文件。

本项目使用 xtask 帮助更新锁定文件。

建议在运行以下命令之前关闭所有编辑器,或者更具体地说,关闭此项目的所有 rust-analyzer 实例。

更新 ci/Cargo.lock.msrv

# If there are errors, update Cargo.toml to fix and try again from the top.
# You might have to downgrade or remove certain crates to hit the MSRV.
# A number of such downgrades are already defined in the `update_msrv_lock` function
# in the xtask script.
# Alternatively, you might suggest an increase of the MSRV.
cargo xtask msrv

使用 xtask 需要系统上已安装 curljq

更新 ci/Cargo.lock.min

# If there are errors, update Cargo.toml to fix and try again from the top.
cargo xtask min

使用 xtask 需要系统上已安装 curljq

许可证

Neo4rs 许可证根据您的选择,可以是以下之一

依赖项

~285–740KB
~18K SLoC