Повторите результаты в neo4j_client для C

#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, которая вернет дублированные имена столбцов. Таким образом, вы вряд ли столкнетесь с этим на практике, и вы, вероятно, могли бы создать функцию-оболочку довольно безопасно.