Skip to content

Commit 4c52f54

Browse files
author
Tess Avitabile
committed
CXX-802 - coll.drop() no longer throws if collection doesn't exist
1 parent 9056f12 commit 4c52f54

File tree

5 files changed

+13
-30
lines changed

5 files changed

+13
-30
lines changed

examples/mongocxx/bulk_write.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,8 @@ using bsoncxx::builder::stream::open_document;
2929
int main(int, char**) {
3030
mongocxx::instance inst{};
3131
mongocxx::client conn{mongocxx::uri{}};
32-
33-
auto db = conn["test"];
34-
35-
// Ensure collection is empty.
36-
if (db.has_collection("coll")) {
37-
db["coll"].drop();
38-
}
39-
40-
auto coll = db["coll"];
32+
auto coll = conn["test"]["coll"];
33+
coll.drop();
4134

4235
// @begin: cpp-bulk-write
4336
auto doc1 = document{} << "a" << 1 << finalize;

src/mongocxx/collection.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ void collection::drop() {
735735

736736
auto result = libmongoc::collection_drop(_get_impl().collection_t, &error);
737737

738-
if (!result) {
738+
if (!result && (error.code != ::MONGOC_ERROR_COLLECTION_DOES_NOT_EXIST)) {
739739
throw_exception<operation_exception>(error);
740740
}
741741
}

src/mongocxx/exception/private/error_category.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ class mongoc_query_error_category final : public std::error_category {
252252
return "mongoc query_failure error";
253253
case ::MONGOC_ERROR_QUERY_NOT_TAILABLE:
254254
return "mongoc query_not_tailable error";
255+
case ::MONGOC_ERROR_COLLECTION_DOES_NOT_EXIST:
256+
return "mongoc collection_does_not_exist error";
255257
default:
256258
return "unknown mongoc query error";
257259
}

src/mongocxx/test/collection.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ TEST_CASE("CRUD functionality", "[driver::collection]") {
7373
database db = mongodb_client["test"];
7474
collection coll = db["mongo_cxx_driver"];
7575

76-
if (db.has_collection("mongo_cxx_driver")) coll.drop();
76+
coll.drop();
7777

7878
SECTION("insert and read single document", "[collection]") {
7979
auto b = document{} << "_id" << bsoncxx::oid{bsoncxx::oid::init_tag} << "x" << 1
@@ -526,9 +526,8 @@ TEST_CASE("CRUD functionality", "[driver::collection]") {
526526
SECTION("distinct works", "[collection]") {
527527
auto distinct_cname = "distinct_coll";
528528
auto distinct_coll = db[distinct_cname];
529-
if (db.has_collection(distinct_cname)) {
530-
distinct_coll.drop();
531-
}
529+
distinct_coll.drop();
530+
532531
auto doc1 = document{} << "foo"
533532
<< "baz"
534533
<< "garply" << 1 << finalize;

src/mongocxx/test/database.cpp

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,6 @@ using bsoncxx::builder::stream::document;
3232
using bsoncxx::builder::stream::finalize;
3333
using bsoncxx::builder::stream::open_document;
3434

35-
namespace {
36-
37-
// Clean up the given collection if it exists
38-
void clear_collection(const database& database, bsoncxx::stdx::string_view collection_name) {
39-
if (database.has_collection(collection_name)) {
40-
database[collection_name].drop();
41-
}
42-
}
43-
44-
} // namespace
45-
4635
TEST_CASE("A default constructed database is false-ish", "[database]") {
4736
database d;
4837
REQUIRE(!d);
@@ -269,14 +258,14 @@ TEST_CASE("Database integration tests", "[database]") {
269258

270259
SECTION("A database may create a collection via create_collection") {
271260
SECTION("without any options") {
272-
clear_collection(database, collection_name);
261+
database[collection_name].drop();
273262

274263
collection obtained_collection = database.create_collection(collection_name);
275264
REQUIRE(obtained_collection.name() == collection_name);
276265
}
277266

278267
SECTION("with options") {
279-
clear_collection(database, collection_name);
268+
database[collection_name].drop();
280269

281270
options::create_collection opts;
282271
opts.capped(true);
@@ -289,14 +278,14 @@ TEST_CASE("Database integration tests", "[database]") {
289278
}
290279

291280
SECTION("but raises exception when collection already exists") {
292-
clear_collection(database, collection_name);
281+
database[collection_name].drop();
293282

294283
database.create_collection(collection_name);
295284

296285
REQUIRE_THROWS(database.create_collection(collection_name));
297286
}
298287

299-
clear_collection(database, collection_name);
288+
database[collection_name].drop();
300289
}
301290

302291
SECTION("A collection may be modified via modify_collection") {
@@ -322,7 +311,7 @@ TEST_CASE("Database integration tests", "[database]") {
322311
}
323312

324313
SECTION("A database may be dropped") {
325-
clear_collection(database, collection_name);
314+
database[collection_name].drop();
326315

327316
database.create_collection(collection_name);
328317
REQUIRE(database.has_collection(collection_name));

0 commit comments

Comments
 (0)