=====================================================
MySQL Connector/Node.JS 8.0 - Release Notes & Changes
=====================================================

MySQL Connector/Node.JS
Copyright (c) 2016, 2022, Oracle and/or its affiliates.

Full release notes:
 http://dev.mysql.com/doc/relnotes/connector-nodejs/en/

v8.0.29
=======

- Constraints for TLS connection options were relaxed
- Certificate authority validation can now be explicitly enabled with a connection string via the "VERIFY_CA" TLS mode
- Default server identity verification can now be enabled with a connection string via the "VERIFY_IDENTITY" TLS mode
- A custom server identity verification function can be provided via the "tls.checkServerIdentity" configuration option
- Allow index of DATETIME or similar column data types for document fields created from JavaScript Date instances
- Prevent closed connection pool to create extraneous connections for queued requests
- Cleanup global and private references in the API docs
- Remove extraneous 3rd-party dependency
- Update google-protobuf to v3.19.4

v8.0.28
=======

- TLSv1 and TLSv1.1 are not supported anymore
- The Certificate Authority (CA) chain can now be specified using a list of PEM files
- Certificate Revocation Lists (CRLs) can now be defined using multiple PEM files, one for each CA
- Server certificates revoked by non-root CAs can now be properly validated

v8.0.27
=======

- Test suite as been re-structured and missing relevant tests have been added
- Error and warning management logic has been centralized and improved
- Attempts to acquire connections in parallel are how properly handled by a connection pool
- Standalone connections can now be properly managed via the "Client" interface

v8.0.26
=======

- Internal connection management architecture has been re-structured and improved
- Deprecation warnings are now reported when the connection uses TLSv1 or TLSv1.1
- Pool connections that become unresponsive are now being released and can be re-used
- Network sockets are now properly closed when the client does not connect to the server due to a timeout
- Column metadata callbacks are now executed only once for each result set
- SQL statement instances created with "Session.sql()" can now be re-used with different placeholder arguments
- "Collection.replaceOne()" now fails with a non-matching replacement document "_id" property
- "Collection.addOrReplaceOne()" now fails with a non-matching replacement document "_id" property
- Expecations about column metadata in functional tests have been relaxed to avoid ongoing server changes
- Log collection script used for functional tests has been improved to avoid test flakiness
- Deprecated "Buffer()" constructor has been replaced with "Buffer.alloc()", "Buffer.allocUnsafe()" and "Buffer.from()"
- Upstream floating point values provided as JavaScript numbers or X DevAPI expression literals are now correctly rounded

v8.0.25
=======

This release contains no functional changes and is published to align the version number with the MySQL Server 8.0.25 release.

v8.0.24
=======

- Add support for handling notifications of connections closed by the server
- Fix issues preventing refused connections to be released back to a pool
- Fix behaviour of "Session.getDefaultSchema()" for undefined schemas
- Overall documentation style, structure and content improvements
- Update 3rd-party dependencies

v8.0.23
=======

- Prevent logging routines to run when not in debug mode
- Improve content of X Protocol log messages
- Fix issue causing duplicate log messages
- Rename "master" references to "trunk"
- Deprecate End-of-life Node.js version support
- Fix precision issue causing certain DOUBLE values to be truncated
- Fix inconsistent behavior with "Table.insert()" parameters

v8.0.22
=======

- Re-structure the functional test suite
- Fix behavior of "RowResult.nextResult()" for empty result sets
- Deprecate "dbUser" and "dbPassword" properties
- Remove "offset()" APIs using unsupported server features
- Fix issues causing warnings about circular dependencies
- Add support for lazy decoding of binary row fields and column metadata
- Improve memory usage for serializing/deserializing binary content
- Add support for return proper type names on "Column.getType()"
- Fix decoding of single-character SET values in result sets
- Fix decoding of non-BIGINT values stored in BIGINT columns

v8.0.21
=======

- Add support for JSON schema validation when inserting documents in collections
- Fix MySQL BIGINT downstream decoding issues
- Remove duplicated protobuf stubs
- Fix issues with dangling resources on test runs
- Fix issues with tests using the MySQL TIME data type
- Fix documentation issues regarding the TLS ciphersuite options
- Remove functional tests covering the deprecated sha256_password authentication plugin
- Replace deprecated mocha.opts file with mocha command line options

