X-Git-Url: http://nitlanguage.org diff --git a/lib/mongodb/native_mongodb.nit b/lib/mongodb/native_mongodb.nit index 6d6f2fe..fb8b305 100644 --- a/lib/mongodb/native_mongodb.nit +++ b/lib/mongodb/native_mongodb.nit @@ -51,7 +51,7 @@ extern class NativeBSON `{ bson_t * `} new from_json_string(data: NativeString) import set_mongoc_error `{ bson_error_t error; bson_t *bson; - bson = bson_new_from_json(data, -1, &error); + bson = bson_new_from_json((uint8_t *)data, -1, &error); if(!bson) { NativeBSON_set_mongoc_error(bson, &error); return NULL; @@ -183,7 +183,7 @@ extern class NativeMongoClient `{ mongoc_client_t * `} import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{ bson_error_t error; char **strv; - if(strv = mongoc_client_get_database_names(self, &error)) { + if((strv = mongoc_client_get_database_names(self, &error))) { return NativeCStringArray_as_nullable(strv); } NativeMongoClient_set_mongoc_error(self, &error); @@ -230,7 +230,7 @@ extern class NativeMongoDb `{ mongoc_database_t * `} import set_mongoc_error, NativeCStringArray, NativeCStringArray.as nullable `{ bson_error_t error; char **strv; - if(strv = mongoc_database_get_collection_names(self, &error)) { + if((strv = mongoc_database_get_collection_names(self, &error))) { return NativeCStringArray_as_nullable(strv); } NativeMongoDb_set_mongoc_error(self, &error); @@ -421,17 +421,15 @@ extern class NativeMongoCollection `{ mongoc_collection_t * `} # # If you would like to specify options such as a sort order, # the query must be placed inside of `{"$query": {}}`. - fun find(query: NativeBSON): nullable NativeMongoCursor import + fun find(query: NativeBSON, skip, limit: Int): nullable NativeMongoCursor import NativeMongoCursor.as nullable, set_mongoc_error `{ bson_error_t error; mongoc_cursor_t *cursor; - cursor = mongoc_collection_find(self, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL); - + cursor = mongoc_collection_find(self, MONGOC_QUERY_NONE, skip, limit, 0, query, NULL, NULL); if (mongoc_cursor_error(cursor, &error)) { NativeMongoCollection_set_mongoc_error(self, &error); return null_NativeMongoCursor(); } - return NativeMongoCursor_as_nullable(cursor); `} @@ -508,7 +506,12 @@ extern class NativeMongoCursor `{ mongoc_cursor_t* `} # Wrapper for `mongoc_cursor_current()`. # # Fetches the cursors current document or NULL if there has been an error. - fun current: NativeBSON `{ return (bson_t*) mongoc_cursor_current(self); `} + fun current: NativeBSON `{ + // As said in documentation, BSON objects should not be freed manually. + bson_t* bson = (bson_t*) mongoc_cursor_current(self); + // Copy BSON so we can let the GC free it automatically. + return bson_copy(bson); + `} # Wrapper for `mongoc_cursor_next()`. # @@ -521,11 +524,6 @@ extern class NativeMongoCursor `{ mongoc_cursor_t* `} return mongoc_cursor_next(self, &doc); `} - # Wrapper for `mongoc_cursor_more()`. - # - # This function shall indicate if there is more data to be read from the cursor. - fun more: Bool `{ return mongoc_cursor_more(self); `} - # Wrapper for `mongoc_cursor_destroy()`. # # This instance should not be used beyond this point!