#c #libneo4j-client
#c #libneo4j-client
Вопрос:
Я ищу примеры использования neo4j_client в C . В наборе тестов я вижу neo4j_result_t , но нет примера повторения или вызова полей по имени. Возможно ли это?
Ответ №1:
Результаты возвращаются в виде neo4j_result_stream_t
, который представляет собой поток строк результатов. Количество столбцов в результате доступно через neo4j_nfields
, а их имена через neo4j_fieldname
, оба из которых принимают neo4j_result_stream_t
указатель в качестве параметра.
Для перебора строк результатов используйте, neo4j_fetch_next
который возвращает neo4j_result_t
. И чтобы извлечь значения для каждого столбца из строки (полей), передайте указатель на neo4j_result_field
(вместе с индексом столбца).
Примером может быть что-то вроде этого:
neo4j_result_stream_t *results =
neo4j_run(session, "MATCH (n) RETURN n.name, n.age", neo4j_null);
if (results == NULL)
{
neo4j_perror(stderr, errno, "Failed to run statement");
return EXIT_FAILURE;
}
int ncolumns = neo4j_nfields(results);
if (ncolumns < 0)
{
neo4j_perror(stderr, errno, "Failed to retrieve results");
return EXIT_FAILURE;
}
neo4j_result_t *resu<
while ((result = neo4j_fetch_next(results)) != NULL)
{
unsigned int i;
for (i = 0; i < ncolumns; i)
{
if (i > 0)
{
printf(", ");
}
neo4j_value_t value = neo4j_result_field(result, i);
neo4j_fprint(value, stdout);
}
printf("n");
}
Комментарии:
1. Большое спасибо и продолжение: можете ли вы вызвать поле по имени? нравится
neo4j_result_field(result, "age")
? Менее разумно: как мне вернуть возраст в качествеint
? Я видел вашstring
пример.2. К сожалению, нет. Протокол Bolt не дает гарантии, что каждый столбец в результате имеет уникальное имя, поэтому такой вызов может вернуть неоднозначный результат.
3. Тем не менее, я проверил, и Neo4j откажется запускать команду Cypher, которая вернет дублированные имена столбцов. Таким образом, вы вряд ли столкнетесь с этим на практике, и вы, вероятно, могли бы создать функцию-оболочку довольно безопасно.