C++ 中的准备语句 libneo4j_client?
Prepared statements in C++ libneo4j_client?
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) 指示查询中的字段?
更新:对于第一部分,this test 展示了如何构建地图。为清晰起见,复制于此:
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);
如果有多个参数,构建一个映射条目数组,例如:
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
构造函数更清楚。
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) 指示查询中的字段?
更新:对于第一部分,this test 展示了如何构建地图。为清晰起见,复制于此:
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);
如果有多个参数,构建一个映射条目数组,例如:
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
构造函数更清楚。