Skip to content

Commit d2cc0bc

Browse files
author
Christian Hergert
committed
gridfs: add mongoc_gridfs_file_remove() helper.
1 parent 210ea55 commit d2cc0bc

File tree

6 files changed

+93
-0
lines changed

6 files changed

+93
-0
lines changed

build/cmake/libmongoc-ssl.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ mongoc_gridfs_file_list_destroy
103103
mongoc_gridfs_file_list_error
104104
mongoc_gridfs_file_list_next
105105
mongoc_gridfs_file_readv
106+
mongoc_gridfs_file_remove
106107
mongoc_gridfs_file_save
107108
mongoc_gridfs_file_seek
108109
mongoc_gridfs_file_set_aliases

build/cmake/libmongoc.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ mongoc_gridfs_file_list_destroy
104104
mongoc_gridfs_file_list_error
105105
mongoc_gridfs_file_list_next
106106
mongoc_gridfs_file_readv
107+
mongoc_gridfs_file_remove
107108
mongoc_gridfs_file_save
108109
mongoc_gridfs_file_seek
109110
mongoc_gridfs_file_set_aliases

src/libmongoc.symbols

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ mongoc_gridfs_file_list_destroy
104104
mongoc_gridfs_file_list_error
105105
mongoc_gridfs_file_list_next
106106
mongoc_gridfs_file_readv
107+
mongoc_gridfs_file_remove
107108
mongoc_gridfs_file_save
108109
mongoc_gridfs_file_seek
109110
mongoc_gridfs_file_set_aliases

src/mongoc/mongoc-gridfs-file.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,17 +771,61 @@ mongoc_gridfs_file_error (mongoc_gridfs_file_t *file,
771771
int64_t
772772
mongoc_gridfs_file_get_length (mongoc_gridfs_file_t *file)
773773
{
774+
bson_return_val_if_fail (file, -1);
775+
774776
return file->length;
775777
}
776778

777779
int32_t
778780
mongoc_gridfs_file_get_chunk_size (mongoc_gridfs_file_t *file)
779781
{
782+
bson_return_val_if_fail (file, -1);
783+
780784
return file->chunk_size;
781785
}
782786

783787
int64_t
784788
mongoc_gridfs_file_get_upload_date (mongoc_gridfs_file_t *file)
785789
{
790+
bson_return_val_if_fail (file, -1);
791+
786792
return file->upload_date;
787793
}
794+
795+
bool
796+
mongoc_gridfs_file_remove (mongoc_gridfs_file_t *file,
797+
bson_error_t *error)
798+
{
799+
bson_t sel = BSON_INITIALIZER;
800+
bool ret = false;
801+
802+
bson_return_val_if_fail (file, false);
803+
804+
BSON_APPEND_VALUE (&sel, "_id", &file->files_id);
805+
806+
if (!mongoc_collection_remove (file->gridfs->files,
807+
MONGOC_REMOVE_SINGLE_REMOVE,
808+
&sel,
809+
NULL,
810+
error)) {
811+
goto cleanup;
812+
}
813+
814+
bson_reinit (&sel);
815+
BSON_APPEND_VALUE (&sel, "files_id", &file->files_id);
816+
817+
if (!mongoc_collection_remove (file->gridfs->chunks,
818+
MONGOC_REMOVE_NONE,
819+
&sel,
820+
NULL,
821+
error)) {
822+
goto cleanup;
823+
}
824+
825+
ret = true;
826+
827+
cleanup:
828+
bson_destroy (&sel);
829+
830+
return ret;
831+
}

src/mongoc/mongoc-gridfs-file.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ bool mongoc_gridfs_file_save (mongoc_gridfs_file_t *file);
8989
void mongoc_gridfs_file_destroy (mongoc_gridfs_file_t *file);
9090
bool mongoc_gridfs_file_error (mongoc_gridfs_file_t *file,
9191
bson_error_t *error);
92+
bool mongoc_gridfs_file_remove (mongoc_gridfs_file_t *file,
93+
bson_error_t *error);
9294

9395

9496
BSON_END_DECLS

tests/test-mongoc-gridfs.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,49 @@ test_create (void)
6666
}
6767

6868

69+
static void
70+
test_remove (void)
71+
{
72+
mongoc_gridfs_t *gridfs;
73+
mongoc_gridfs_file_t *file;
74+
mongoc_gridfs_file_opt_t opts = { 0 };
75+
mongoc_client_t *client;
76+
bson_error_t error;
77+
bool r;
78+
char name[32];
79+
80+
client = mongoc_client_new (gTestUri);
81+
assert (client);
82+
83+
gridfs = mongoc_client_get_gridfs (client, "test", "foo", &error);
84+
assert (gridfs);
85+
86+
mongoc_gridfs_drop (gridfs, &error);
87+
88+
89+
bson_snprintf (name, sizeof name, "test-remove.%u", rand ());
90+
opts.filename = name;
91+
92+
file = mongoc_gridfs_create_file (gridfs, &opts);
93+
assert (file);
94+
assert (mongoc_gridfs_file_save (file));
95+
96+
r = mongoc_gridfs_file_remove (file, &error);
97+
if (!r) fprintf (stderr, "%s\n", error.message);
98+
assert (r);
99+
100+
mongoc_gridfs_file_destroy (file);
101+
102+
file = mongoc_gridfs_find_one_by_filename (gridfs, name, &error);
103+
assert (!file);
104+
105+
drop_collections (gridfs, &error);
106+
mongoc_gridfs_destroy (gridfs);
107+
108+
mongoc_client_destroy (client);
109+
}
110+
111+
69112
static void
70113
test_list (void)
71114
{
@@ -388,6 +431,7 @@ test_gridfs_install (TestSuite *suite)
388431
TestSuite_Add (suite, "/GridFS/list", test_list);
389432
TestSuite_Add (suite, "/GridFS/read", test_read);
390433
TestSuite_Add (suite, "/GridFS/stream", test_stream);
434+
TestSuite_Add (suite, "/GridFS/remove", test_remove);
391435
TestSuite_Add (suite, "/GridFS/write", test_write);
392436
TestSuite_Add (suite, "/GridFS/remove_by_filename", test_remove_by_filename);
393437

0 commit comments

Comments
 (0)