From f3e3fda9c1d40ac837e7d0125ee6cb471762bc52 Mon Sep 17 00:00:00 2001 From: jmatak Date: Wed, 24 Aug 2022 17:11:36 +0200 Subject: [PATCH 1/3] Update compatibility with Bolt protocol --- src/mgclient.c | 26 +++++++++++++++++++++++--- src/mgvalue.c | 2 ++ src/mgvalue.h | 2 ++ tests/client.cpp | 15 ++++++++------- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/mgclient.c b/src/mgclient.c index 6e8c721..c13e055 100644 --- a/src/mgclient.c +++ b/src/mgclient.c @@ -31,7 +31,27 @@ const char *mg_client_version() { return MGCLIENT_VERSION; } -int mg_init() { return mg_socket_init(); } +int mg_init_session_static_vars() { + mg_default_pull_extra_map = mg_map_make_empty(1); + if (!mg_default_pull_extra_map) { + goto fatal_failure; + } + mg_value *n_val = mg_value_make_integer(-1); + if (mg_map_insert_unsafe(mg_default_pull_extra_map, "n", n_val) != 0) { + mg_value_destroy(n_val); + goto fatal_failure; + } + return MG_SUCCESS; + +fatal_failure: + return MG_ERROR_CLIENT_ERROR; +} + +int mg_init() { + int init_status = mg_init_session_static_vars(); + if (init_status != 0) return init_status; + return mg_socket_init(); +} void mg_finalize() { mg_socket_finalize(); } @@ -796,7 +816,7 @@ int mg_session_pull(mg_session *session, const mg_map *pull_information) { int status = 0; if (session->version == 4 && !pull_information) { - pull_information = &mg_empty_map; + pull_information = mg_default_pull_extra_map; } status = mg_session_send_pull_message(session, pull_information); @@ -1088,4 +1108,4 @@ const mg_map *mg_result_summary(const mg_result *result) { return NULL; } return result->message->success_v->metadata; -} +} \ No newline at end of file diff --git a/src/mgvalue.c b/src/mgvalue.c index 4f6766c..54002f4 100644 --- a/src/mgvalue.c +++ b/src/mgvalue.c @@ -1871,4 +1871,6 @@ int mg_value_equal(const mg_value *lhs, const mg_value *rhs) { return 0; } +mg_map *mg_default_pull_extra_map; + mg_map mg_empty_map = {0, 0, NULL, NULL}; diff --git a/src/mgvalue.h b/src/mgvalue.h index 17e590f..6eb8245 100644 --- a/src/mgvalue.h +++ b/src/mgvalue.h @@ -291,6 +291,8 @@ int mg_path_equal(const mg_path *lhs, const mg_path *rhs); int mg_value_equal(const mg_value *lhs, const mg_value *rhs); +extern mg_map *mg_default_pull_extra_map; + extern mg_map mg_empty_map; #ifdef __cplusplus diff --git a/tests/client.cpp b/tests/client.cpp index 50e15b8..59c3839 100644 --- a/tests/client.cpp +++ b/tests/client.cpp @@ -689,6 +689,7 @@ class RunTest : public ::testing::Test { sc = tmp[0]; ss = tmp[1]; + mg_init(); session = mg_session_init((mg_allocator *)&allocator); mg_raw_transport_init(sc, (mg_raw_transport **)&session->transport, (mg_allocator *)&allocator); @@ -925,7 +926,7 @@ void RunTest::OkNoResults(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1016,7 +1017,7 @@ void RunTest::MultipleQueries(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1132,7 +1133,7 @@ void RunTest::OkWithResults(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1252,7 +1253,7 @@ void RunTest::QueryRuntimeError(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1363,7 +1364,7 @@ void RunTest::QueryDatabaseError(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1454,7 +1455,7 @@ void RunTest::RunWithParams(int version) { if (version == 4) { mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); } mg_message_destroy_ca(message, session->decoder_allocator); } @@ -1759,7 +1760,7 @@ TEST_F(RunTest, TransactionBasic) { ASSERT_EQ(message->type, MG_MESSAGE_TYPE_PULL); mg_message_pull *pull_message = message->pull_v; ASSERT_TRUE(pull_message->extra); - ASSERT_EQ(mg_map_size(pull_message->extra), 0u); + ASSERT_EQ(mg_map_size(pull_message->extra), 1u); mg_message_destroy_ca(message, session->decoder_allocator); } From 62ae5fd0951d8e8532b6836d95a0ceaf24f79b34 Mon Sep 17 00:00:00 2001 From: jmatak Date: Wed, 24 Aug 2022 17:24:58 +0200 Subject: [PATCH 2/3] Add new line --- src/mgclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mgclient.c b/src/mgclient.c index c13e055..43b4762 100644 --- a/src/mgclient.c +++ b/src/mgclient.c @@ -1108,4 +1108,4 @@ const mg_map *mg_result_summary(const mg_result *result) { return NULL; } return result->message->success_v->metadata; -} \ No newline at end of file +} From 5dc072aa2556d2c2598aa5264ab0b7a088175211 Mon Sep 17 00:00:00 2001 From: Marko Budiselic Date: Sun, 26 Feb 2023 14:15:36 +0000 Subject: [PATCH 3/3] Destroy both value and map if something fails --- src/mgclient.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mgclient.c b/src/mgclient.c index 43b4762..df661f7 100644 --- a/src/mgclient.c +++ b/src/mgclient.c @@ -32,18 +32,26 @@ const char *mg_client_version() { return MGCLIENT_VERSION; } int mg_init_session_static_vars() { + mg_value *n_val = mg_value_make_integer(-1); + if (!n_val) { + goto fatal_failure; + } mg_default_pull_extra_map = mg_map_make_empty(1); if (!mg_default_pull_extra_map) { goto fatal_failure; } - mg_value *n_val = mg_value_make_integer(-1); if (mg_map_insert_unsafe(mg_default_pull_extra_map, "n", n_val) != 0) { - mg_value_destroy(n_val); goto fatal_failure; } return MG_SUCCESS; fatal_failure: + if (n_val) { + mg_value_destroy(n_val); + } + if (mg_default_pull_extra_map) { + mg_map_destroy(mg_default_pull_extra_map); + } return MG_ERROR_CLIENT_ERROR; }