I'm pleased to announce version 1.5.0 of libbson and libmongoc, the libraries constituting the MongoDB C Driver.
libbson
New features and bug fixes:
- New BSON Type, Decimal128 (bson_decimal128_t) along with the following new functions and helpers:
- bson_decimal128_to_string()
- bson_decimal128_from_string()
- bson_iter_decimal128()
- bson_iter_overwrite_decimal128()
- BSON_ITER_HOLDS_DECIMAL128()
- bson_append_decimal128()
- BSON_APPEND_DECIMAL128()
- BCON_DECIMAL128() See the documentations for further details.
- bson_validate and bson_iter_next now validate that BSON boolean values are 0 or 1. Before, any non-zero value was considered true.
- bson_append_code_with_scope now preserves the "code with scope" type if scope is an empty, non-NULL BSON document.
- BSON "code" and "code with scope" types are properly translated to JSON of the form '{"$code": "...", "$scope": {...}}'.
- bson_json_reader functions now always validate UTF-8.
- JSON parsing now preserves integer width.
- bson_strtoll now matches stroll: it detects range errors, and when parsing octal it stops at non-octal digits and returns what it parsed instead of setting errno.
- New flag BSON_VALIDATE_EMPTY_KEYS causes bson_validate to fail if a document contains zero-length field names.
- The configure option "--enable-hardening" had had no effect. It is removed in favor of system-wide compiler configuration.
libmongoc
New features and bug fixes:
- MongoDB 3.4 Support
- New URI and read preference option, "maxStalenessSeconds"
- Set MongoDB client handshake data with mongoc_client_set_appname or mongoc_client_pool_set_appname.
- writeConcern and readConcern enhancements.
- Collation allows users to specify language-specific rules for string comparison when sorting documents. See the code examples for mongoc_client_read_command_with_opts, mongoc_collection_count_with_opts, mongoc_collection_find_with_opts, and mongoc_index_opt_t, as well as the "Setting Collation Order" section of the "Bulk Write Operations" guide.
- mongoc_collection_count_with_opts uses the collection's read preference if none is passed in
- Improved TLS support
- Fixed LibreSSL (libssl) support
- Added LibreSSL (libtls) support
- Fixed Secure Channel build on VS 2010
- OpenSSL now supports SNI (all others already do)
- Additional features for Application Performance Monitoring:
- mongoc_topology_description_has_writable_server
- mongoc_topology_description_has_readable_server
- Notifications when a server or topology description changes, and when a monitoring heartbeat begins and succeeds or fails.
- mongoc_client_set_apm_callbacks can be used repeatedly to change or clear the list of monitoring callbacks.
- New functions accept flexible options as a BSON document:
- mongoc_collection_find_with_opts
- mongoc_client_read_command_with_opts
- mongoc_client_write_command_with_opts
- mongoc_client_read_write_command_with_opts
- mongoc_database_read_command_with_opts
- mongoc_database_write_command_with_opts
- mongoc_database_read_write_command_with_opts
- mongoc_collection_read_command_with_opts
- mongoc_collection_write_command_with_opts
- mongoc_collection_read_write_command_with_opts
- mongoc_gridfs_find_with_opts
- mongoc_gridfs_find_one_with_opts
- mongoc_bulk_operation_remove_one_with_opts
- mongoc_bulk_operation_remove_many_with_opts
- mongoc_bulk_operation_replace_one_with_opts
- mongoc_bulk_operation_update_one_with_opts
- mongoc_bulk_operation_update_many_with_opts
- mongoc_collection_find is now deprecated in favor of mongoc_collection_find_with_opts.
- New helper function to include read concern in one of the above function's options parameter: mongoc_read_concern_append.
- mongoc_client_command no longer applies the client's read preference and read concern by default. Same change for mongoc_database_command and mongoc_collection_command.
- mongoc_collection_count_with_opts now applies the collection's read preference if no read preference is provided
- mongoc_collection_create_index and mongoc_collection_drop_index now apply the collection's write concern.
- mongoc_collection_create_index_with_opts now applies the collection's write concern if none is specified in "opts"
- connectTimeoutMS timer now begins after DNS resolution, and resets for each interface attempted (e.g., if the driver first tries IPv6, then IPv4).
- New error code MONGOC_ERROR_DUPLICATE_KEY.
- mongoc_collection_find no longer treats the "filter" key specially in queries - querying for a document with a key named "filter" is the same now as any other key.
- The server description parameter to the following functions is "const":
- mongoc_server_description_host
- mongoc_server_description_id
- mongoc_server_description_ismaster
- mongoc_server_description_round_trip_time
- mongoc_server_description_type
- Exported symbols are no longer declared in seperate export files. This could break ABI with applications using clang, which previously exported symbols from the internal private ABI.
- mongoc no longer crashes when multi roundtrip bulk operation fails.
- Added support for the new readConcernLevel "linearizable".
- Clients now check for misformatted "readPreferenceTags" in URI.
- New CMake option ENABLE_TRACING allows debug output, which before had only been available with "configure --enable-tracing".
- Bugfix: "PossiblePrimary"-type replicas could be selected for reads
- Bugfixes: The random number generator used to select servers is now properly seeded, and secondary queries are now properly distributed according to localThresholdMS, not just to the lowest-latency secondary. The latency estimate is reset after a connection error.
- Fix crashes in mongoc_topology_invalidate_server and mongoc_client_kill_cursor.
- mongoc_collection_insert, mongoc_collection_update, mongoc_collection_remove consistently use domain MONGOC_ERROR_BSON, code MONGOC_ERROR_BSON_INVALID if passed oversized BSON, and MONGOC_ERROR_COLLECTION for other errors. mongoc_bulk_operation_execute continues to use MONGOC_ERROR_COMMAND for all errors.
- If mongoc_client_pool_t fails to start its scanner thread in the background, it logs and aborts instead of silently continuing, then failing to connect.
- The driver now updates its view of the whole topology with information from each new connection handshake.
- Improved error reporting when the driver fails to reach the server, and correctly distinguish "connection error" and "connection timeout".
Deprecations:
- mongoc_collection_find is deprecated for mongoc_collection_find_with_opts.
Removed configure flags:
- --enable-experimental has been removed. All previously experimental features are now always on.
- The configure option "--enable-hardening" had had no effect. It is removed in favor of system-wide compiler configuration.
Links:
Thanks to everyone who contributed to this release.
- A. Jesse Jiryu Davis
- Hannes Magnusson
- Fiona Rowan
- Ian Boros
- Remi Collet
- Brian McCarthy
- Jeroen Ooms
- J. Rassi
- Christoph Schwarz
- Alexey Vorobeyev
- Brian Samek
Peace,
-- A. Jesse Jiryu Davis