MySQL Connector/J Release Notes  /  Changes in MySQL Connector/J Version 8.x  /  Changes in MySQL Connector/J 8.0.17 (2019-07-22, General Availability)

Changes in MySQL Connector/J 8.0.17 (2019-07-22, General Availability)

Version 8.0.17 is the latest General Availability release of the 8.0 series of MySQL Connector/J. It is suitable for use with MySQL Server versions 8.0, 5.7, and 5.6. It supports the Java Database Connectivity (JDBC) 4.2 API, and implements the X DevAPI.

Deprecation and Removal Notes

  • X DevAPI: The following methods have been deprecated:

    • Collection.find().where()

    • Collection.modify().where()

    • Collection.remove().where()

    (WL #13009)

Functionality Added or Changed

  • X DevAPI: Two new operators for JSON objects and arrays, OVERLAPS and NOT OVERLAPS, are now supported. (WL #12726)

  • X DevAPI: Indexing for array fields is now supported. See Indexing Array Fields in the X DevAPI User Guide for details. (WL #12247)

  • The README and LICENSE files are now included inside the Connector/J JAR archive delivered in the platform-independent tarballs and zip files. (Bug #29591275)

  • A number of private parameters of ProfilerEvents (for example, hostname) had no getters for accessing them from outside of the class instance. Getter methods have now been added for all the parameters of the class. (Bug #20010454, Bug #74690)

  • A new connection property, databaseTerm, sets which of the two terms is used in an application to refer to a database. The property takes one of the two values CATALOG or SCHEMA and uses it to determine which Connection methods can be used to set/get the current database, which arguments can be used within the various DatabaseMetaData methods to filter results, and which fields in the ResultSet returned by DatabaseMetaData methods contain the database identification information. See the entry for databaseTerm in Configuration Properties for details.

    Also, the connection property nullCatalogMeansCurrent has been renamed to nullDatabaseMeansCurrent. The old name remains an alias for the connection property.

    Thanks to Harald Aamot for contributing to the patch. (Bug #11891000, Bug #27356869, Bug #89133)

  • A new CONTRIBUTING file has been added to the Connector/J repository on GitHub, which provides guidelines for code contribution and bug reporting. (WL #12942)

  • The MySQL Connector/J X DevAPI Reference can now be generated from the Connector/J source code as an Ant target, xdevapi-docs. (WL #13210)

  • Added support for host names that are longer than 60 characters (up to 255 characters), as they are now supported by MySQL Server 8.0.17. (WL #13125)

  • Added support for the utf8mb4_0900_bin collation, which is now supported by MySQL Server 8.0.17. (WL #13124)

  • A cached server-side prepared statement can no longer be effectively closed by calling Statement.close() twice. To close and de-cache the statement, do one of the following:

    • Close the connection (assuming the connection is tracking all open resources).

    • Use the implementation-specific method JdbcPreparedStatement.realClose().

    • Set the statement as non-poolable by calling the method Statement.setPoolable(false) before or after closing it.

    (WL #11101)

Bugs Fixed

  • X DevAPI: The IN operator in X DevAPI expressions, when followed by a square bracket ([), got mapped onto the wrong operation in X Protocol. (Bug #29821029)

  • When using a replication connection, retrieving data from BlobFromLocator resulted in a ClassCastException. It was due to some wrong and unnecessary casting, which has been removed by this fix. (Bug #29807741, Bug #95210)

  • ResultSetMetaData.getTableName() returned null when no applicable results could be returned for a column. However, the JDBC documentation specified an empty string to be returned in that case. This fix makes the method behave as documented. The same correction has been made for getCatalogName() and getSchemaName(). (Bug #29452669, Bug #94585)

  • ResultSetImpl.getObject(), when autoboxing a value of a primitive type retrieved from a column, returned a non-null object when the retrieved value was null. (Bug #29446100, Bug #94533)

  • ResultSetImpl.getDouble() was very inefficient because it called FloatingPointBoundsEnforcer.createFromBigDecimal, which needlessly recreated BigDecimal objects for the fixed minimum and maximum bounds. With this fix, the objects BigDecimal.valueOf(min) and BigDecimal.valueOf(max) are cached after they are first created, thus avoiding their recreations. (Bug #29446059, Bug #94442)

  • Enabling logSlowQueries resulted in many unnecessary calls of LogUtils.findCallingClassAndMethod(). With this fix, LogUtils.findCallingClassAndMethod() is called only when profileSQL is true and even in that case, the number of calls are reduced to a minimal to avoid the excessive stack trace data the function used to generate. Thanks to Florian Agsteiner for contributing to the fix. (Bug #29277648, Bug #94101, Bug #17640628, Bug #70677)

  • Characters returned in a ResultSet were garbled when a server-side PreparedStatement was used, and the query involved concatenation of a number and a string with multi-byte characters. That was due to an issue with the number-to-string conversion involved, which has been corrected by this fix. (Bug #27453692)

  • Calling ProfilerEvent.pack() resulted in an ArrayIndexOutOfBoundsException. It was due to a mishandling of data types, which has been corrected by this fix. (Bug #11750577, Bug #41172)