libneo4j_client. c++中的预处理语句

Prepared statements in C++ libneo4j_client?

本文关键字:预处理 语句 c++ client libneo4j      更新时间:2023-10-16

neo4j_run API允许您输入映射,但我不知道查询的语法。在python中,这是一个简单的{x}。我找不到neo4j_map语法的示例。

const char *q = "MATCH (p:Person) WHERE p.age > {age} RETURN p.name AS name, p.age as AGE";
neo4j_run(session, q, my_map)

我应该如何(a)构造my_map和(b)指示查询中的字段?

UPDATE:对于第一部分,这个测试展示了如何构造映射。为了清楚起见,复制到这里:

START_TEST (invalid_map_value)
{
    neo4j_map_entry_t map_entries[] =
        { { .key = neo4j_string("bernie"), .value = neo4j_int(1) },
          { .key = neo4j_int(1), .value = neo4j_int(2) } };
    neo4j_value_t value = neo4j_map(map_entries, 2);
    ck_assert(neo4j_is_null(value));
    ck_assert_int_eq(errno, NEO4J_INVALID_MAP_KEY_TYPE);
}
END_TEST

作为第三个参数传递给neo4j_run的映射是查询的参数。构造映射需要一个包含条目及其长度的数组。如果它只是一个单条目映射,你可以传递一个指向单个neo4j_map_entry_t的指针。例如:

const char *q = "MATCH (p:Person) WHERE p.age > {age} RETURN p.name AS name, p.age as AGE";
neo4j_map_entry_t map_entry = neo4j_map_entry("age", 28);
neo4j_value_t params = neo4j_map(&map_entry, 1);
neo4j_run(session, q, params);

如果有多个参数,则构建一个map条目数组,例如:

const char *q = "MATCH (p:Person) WHERE {min_age} < p.age < {max_age} RETURN p.name AS name, p.age as AGE";
neo4j_map_entry_t map_entries[2];
map_entries[0] = neo4j_map_entry("min_age", 28);
map_entries[1] = neo4j_map_entry("max_age", 30);
neo4j_value_t params = neo4j_map(map_entries, 2);
neo4j_run(session, q, params);

您还可以使用初始化器构建map_entry_t,就像您复制的示例测试一样。但通常使用neo4j_map_entry构造函数更清晰。