The CMake configuration files were revised to work better when Connector/C++ is used as a subproject of application projects. Thanks to Lou Shuai for the contribution.
This revision does not change the fact that the intended (and supported) usage scenario is to build the connector in a separate project, install it somewhere and then use it in application projects from that installed location (for example, by defining the imported library target in CMake). (Bug #31095993, Bug #99093)
rapidjsonlibrary included with Connector/C++ has been upgraded to the GitHub snapshot of 16 January 2020.
For platforms on which OpenSSL libraries are bundled, the linked OpenSSL library for Connector/C++ has been updated to version 1.1.1g. Issues fixed in the new OpenSSL version are described at https://www.openssl.org/news/cl111.txt and https://www.openssl.org/news/vulnerabilities.html. (Bug #31296689)
For X DevAPI or X DevAPI for C applications, methods and functions that create or modify collections now accept options to enable validation of a JSON schema that documents must adhere to before they are permitted to be inserted or updated. Schema validation is performed by the server, which returns an error message if a document in a collection does not match the schema definition or if the server does not support validation.
These new classes are implemented to support validation options:
CollectionOptions: The base class that has all options. Contains an
Optionenumeration with constants
CollectionValidation: Handles only subkey validation. Contains a
Levelenumeration with constants
OFF, and an
Optionenumeration with constants
X DevAPI now has these signatures for
// Accepts the full document createCollection("name", "JSON_Document"); // DbDoc usage is also permitted createCollection("name", DbDoc("validation", DbDoc("level","off",...))); // List of pairs with Option enum constant and value createCollection(CollectionOptions::REUSE, true, CollectionOptions::VALIDATION, CollectionValidation(...)); // Old REUSE way is also acceptable createCollection("name", true); createCollection("name", CollectionValidation(...)); // createCollection also allows a list of pairs of // CollectionValidation Option enum constant and value createCollection("name", CollectionOptions::VALIDATION, CollectionValidation::OFF, CollectionValidation::SCHEMA, "Object");
X DevAPI for C examples:
These are the possible options for
OPT_COLLECTION_VALIDATION_LEVEL(VALIDATION_OFF) OPT_COLLECTION_VALIDATION_SCHEMA("Object") OPT_COLLECTION_REUSE(true)
Perform option operations like this:
mysqlx_collection_options_t *options = mysqlx_collection_options_new() //creates collection options object mysqlx_free(options) //frees collection options mysqlx_collection_options_set(options,...);
Creation and modification functions have these signatures:
mysqlx_collection_create_with_options(mysqlx_schema_t *schema, mysqlx_collection_options_t *options); mysqlx_collection_create_with_json_options(mysqlx_schema_t *schema, const char* json_options); mysqlx_collection_modify_with_options(mysqlx_schema_t *schema, mysqlx_collection_options_t *options); mysqlx_collection_modify_with_json_options(mysqlx_schema_t *schema, const char* json_options);
For modifications, the
REUSEoption is not supported and an error occurs if it is used.
MySQL_Connection_Optionsenumeration is no longer sensitive to the order in which the underlying options are declared in the C API source. (Bug #30799197)
Connector/C++ now implements blocking of failed connection-pool endpoints to prevent them from being reused until a timeout period has elapsed. This should reduce average wait time for applications to obtain a connection from the pool in the event that endpoints become temporarily unavailable.
For applications that use the legacy JDBC API (that is, not X DevAPI or X DevAPI for C) on a system that does not have OpenSSL libraries installed, the libraries that are bundled with Connector/C++ could not be found when resolving run-time dependencies of the application. (Bug #31007317)
For a reply with multiple result sets (such as the result from a stored procedure that executed multiple queries), an error in reply processing logic could incorrectly deregister the reply object after reading the first result set while more result sets from the server were pending, resulting in an application error. (Bug #30989042)