Skip to content

Commit 81ebf66

Browse files
authored
CXX-1643 Replace mongoc_uri_new for better exception message (#720)
1 parent da9ba45 commit 81ebf66

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

src/mongocxx/private/libmongoc_symbols.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ MONGOCXX_LIBMONGOC_SYMBOL(uri_get_tls)
308308
MONGOCXX_LIBMONGOC_SYMBOL(uri_get_string)
309309
MONGOCXX_LIBMONGOC_SYMBOL(uri_get_username)
310310
MONGOCXX_LIBMONGOC_SYMBOL(uri_get_write_concern)
311-
MONGOCXX_LIBMONGOC_SYMBOL(uri_new)
311+
MONGOCXX_LIBMONGOC_SYMBOL(uri_new_with_error)
312312
MONGOCXX_LIBMONGOC_SYMBOL(write_concern_copy)
313313
MONGOCXX_LIBMONGOC_SYMBOL(write_concern_destroy)
314314
MONGOCXX_LIBMONGOC_SYMBOL(write_concern_get_journal)

src/mongocxx/test/uri.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ TEST_CASE("URI", "[uri]") {
7171
mongocxx::uri{invalid};
7272
} catch (const mongocxx::logic_error& e) {
7373
REQUIRE(e.code() == mongocxx::error_code::k_invalid_uri);
74+
75+
std::string invalid_schema =
76+
"Invalid URI Schema, expecting 'mongodb://' or 'mongodb+srv://': ";
77+
78+
REQUIRE(e.what() == invalid_schema + e.code().message());
7479
}
7580
}
7681

src/mongocxx/uri.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,14 @@ uri::uri(std::unique_ptr<impl>&& implementation) {
4848
_impl.reset(implementation.release());
4949
}
5050

51-
uri::uri(bsoncxx::string::view_or_value uri_string)
52-
: _impl(stdx::make_unique<impl>(libmongoc::uri_new(uri_string.terminated().data()))) {
51+
uri::uri(bsoncxx::string::view_or_value uri_string) {
52+
bson_error_t error;
53+
54+
_impl = stdx::make_unique<impl>(
55+
libmongoc::uri_new_with_error(uri_string.terminated().data(), &error));
56+
5357
if (_impl->uri_t == nullptr) {
54-
throw logic_error{error_code::k_invalid_uri};
58+
throw logic_error{error_code::k_invalid_uri, error.message};
5559
}
5660
}
5761

0 commit comments

Comments
 (0)