v8.0.20
=======

- Add support for TLS version and ciphersuite selection
- Improve multihost support and introduce random-based connection failover
- Fix timezone issues in tests using DATETIME
- Improve documentation and examples related to result set cursors

v8.0.19
=======

- Add support for resolving and manage connections to hosts specified as SRV records
- Fix issues with Collection.existsInDatabase() in the presence of regular tables
- Fix unexpected behavior with empty where() calls
- Re-introduce getAffectedItemsCount() method for the Session.sql() API

v8.0.18
=======

- Add devDependencies to allow users and potential contributors to generate test coverage reports
- Add devDependencies to allow users and potential contributors to enforce a formal code convention
- Introduce performance improvements for the Collection.getOne() API
- Introduce a full Promise-based buffered result set API based on the MySQL X connectors standard
- Fix issue causing incorrect padding characters to be applied for fixed-length column values
- Fix issue preventing to insert a Node.js Buffer value into a MySQL column of a binary datatype
- Fix issue causing MySQL binary datatypes to be coerced to Node.js Strings when retriving data from a table
- Add support for updating MySQL binary datatype columns using raw Node.js Buffers

v8.0.17
=======

- Re-structure the test suite and track the proper devDependencies to allow users to run it locally
- Introduce a standard set of guidelines for open source contributions
- Add support for creating multi-value indexes on document fields containing arrays
- Add support for the "OVERLAPS" and "NOT OVERLAPS" operators
- Track missing MySQL collations such as "utf8mb4_zh_0900_as_cs" and "utf8mb4_0900_bin"
- Fix issue preventing the correct collation name to be retrieved with Column.getCollationName()
- Add expression support for the "NOT" unary operator
- Add expression support for the "DIV" binary operator
- Allow Collection.dropIndex() to silently suceed when the index does not exist
- Fix issue preventing backticks from being used in table column identifiers
- Fix issue preventing JavaScript Date values to be assigned to expression placeholders

v8.0.16
=======

- Add support for autonomous prepared statements for some types of operations
- Add support for storing application-level and client-level connection attributes in the server
- Improve pool selection algorithm to prioritize re-using idle connections instead of creating new ones
- Improve usage of idle connections in a pool by properly resetting them and avoid re-authentication
- Fix issues preventing JavaScript Date objects to be properly serialized within a document
- Fix issues preventing connections to be acquired from a pool within a finite timeout
- Fix issues preventing idle pool connections to be re-used after a period of inactivity
- Fix issues preventing pool connections to be closed on the server
- Remove unsupported Table.getViewDefinition() API

v8.0.15
=======

There are no changes in this release of the product, but the version number has been raised to 8.0.15
to align with the new MySQL Server release.

v8.0.14
=======

- Add support for ignoring (and not failing with) initial X Protocol notices
- Remove deprecation notices from Collection.count() and Table.count()
- Add support for setting the default schema in the server
- Remove support for creating non-existing schemas when connecting to the server
- Allow pct-encoded default schema names in the connection string
- Allow falsy values to be used in Table.insert()
- Allow falsy values to be used in Table.update().set() and Collection.modify().set()
- Fix issue causing the client to hang when the server certificate was not valid
- Fix issue causing collection.existsInDatabase() to always return true in the presence of any collection

v8.0.13
=======

- Add support for connection pooling via the mysqlx.getClient() interface
- Add support for single-host and multi-host connection timeouts
- Fix uncaught exception thrown when calling getCollationName() for non-textual columns
- Fix support for mysql.expr() inputs in the CollectionFind.fields() method
- Fix handling of X Protocol global notices (log errors and make connections unusable if it is the case)
- Include standard "user" property in the output of Session.inspect()
- Fix documentation typos and incorrect usage examples

v8.0.12
=======

- Mysqlx.Crud message encoding performance improvements
- Expression parser performance improvements
- Add missing X DevAPI standard methods
- Remove and deprecate extraneous X DevAPI unsupported methods
- Fix issues with ESCAPE expressions
- Fix metadata-based field value padding issues
- Fix uncaught exception issue for NULL fields
- Reduce error surface and introduce sane defaults for mysqlx.getSession()

