Клиент libneo4j — Подготовленные операторы в C ++ libneo4j_client?

neo4j_run API позволяет ввести карту, но я не знаю синтаксис запроса. В питоне это просто {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)

Как я должен (а) построить my_map и (б) указать поля в запросе?

ОБНОВЛЕНИЕ: Для первой части, этот тест показывает, как построить карту. Скопировано здесь для наглядности:

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

1

Решение

Карта передана в качестве третьего аргумента 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 конструктор.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]