Connector/C++ supports all Unicode character sets for connections to servers for MySQL 8.0.14 and higher, but previously had Unicode support limited to the
utf8
character set for servers older than MySQL 8.0.14. Connector/C++ now supports all Unicode character sets for older servers, includingutf8mb4
,utf16
,utf16le
,utf32
, anducs2
. (Bug #28966038, WL #12196)
Thanks to Daniël van Eeden, who contributed a code change to use the
stdbool.h
header file rather than abool
typedef. (Bug #29167120, Bug #93803)Thanks to Daniël van Eeden, who contributed a code change to use
lib
instead oflib64
on 64-bit FreeBSD. (Bug #29167098, Bug #93801)-
Previously, for Connector/C++ applications that used the legacy JDBC API, source files had to use this set of
#include
directives:#include <jdbc/mysql_driver.h> #include <jdbc/mysql_connection.h> #include <jdbc/cppconn/*.h>
Now a single
#include
directive suffices:#include <mysql/jdbc.h>
(WL #12786)
Thanks to Daniël van Eeden, who contributed a code change to build the documentation as part of the
all
target if Connector/C++ is configured with-DWITH_DOC=ON
. (Bug #29167107, Bug #93802)Previously, for Connector/C++ 8.0 applications that use the legacy JDBC connector, only static linking to the MySQL client library was supported. The
MYSQLCLIENT_STATIC_LINKING
andMYSQLCLIENT_STATIC_BINDING
CMake options are now available to permit dynamic linking. By default,MYSQLCLIENT_STATIC_LINKING
is enabled, to use static linking to the client library. Disable this option to use dynamic linking. IfMYSQLCLIENT_STATIC_LINKING
is enabled,MYSQLCLIENT_STATIC_BINDING
may also be used. IfMYSQLCLIENT_STATIC_BINDING
is enabled (the default), Connector/C++ is linked to the shared MySQL client library. Otherwise, the shared MySQL client library is loaded and mapped at runtime. (WL #12730)Connector/C++ 8.0 configuration now requires a minimum CMake version of 3.0. (WL #12753)
Connector/C++ debug packages are now available for Linux and Windows. The packages enable symbolic debugging using tools such as gdb on Linux and windbg on Windows, as well as obtaining symbolic information about connector code locations from application crash dumps. Use of the debug packages requires that you have installed and configured the Connector/C++ sources. (Bug #29117059, Bug #93645, Bug #26128420, Bug #86415, WL #12263)
For improved GitHub friendliness, Community Connector/C++ source distributions now include a
CONTRIBUTING.md
markdown file that contains guidelines intended to be helpful to contributors. (WL #12791)The Protobuf sources bundled in the Connector/C++ source tree were updated to Protobuf 3.6.1. (Only the parts needed for Connector/C++ are included, to reduce compilation time.) (WL #12889)
For X DevAPI and X DevAPI for C, performance for statements that are executed repeatedly (two or more times) is improved by using server-side prepared statements for the second and subsequent executions. This happens internally; applications need take no action and API behavior should be the same as previously. For statements that change, repreparation occurs as needed. Providing different data values or different
OFFSET
orLIMIT
clause values does not count as a change. Instead, the new values are passed to a new invocation of the previously prepared statement. (WL #12149)
-
For X DevAPI and X DevAPI for C applications, Connector/C++ now supports the ability to send connection attributes (key-value pairs that application programs can pass to the server at connect time). Connector/C++ defines a default set of attributes, which can be disabled or enabled. In addition, applications can specify attributes to be passed in addition to the default attributes. The default behavior is to send the default attribute set.
-
For X DevAPI applications, specify connection attributes as a
connection-attributes
parameter in a connection string, or by using aSessionOption::CONNECTION_ATTRIBUTES
option for theSessionSettings
constructor.The
connection-attributes
parameter value must be empty (the same as specifyingtrue
), aBoolean
value (true
orfalse
to enable or disable the default attribute set), or a list or zero or morekey=value
specifiers separated by commas (to be sent in addition to the default attribute set). Within a list, a missing key value evaluates as an empty string. Examples:"mysqlx://user@host?connection-attributes" "mysqlx://user@host?connection-attributes=true" "mysqlx://user@host?connection-attributes=false" "mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=]" "mysqlx://user@host?connection-attributes=[]"
The
SessionOption::CONNECTION_ATTRIBUTES
option value must be aBoolean
value (true
orfalse
to enable or disable the default attribute set), or aDbDoc
orJSON
string (to be sent in addition to the default attribute set). Examples:Session sess(..., SessionOption::CONNECTION_ATTRIBUTES, false); Session sess(..., SessionOption::CONNECTION_ATTRIBUTES, attr_doc ); Session sess(..., SessionOption::CONNECTION_ATTRIBUTES, R"({ "attr1": "val1", "attr2" : "val2" })" );
-
For X DevAPI for C applications, specify connection attributes using the
OPT_CONNECTION_ATTRIBUTES()
macro for themysqlx_session_option_set()
function. The option value must be null (to disable the default attribute set) or aJSON
string (to be sent in addition to the default attribute set). Examples:mysqlx_session_option_set(opts, OPT_CONNECTION_ATTRIBUTES(nullptr)); mysqlx_session_option_set(opts, OPT_CONNECTION_ATTRIBUTES("{ \"attr1\": \"val1\", \"attr2\" : \"val2\" }") );
Application-defined attribute names cannot begin with
_
because such names are reserved for internal attributes.If connection attributes are not specified in a valid way, an error occurs and the connection attempt fails.
For general information about connection attributes, see Performance Schema Connection Attribute Tables. (WL #12495)
-
-
The signatures for several X DevAPI for C functions have been changed to enable better error information to be returned to applications by means of a
mysqlx_error_t
handle. These functions are affected:mysqlx_client_t* mysqlx_get_client_from_url( const char *conn_string, const char *client_opts, mysqlx_error_t **error ) mysqlx_client_t* mysqlx_get_client_from_options( mysqlx_session_options_t *opt, mysqlx_error_t **error ) mysqlx_session_t* mysqlx_get_session( const char *host, int port, const char *user, const char *password, const char *database, mysqlx_error_t **error ) mysqlx_session_t* mysqlx_get_session_from_url( const char *conn_string, mysqlx_error_t **error ) mysqlx_session_t* mysqlx_get_session_from_options( mysqlx_session_options_t *opt, mysqlx_error_t **error ) mysqlx_session_t * mysqlx_get_session_from_client( mysqlx_client_t *cli, mysqlx_error_t **error )
The final argument in each case is a
mysqlx_error_t
handle into which Connector/C++ stores error information. If the argument is a null pointer, Connector/C++ ignores it. The application is responsible to free non-null handles by passing them tomysqlx_free()
.The signature for
mysqlx_free()
has also been changed to accept avoid *
argument so that it can accept a handle of any type. Consequently, other type-specific free functions, such asmysqlx_free_options()
, are no longer needed and are deprecated.The preceding modifications change the Connector/C++ API, which has these implications:
The modifications change the ABI, so the ABI version is changed from 1 to 2. This changes the connector library names.
X DevAPI for C applications to be compiled against the new API must be modified to use the new function signatures. (X DevAPI applications should build without change.)
Applications built against the old ABI will not run with the new connector library.
The API change and ABI version change do not affect the legacy JDBC interface, so library names for the legacy JDBC connector library do not change and legacy application need not be changed.
It is possible to install both the old and new libraries. However, installers may remove the old libraries, so they may need to be re-added manually after installing the new libraries.
(WL #11654, WL #12751)
Thanks to Daniël van Eeden, who contributed documentation for the
mysqlx_column_get_collation()
function and various corrections to the developer documentation. (Bug #29123114, Bug #93665, Bug #29115285, Bug #93640, Bug #29122490, Bug #93663)Connector/C++ now has improved support for resetting sessions in connection pools. Returning a session to the pool drops session-related objects such as temporary tables, session variables, and transactions, but the connection remains open and authenticated so that reauthentication is not required when the session is reused. (WL #12497)
Previously, for the
SSL_MODE_VERIFY_IDENTITY
connection option, Connector/C++ checked whether the host name that it used for connecting matched the Common Name value in the certificate but not the Subject Alternative Name value. Now, if used with OpenSSL 1.0.2 or higher, Connector/C++ checks whether the host name matches either the Subject Alternative Name value or the Common Name value in the server certificate. (Bug #28964313, Bug #93301)After repeated calls,
mysqlx_get_session_from_client()
could hang. (Bug #28587287)The
SessionSettings
/ClientSettings
iterator implementation was incomplete. (Bug #28502574)