v8.0.11
=======

- Replace protobuf.js library with the official google-protobuf npm package
- Add new "SHA256_MEMORY" authentication mechanism for MySQL 8.0.11 "caching_sha2_password" authentication plugin
- Introduce new auto-generated document id format (which is now generated on the server)
- Add "NOWAIT" and "SKIP_LOCKED" modes for both shared and exclusive row locks
- Add support for sorting results on CollectionFind, CollectionRemove and CollectionModify operations
- Update Session.getSchemas(), Schema.getCollections() and Schema.getTables() to return an array of instances
- Introduce performance improvements on Collection.add()
- Fix parsing issues with escape characters in expressions
- Fix precision loss issues with the use of MySQL BIGINT type in expressions
- Update result set interface to use JavaScript Date objects for representing the MySQL DATE type
- Update result set interface to apply rounding mask for the MySQL FLOAT type
- Fix decoding issues with the MySQL UNSIGNED INTEGER and BIT types
- Fix decoding issues with large documents or document properties

v8.0.9
======

- Rollout a new and improved expression parser
- Partial rollout of a protobuf message encoder using stubs compiled by the official vendor compiler
- Add support for creating and deleting collection indexes using the DevAPI
- Add support for working with transaction savepoints via the DevAPI
- Add support for modifying multiple document properties in bulk, using the `patch()` method
- Remove relational (table and view) DDL API
- Remove persistent session configuration management API
- Fix all known expression parsing issues and caveats
- Fix duplicate UUID generation issues
- Fix document property projection issues, using the `fields()` method

v8.0.8
======

- Add support for `collection.find()` and `table.select()` row locking
- Add document-specific CRUD methods (`replaceOne()`, `addOrReplaceOne()`, `getOne()` and `removeOne()`)
- Add support for automatic or manual selection of authentication mechanisms
- Remove some dead or non-supported feature code
- Fix some flaky test cases and other some small issues in the test suite
- Refactor the database entity and operation architecture
- Add support for the SQL "IN" operator for matching values against argument lists
- Add support for using the "IN" operator to check if values exist in arrays or objects
- Fix a few pressing bugs on the existing expression parser (empty quoted strings, `NULL`, negation, zeros)

v8.0.7
======

- Add support for server connections using local UNIX sockets
- Add failover support when creating sessions by providing multiple server/router addresses
- Normalize multiple session types into a single `Session` entity
- Enable SSL/TLS on server connections by default
- Introduce a new mysql-specific UUID format for document ids
- Fix issue preventing document ids to be set to `0`
- Fix protocol issue preventing the addition of a large number of documents to a collection
- Prevent behavior of implicitely removing entire tables and collections
- Fix issue with `bind()` usage for removing documents from a collection
- Normalize dropX() methods and restrict them to the proper scope
- Fix protocol issue preventing SHA256 password users of picking the `PLAIN` authentication mechanism in MySQL 8
- Add high-level management interface to support persistent session configurations

v1.0.6
======

- Added support for single array or multiple argument function calls on the public API
- Updated behavior of `collection.add([])` to avoid confusing exceptions
- Fixed issues with `collection.bind()`
- Fixed parsing issues on URI and connection string corner-cases
- Added support for creating IPv6 sessions with a URI or connection string
- Added support for creating TLS sessions with a URI or connection string
- Added support for validating the server certificate with a given CA and/or CRL

v1.0.5
======

- Added Table creation API.
- Added APIs for Transaction handling

v1.0.4
======

- Changed package name from `mysqlx` to `@mysql/xdevapi`
- Added View DDL support
- Added support for Common URI format
- Added Collection.count() and Table.count()
- Added Schema.getCollectionAsTable()
- Added xdevapi.getVersion()

v1.0.3
======

- Improved handling of fragmented TCP packages
- BUG#23118665:C/NODEJS FAILS TO WORK WHEN SSL IS ENABLED

v1.0.2
======

- Initial public release
- Support for X DevAPI 1.0.4
