diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index cf702bf..28e3a26 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -43,7 +43,6 @@ jobs: check-linux: - if: ${{ false }} # Tests appear to be currently broken on Linux. runs-on: ubuntu-latest steps: diff --git a/configure.ac b/configure.ac index 5606007..e1ecf3c 100644 --- a/configure.ac +++ b/configure.ac @@ -14,7 +14,7 @@ # dnl Process this file with autoconf to produce a configure script AC_PREREQ([2.69]) -AC_INIT([libneo4j-client],[5.0.6]) +AC_INIT([libneo4j-client],[5.0.7]) AC_CONFIG_SRCDIR([lib/src/neo4j-client.h.in]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIRS([build-aux/m4]) diff --git a/lib/src/neo4j-client.h.in b/lib/src/neo4j-client.h.in index 4a5615d..f9cf571 100644 --- a/lib/src/neo4j-client.h.in +++ b/lib/src/neo4j-client.h.in @@ -692,7 +692,8 @@ char *neo4j_tostring(neo4j_value_t value, char *strbuf, size_t n); * ensuring it is always `NULL` terminated. * * @param [value] The neo4j value. - * @param [strbuf] A buffer to write the string representation into. + * @param [strbuf] A buffer to write the string representation into, or + `NULL` if no string representation should be written. * @param [n] The length of the buffer. * @return The number of bytes that would have been written into the buffer * had the buffer been large enough, or -1 on error (errno will be set). diff --git a/lib/src/print.c b/lib/src/print.c index a9f7af6..f1f1443 100644 --- a/lib/src/print.c +++ b/lib/src/print.c @@ -1080,7 +1080,14 @@ ssize_t neo4j_date_str(const neo4j_value_t *value, char *buf, size_t n) if (localtime_r(&ntmt, &bdt) == NULL) { return -1; } - size_t l = strftime(buf, n, "%Y-%m-%d", &bdt); + size_t l; + if (buf != NULL) { + l = strftime(buf, n, "%Y-%m-%d", &bdt); + } + else { + char buf1[1]; + l = strftime(buf1, sizeof(buf1), "%Y-%m-%d", &bdt); + } if (l==0) { l = 10; } @@ -1094,12 +1101,13 @@ ssize_t neo4j_date_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_date_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_DATE); char buf[BUFLEN]; if (neo4j_date_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* time : prints time of day and UTC offset string, with time_t value in parens; @@ -1118,7 +1126,14 @@ ssize_t neo4j_time_str(const neo4j_value_t *value, char *buf, size_t n) free(ntsp); return -1; } - size_t l = strftime(buf, n, "%T", &bdt); + size_t l; + if (buf != NULL) { + l = strftime(buf, n, "%T", &bdt); + } + else { + char buf1[1]; + l = strftime(buf1, sizeof(buf1), "%T", &bdt); + } if (l==0) { l = 8; } @@ -1138,12 +1153,13 @@ ssize_t neo4j_time_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_time_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_TIME); char buf[BUFLEN]; if (neo4j_time_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* localtime */ @@ -1160,7 +1176,14 @@ ssize_t neo4j_localtime_str(const neo4j_value_t *value, char *buf, size_t n) free(ntsp); return -1; } - size_t l = strftime(buf, n, "%T", &bdt); + size_t l; + if (buf != NULL) { + l = strftime(buf, n, "%T", &bdt); + } + else { + char buf1[1]; + l = strftime(buf1, sizeof(buf1), "%T", &bdt); + } if (l<=0) { l = 8; } @@ -1179,12 +1202,13 @@ ssize_t neo4j_localtime_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_localtime_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_LOCALTIME); char buf[BUFLEN]; if (neo4j_localtime_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* datetime */ @@ -1203,7 +1227,14 @@ ssize_t neo4j_datetime_str(const neo4j_value_t *value, char *buf, size_t n) free(ntsp); return -1; } - size_t l = strftime(buf, n, "%FT%T", &bdt); + size_t l; + if (buf != NULL) { + l = strftime(buf, n, "%FT%T", &bdt); + } + else { + char buf1[1]; + l = strftime(buf1, sizeof(buf1), "%FT%T", &bdt); + } if (l<=0) { l = 19; } @@ -1223,12 +1254,13 @@ ssize_t neo4j_datetime_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_datetime_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_DATETIME); char buf[BUFLEN]; if (neo4j_datetime_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* localdatetime */ @@ -1245,7 +1277,14 @@ ssize_t neo4j_localdatetime_str(const neo4j_value_t *value, char *buf, size_t n) free(ntsp); return -1; } - size_t l = strftime(buf, n, "%FT%T", &bdt); + size_t l; + if (buf != NULL) { + l = strftime(buf, n, "%FT%T", &bdt); + } + else { + char buf1[1]; + l = strftime(buf1, sizeof(buf1), "%FT%T", &bdt); + } if (l<=0) { l = 19; } @@ -1264,12 +1303,13 @@ ssize_t neo4j_localdatetime_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_localdatetime_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_LOCALDATETIME); char buf[BUFLEN]; if (neo4j_localdatetime_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* duration */ @@ -1357,12 +1397,13 @@ ssize_t neo4j_duration_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_duration_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_DURATION); char buf[BUFLEN]; if (neo4j_duration_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* point2d */ @@ -1397,12 +1438,13 @@ ssize_t neo4j_point2d_str(const neo4j_value_t *value, char *buf, size_t n) ssize_t neo4j_point2d_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_POINT2D); char buf[BUFLEN]; if (neo4j_point2d_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } /* point3d */ @@ -1437,10 +1479,11 @@ ssize_t neo4j_point3d_str(const neo4j_value_t *value, char *buf, size_t n) } ssize_t neo4j_point3d_fprint(const neo4j_value_t *value, FILE *stream) { + REQUIRE(value != NULL, -1); assert(neo4j_type(*value) == NEO4J_POINT3D); char buf[BUFLEN]; if (neo4j_point3d_str(value, buf, BUFLEN-1) < 0) { return -1; } - return fputs( (const char *)buf, stream ); + return fprintf( stream, "%s", (const char *)buf ); } diff --git a/lib/src/values.c b/lib/src/values.c index a9cb706..233bf83 100644 --- a/lib/src/values.c +++ b/lib/src/values.c @@ -801,9 +801,9 @@ neo4j_value_t neo4j_node(const neo4j_value_t fields[4]) { if (neo4j_type(fields[0]) != NEO4J_IDENTITY || neo4j_type(fields[1]) != NEO4J_LIST || - neo4j_type(fields[2]) != NEO4J_MAP -// || neo4j_type(fields[3]) != NEO4J_ELEMENTID - ) + neo4j_type(fields[2]) != NEO4J_MAP || + neo4j_type(fields[3]) != NEO4J_ELEMENTID + ) { errno = EINVAL; return neo4j_null; @@ -875,11 +875,11 @@ neo4j_value_t neo4j_relationship(const neo4j_value_t fields[8]) (neo4j_type(fields[2]) != NEO4J_IDENTITY && !neo4j_is_null(fields[1])) || neo4j_type(fields[3]) != NEO4J_STRING || - neo4j_type(fields[4]) != NEO4J_MAP -// || neo4j_type(fields[5]) != NEO4J_ELEMENTID || -// neo4j_type(fields[6]) != NEO4J_ELEMENTID || -// neo4j_type(fields[7]) != NEO4J_ELEMENTID - ) + neo4j_type(fields[4]) != NEO4J_MAP || + neo4j_type(fields[5]) != NEO4J_ELEMENTID || + neo4j_type(fields[6]) != NEO4J_ELEMENTID || + neo4j_type(fields[7]) != NEO4J_ELEMENTID + ) { errno = EINVAL; return neo4j_null; @@ -897,9 +897,9 @@ neo4j_value_t neo4j_unbound_relationship(const neo4j_value_t fields[4]) { if (neo4j_type(fields[0]) != NEO4J_IDENTITY || neo4j_type(fields[1]) != NEO4J_STRING || - neo4j_type(fields[2]) != NEO4J_MAP -// // neo4j_type(fields[3]) != NEO4J_ELEMENTID - ) + neo4j_type(fields[2]) != NEO4J_MAP || + neo4j_type(fields[3]) != NEO4J_ELEMENTID + ) { errno = EINVAL; return neo4j_null; diff --git a/lib/test/check_result_stream.c b/lib/test/check_result_stream.c index 61f4184..03d3911 100644 --- a/lib/test/check_result_stream.c +++ b/lib/test/check_result_stream.c @@ -50,8 +50,8 @@ static neo4j_iostream_t *client_ios; static neo4j_iostream_t *server_ios; static struct neo4j_connection_factory stub_factory; static neo4j_config_t *config; -neo4j_mpool_t mpool; -neo4j_connection_t *connection; +static neo4j_mpool_t mpool; +static neo4j_connection_t *connection; static void setup(void) diff --git a/lib/test/check_transaction.c b/lib/test/check_transaction.c index 76aa1ea..e09779a 100644 --- a/lib/test/check_transaction.c +++ b/lib/test/check_transaction.c @@ -53,8 +53,8 @@ static neo4j_iostream_t *client_ios; static neo4j_iostream_t *server_ios; static struct neo4j_connection_factory stub_factory; static neo4j_config_t *config; -neo4j_mpool_t mpool; -neo4j_connection_t *connection; +static neo4j_mpool_t mpool; +static neo4j_connection_t *connection; static void setup(void) diff --git a/lib/test/check_values.c b/lib/test/check_values.c index 45a8745..e7c415f 100644 --- a/lib/test/check_values.c +++ b/lib/test/check_values.c @@ -486,11 +486,13 @@ START_TEST (node_value) { .key = neo4j_string("sanders"), .value = neo4j_int(2) } }; neo4j_value_t field_values[] = - { neo4j_identity(1), neo4j_list(labels, 2), neo4j_map(props, 2) }; + { neo4j_identity(1), neo4j_list(labels, 2), neo4j_map(props, 2), + neo4j_elementid("I-VT") }; neo4j_value_t value = neo4j_node(field_values); ck_assert(neo4j_type(value) == NEO4J_NODE); ck_assert(neo4j_eq(neo4j_node_identity(value), neo4j_identity(1))); + ck_assert(neo4j_eq(neo4j_node_elementid(value), neo4j_elementid("I-VT"))); char *str = neo4j_tostring(value, buf, sizeof(buf)); ck_assert(str == buf); @@ -517,7 +519,8 @@ START_TEST (invalid_node_label_value) { .key = neo4j_string("sanders"), .value = neo4j_int(2) } }; neo4j_value_t field_values[] = - { neo4j_identity(1), neo4j_list(labels, 2), neo4j_map(props, 2) }; + { neo4j_identity(1), neo4j_list(labels, 2), neo4j_map(props, 2), + neo4j_elementid("I-VT") }; neo4j_value_t value = neo4j_node(field_values); ck_assert(neo4j_is_null(value)); ck_assert_int_eq(errno, NEO4J_INVALID_LABEL_TYPE); @@ -575,7 +578,8 @@ START_TEST (unbound_relationship_value) { { .key = neo4j_string("year"), .value = neo4j_int(2016) } }; neo4j_value_t field_values[] = - { neo4j_identity(1), type, neo4j_map(props, 1) }; + { neo4j_identity(1), type, neo4j_map(props, 1), + neo4j_elementid("A Future To Believe In") }; neo4j_value_t value = neo4j_unbound_relationship(field_values); ck_assert(neo4j_type(value) == NEO4J_RELATIONSHIP); @@ -583,6 +587,8 @@ START_TEST (unbound_relationship_value) neo4j_identity(1))); ck_assert(neo4j_is_null(neo4j_relationship_start_node_identity(value))); ck_assert(neo4j_is_null(neo4j_relationship_end_node_identity(value))); + ck_assert(neo4j_eq(neo4j_relationship_elementid(value), + neo4j_elementid("A Future To Believe In"))); char *str = neo4j_tostring(value, buf, sizeof(buf)); ck_assert(str == buf); @@ -673,21 +679,25 @@ START_TEST (invalid_path_node_value) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, neo4j_bool(true), node3 }; @@ -712,20 +722,24 @@ START_TEST (invalid_path_relationship_value) neo4j_value_t rel1_type = neo4j_string("Senator"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -751,25 +765,30 @@ START_TEST (invalid_path_seq_length) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -795,25 +814,30 @@ START_TEST (invalid_path_seq_rel_index_type) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -839,25 +863,30 @@ START_TEST (invalid_path_seq_node_index_type) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -883,25 +912,30 @@ START_TEST (invalid_path_seq_rel_index_range) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -927,25 +961,30 @@ START_TEST (invalid_path_seq_rel_zero_index_range) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 }; @@ -971,25 +1010,30 @@ START_TEST (invalid_path_seq_rel_neg_index_range) neo4j_value_t rel2_type = neo4j_string("Candidate"); neo4j_value_t node1_fields[] = - { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(1), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("1") }; neo4j_value_t node1 = neo4j_node(node1_fields); neo4j_value_t rel1_fields[] = { neo4j_identity(8), neo4j_identity(2), neo4j_identity(1), - rel1_type, neo4j_map(NULL, 0) }; + rel1_type, neo4j_map(NULL, 0), + neo4j_elementid("8"), neo4j_elementid("2"), neo4j_elementid("1") }; neo4j_value_t rel1 = neo4j_relationship(rel1_fields); neo4j_value_t node2_fields[] = - { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(2), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("2") }; neo4j_value_t node2 = neo4j_node(node2_fields); neo4j_value_t rel2_fields[] = { neo4j_identity(9), neo4j_identity(2), neo4j_identity(3), - rel2_type, neo4j_map(NULL, 0) }; + rel2_type, neo4j_map(NULL, 0), + neo4j_elementid("9"), neo4j_elementid("2"), neo4j_elementid("3") }; neo4j_value_t rel2 = neo4j_relationship(rel2_fields); neo4j_value_t node3_fields[] = - { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0) }; + { neo4j_identity(3), neo4j_list(NULL, 0), neo4j_map(NULL, 0), + neo4j_elementid("3") }; neo4j_value_t node3 = neo4j_node(node3_fields); neo4j_value_t path_nodes[] = { node1, node2, node3 };