[This is part 2 of the announcement] Bugs Fixed
* Incompatible Change; JSON: If a JSON object contained multiple members with the same key name, MySQL kept the first member and discarded the remainder. This contradicts RFC 7159, which suggests that duplicate key names can be handled in one of the ways listed here: + Report an error (or otherwise fail to parse the object) + Report all of the name-value pairs, including duplicates + Report the last name-value pair only When a JSON text is evaluated in JavaScript, the last name-value pair is kept if multiple pairs with the same name are specified. MySQL now does likewise, and implements the last of the three options just listed, as shown here: mysql> CREATE TABLE t1 (c1 JSON); mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}') ; mysql> SELECT c1 FROM t1; +------------------+ | c1 | +------------------+ | {"x": [3, 5, 7]} | +------------------+ The fix for this issue also corrects a failure in the MySQL 8.0 server to handle insertion into a JSON column of data containing JSON arrays as the values for multiple identical keys. (Bug #86620, Bug #86866, Bug #26238736, Bug #26369555) * Performance; JSON: Creating a representation of a JSON string now optimizes for the most common case---that the string to be processed contains no special characters that need to be escaped---scanning for the first special character in the string, and copying each sequence of characters which do not require escaping in a single memcpy() call, rather than checking each character in turn to determine whether it needed to be escaped, escaping it if so, and then copying it, one by one, as was done previously. This fix also corrects failure to escape the special character 1F (Unit Separator). (Bug #86898, Bug #26388690) References: See also: Bug #25977595. * InnoDB: A long semaphore wait occurred when executing ALTER TABLE, DROP TABLE, and DROP DATABASE operations. (Bug #26779650) * InnoDB: Invalid error handling code was removed from a function related to tablespace import. (Bug #26595476) * InnoDB: File-per-table tablespaces created prior to MySQL 5.6 caused a failure during an in-place upgrade to MySQL 8.0.2. The tablespaces were not registered with the InnoDB SYS_TABLESPACES system table, as required. Tables with decimal columns created prior to MySQL 5.5 also caused a failure during an in-place upgrade to MySQL 8.0.2, due to a precision type mismatch. (Bug #26542296, Bug #87229) * InnoDB: A segmentation fault occurred when attempting to open a table that was altered while strict mode was disabled to include conflicting TABLESPACE and COMPRESSION attributes. (Bug #26375851) * InnoDB: A segmentation fault occurred during a DML operation that used the TempTable storage engine. (Bug #26363837) * InnoDB: Implicit row format conversion during an ALTER TABLE ... REORGANIZE PARTITION operation raised an invalid assertion. (Bug #26326611) * InnoDB: An ALTER TABLE operation that rebuilt an encrypted table did not set the encryption attribute properly. (Bug #26243264) * InnoDB: A memory leak was encountered on Windows when using the TempTable storage engine for in-memory internal temporary tables. (Bug #26237680) * InnoDB: Misleading errors were produced when running Valgrind tests on a server build that was not enabled for Valgrind testing. (Bug #26037206) * InnoDB: Problematic code related to dropping orphan full-text search tables caused an invalid object ID assertion failure on startup. (Bug #25998362) * InnoDB: Allocated memory was not initialized before it was written to a file, resulting in a Valgrind error. (Bug #25913151, Bug #85986) * InnoDB: Replication lag occurred on slave instances during large update operations on tables with many partitions. (Bug #25687813, Bug #85352) * InnoDB: A cursor position check by a multiversion concurrency control row search function raised an assertion. (Bug #25377592) * InnoDB: The wrong variable was passed to the row_mysql_handle_errors routine causing an assertion failure. (Bug #25183130) * InnoDB: A long wait for a dictionary operation lock held by a full-text search synchronization operation caused a server exit. (Bug #24938374) * InnoDB: Assertion code was modified to account for the possibility of a transaction attempting to acquire an explicit lock on a record while another transaction converts an implicit lock to an explicit lock on the same record prior to a commit operation. (Bug #24344131) * InnoDB: A FLUSH TABLES ... FOR EXPORT operation on an encrypted or page-compressed table raised an assertion. (Bug #22916982) * InnoDB: A CREATE TABLE ... SELECT operation raised an assertion failure when the newly created table was dropped before the transaction was committed. (Bug #22154768) * Partitioning: In certain cases when fetching heap records a partition ID could be set to zero. (Bug #86255, Bug #26034430) * Partitioning: It was possible for a CREATE TABLE statement that failed to create a partitioned InnoDB table not to be rolled back correctly. This was due to an extraneous commit made while performing a check of foreign key information. Since partitioned tables do not presently support foreign keys, this check is unnecessary, and so is no longer made in such cases. (Bug #85299, Bug #25667278) * Replication: On a multi-threaded slave, it was possible for a deadlock state to occur due to the timing of updates to the record of disk space used by the relay log. The timing of the update has now been changed so that the deadlock cannot occur. (Bug #26729635) * Replication: With slave_preserve_commit_order=1 set, a deadlock could occur between a transaction holding a shared write lock on a table, and a transaction earlier in the commit order that also required a shared write lock. (Bug #26666609) * Replication: The Group Replication flow control variables now correctly permit you to have some members in a group that do not affect the minimum throughput of the flow-control mechanism, effectively ignoring those members in case they become blocked. (Bug #26537497) * Replication: It was possible to start the server with invalid values for the Group Replication flow control options. Now, the --group-replication-flow-control-min-quota, --group-replication-flow-control-max-quota, and --group-replication-flow-control-min-recovery-quota options are validated on server startup. (Bug #26531899) * Replication: The unused variable opt_reckless_slave was removed. (Bug #26500285) * Replication: When the Group Replication plugin Delayed_initialization_thread failed to start due to unavailable resources, a locked mutex was being kept behind which would cause issues on Delayed_initialization_thread destructor. The fix ensures that the mutex is unlocked when the thread fails to start. (Bug #26394678) * Replication: If hostname resolution was not working for a member in Group Replication, the error returned when attempting to connect was referring to credentials. The error message has been improved to describe the problem with hostname resolution. (Bug #26368004) * Replication: In the case of delayed initialization of the Group Replication plugin, deployed in single-primary mode, secondaries were able to get writes through an asynchronous replication channel, which is not allowed in normal initialization of the Group Replication plugin. (Bug #26314756) * Replication: If the options file contained Group Replication related settings the server could stop unexpectedly on start up. (Bug #26314472) * Replication: FLUSH LOGS attempted to send an OK message after having already sent an error response during the commit phase. (Bug #26272158) * Replication: With GTIDs generated for incident log events, MySQL error code 1590 (ER_SLAVE_INCIDENT) could not be skipped using the --slave-skip-errors=1590 startup option on a replication slave. (Bug #26266758) * Replication: The Group Replication plugin no longer sets auto_increment_increment and auto_increment_offset variables when single primary mode is active. (Bug #26263155) * Replication: Group Replication partition threads were not visible in the Performance Schema tables. (Bug #26241008) * Replication: COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE was set to an incorrect value when group_replication_recovery_complete_at="transactions_cert ified" on a recovering member. (Bug #26180350) * Replication: The values of the group_replication_recovery_use_ssl and group_replication_recovery_ssl_verify_server_cert variables were not being updated when configured for the Group Replication recovery channel. (Bug #26142801) * Replication: When replicating a partitioned table with an index, on a replication slave where HASH_SCAN was specified as part of the slave_rows_search_algorithms setting, the slave I/O thread sometimes stopped with an error HA_ERR_KEY_NOT_FOUND. (Bug #26137159) * Replication: group_replication_force_members could be used in situations where the group was working properly, in other words a majority was reachable. This incorrect use could cause instability in the group. Therefore, its use has been restricted to the scenario for which it was created, for forming a new membership from a subset of a previous group's membership when a majority of the members are unreachable. (Bug #26093967) * Replication: It was possible to set server_uuid to the same value as group_replication_name. Doing so could result in unexpected behavior because GTIDs are identified by a UUID. Now it is not possible to set server_uuid to the same value as group_replication_name. (Bug #26035931) * Replication: The system variable pseudo_slave_mode, which is for internal server use, sometimes raised an assertion when it was changed inside a transaction. The server no longer changes this variable inside a transaction. (Bug #26034192, Bug #86250) * Replication: When write sets are used for parallelization by a replication slave (as specified by the binlog_transaction_dependency_tracking system variable), empty transactions are now ignored, and the handling of relay log rotation has been optimized. (Bug #25982097) * Replication: The Performance Schema replication_applier_status_by_worker table sometimes incorrectly displayed a value for APPLYING_TRANSACTION for an inactive worker, because the table was being populated before the worker thread stopped. (Bug #25896166, Bug #85951) * Replication: On a member which had both Group Replication and asynchronous replication running simultaneously, asynchronous replication was not respecting the restrictions required by Group Replication, such as only using InnoDB storage engine, tables requiring primary keys and so on. This could also be encountered when running mysqlbinlog against the member. Now, members that are running Group Replication and asynchronous replication do not allow Group Replication's requirements to be broken. (Bug #25609945) References: See also: Bug #25828806. * Replication: Joining a member running a lower version to a group running a higher version resulted in the members running the higher version becoming unreachable. (Bug #25568493) * Replication: Attempting to uninstall the plugin while START GROUP_REPLICATION executed could result in unexpected behavior. (Bug #25423650) * Replication: In case of a failure while creating multiple slave applier worker threads, some threads would be left orphaned and their resources would not be collected. Thanks to Laurynas Biveinis for his contribution to fixing this bug. (Bug #24679056, Bug #82980) * JSON: Containers in the internal representations of JSON objects and arrays (Json_object and Json_array) have been changed to use smart pointers rather than raw pointers to Json_dom, so that orphaned DOM objects are now automatically destroyed. (Bug #26161264) * JSON: ASCII character 31 (\u001f, the unit separator) in a string literal within a JSON document was not quoted when the JSON document was formatted as a string (for example, by CAST('"\u001f"' AS JSON)). (Bug #25977959) * JSON: When a path_expression identified a nonarray value, the JSON_INSERT() and JSON_ARRAY_INSERT() functions failed to evaluate path_expression[0] as equal to path_expression. (Bug #86213, Bug #26022576) * JSON: Searches with JSON_EXTRACT() that used wildcards took an inordinate amount of time. (Bug #84523, Bug #25418534) References: See also: Bug #83959, Bug #25151440. * Under heavy load, an infinite loop occurred in Performance Schema buffer container code. (Bug #26666274) * MySQL-specific typedefs such as uchar and my_bool were inadvertently reintroduced into the client namespace if the mysql.h header file was included. (Bug #26588846, Bug #26582752, Bug #87337) * uint8korr() and related macros were fixed so that they explicitly do unaligned accesses, even on x86. (Bug #26568748) * The main.mysql_upgrade_grant, main.roles-upgrade, and auth_sec.secure_file_priv_warnings, test cases mishandled the error log. The sys_vars.innodb_redo_log_encrypt_basic test case output was unstable. Thanks to Laurynas Biveinis for the patches. (Bug #26562401, Bug #87279, Bug #26575150, Bug #87313, Bug #26575142, Bug #87314, Bug #26582158, Bug #87303) * For debug builds, with sql_buffer_result enabled, recursive common table expressions caused a server exit. (Bug #26556025) * Incorrect resolution of a window function as a constant function could result in a server exit. (Bug #26500442) * Compiling with -DWITHOUT_SERVER=1 resulted in my_symlink.c compilation failure due to missing #include for my_dir.h. Thanks to Christian Hesse for the patch. (Bug #26495816, Bug #87137) * Compiling with -DWITH_SSL=system -DWITH_ZLIB=system assumed that the system openssl zlib command was available, which might not be the case. Now availability of that command is checked, and if unavailable, the zlib_decompress utility is built. (Bug #26494495, Bug #87123) * yaSSL could incorrectly perform TLS cipher negotiation. (Bug #26482173) * Some thread_stack settings could result in a server exit. (Bug #26438067) * REPLACE(UUID(),...) expressions could be cached (improperly) and return the same value for each row of a result set. (Bug #26395601) * When building MySQL within the source tree, make install installed some CMake files into the mysql-test directory within the tree. (Bug #26385175, Bug #86905) * The PROCESS_ID column in the Performance Schema session_connect_attrs and session_account_connect_attrs tables was changed from INT to BIGINT UNSIGNED to accommodate larger process ID values. Thanks to Daniƫl van Eeden for the patch. (Bug #26357806, Bug #86835) * The index on a generated column, whose value was generated from JSON_EXTRACT(), was sometimes not used by the optimizer when it should have been. (Bug #26352119) * Setting the log_error_services system variable to NULL caused a server exit. (Bug #26331795) * For tar file packages, some test suite shared libraries were installed in the server package rather than the test package. (Bug #26329850) * SHOW COLUMNS for a valid view could fail. (Bug #26322203, Bug #86778) * An operation that caused renaming or removal of histogram statistics could cause a server exit. (Bug #26303972) * For a VARCHAR column, sorting using an explicit collation (ORDER BY col_name COLLATE collation_name) was much slower than with an implicit collation (no COLLATE clause), even if the explicit collation was the same as the implicit collation. (Bug #26286790, Bug #86710) * SET binlog_format = ROW produced a syntax error because ROW is now a reserved word. This syntax is now recognized specially to preserve backward compatibility. (Bug #26269280) * SET PERSIST_ONLY, should be permitted only to users who have the PERSIST_RO_VARIABLES_ADMIN and SYSTEM_VARIABLES_ADMIN privileges, but was incorrectly also permitted to users with the SUPER privilege. (Bug #26247864) * The information_schema_stats configuration option, introduced in MySQL 8.0.0, was removed and replaced by information_schema_stats_expiry. information_schema_stats_expiry defines an expiration setting for cached INFORMATION_SCHEMA table statistics. For more information, see Optimizing INFORMATION_SCHEMA Queries (http://dev.mysql.com/doc/refman/8.0/en/information-schema-optimization.html). The TABLES_DYNAMIC, STATISTICS_DYNAMIC, and SHOW STATISTICS_DYNAMIC internal system views were removed. (Bug #26203731, Bug #83957) * Source packages for Debian platforms contained prebuilt debug binaries, causing build failures on any architectures other than the one on which those binaries were built. (Bug #26186911) * The UDF registration service did not work if used during server startup. (Bug #26173244) * Disabling table instrumentation by changes to the Performance Schema setup_objects table could cause incorrect index names in index statistics. (Bug #26162562) * A misleading error message was returned when attempting to drop a nonexistent tablespace file. (Bug #26133507, Bug #86438) * When running mysqlbinlog with the --read-from-remote-server option, rewrite rules specified using the --rewrite-db option were ignored, so data was not written to the target database. (Bug #26117735, Bug #86288) * Timestamp data copied from the data dictionary cache during a DDL operation was converted using a time_zone value that was no longer valid. The resulting timestamp data was incorrect, causing an error in release builds and an assertion failure in debug builds. (Bug #26091333, Bug #86290) * Successful data dictionary updates but failure to write the binary log event could result in an inconsistent state. (Bug #26037355) * mysqlbinlog now prints the full metadata for the event type Table_map_log_event. (Bug #26020990) * For UPDATE or DELETE statements with an ORDER BY ... LIMIT clause, the optimizer sometimes failed to identify a cheaper ordering method than filesort. (Bug #25899921) * The rpl_diff.inc test case file did not find the data difference between servers. Thanks to Yura Sorokin for the patch. (Bug #25860138, Bug #85838) * The combination of an index virtual generated column, a foreign key, and a trigger could cause an assertion to be raised. (Bug #25817660) * Selecting from a view could yield different results with materialization enabled versus materialization disabled. (Bug #25782811, Bug #85622) * After using SET PERSIST to set the event_scheduler system variable, the server failed to restart if started with the --skip-grant-tables option. (Bug #25776940) * An assertion could be raised for MIN()/MAX() access to system tables. (Bug #25738624) * A failed DROP VIEW could be written to the binary log. (Bug #25680097) * SHOW CREATE VIEW sometimes added a database name prefix to table names that was not present in the original view definition. (Bug #25634576, Bug #85176) * The Performance Schema variables_info table displayed incorrect VARIABLE_SOURCE and VARIABLE_PATH values for variables set within option files specified by !include or !includedir directives. (Bug #25563891) * mysqlpump displayed incorrect progress information about the number of tables dumped. (Bug #25432850) * The mysqlpump progress indicator was incorrect for number of tables. (Bug #25432850) * Calculations for UCA 9.0.0 collations were inefficient for tailoring rules containing contraction characters. (Bug #25426632, Bug #84577, Bug #25426632, Bug #84577) * GROUP BY DESC on DECIMAL values could incorrectly group NULL with non-NULL values. (Bug #25407964) * Some mysqldump warnings went to the standard output rather than the standard error output and consequently were written to the dump file. (Bug #25380000, Bug #82992) * NULL values generated as a result of WITH ROLLUP were replaced with the previous row's value when executing a prepared statement on a view having the GROUP BY .. WITH ROLLUP clause. (Bug #25174118) * A parser refactoring in MySQL 8.0.1 resulted in incorrect handling of some INSERT ... ON DUPLICATE KEY UPDATE statements. These problems have been corrected. (Bug #24716127, Bug #25526439, Bug #25071305) * For debug builds, a CREATE TABLE statement with a VARBINARY or BINARY column having a default value in hexadecimal format caused a server exit. (Bug #24679166, Bug #83020) * A mysqldump memory leak was fixed. Thanks to Yura Sorokin for the patch. (Bug #23531150, Bug #81714) * If a session rolled back to a savepoint and then was killed, the statements up to the point of the savepoint could be committed. (Bug #22350047, Bug #79596) * MySQL accepted a reference to an alias of an aggregated expression defined in an outer query block even when the reference occurred within a GROUP BY subquery where the reference was meaningless. (Bug #21974346) * Some SELECT DISTINCT queries with GROUP BY could return incorrect results. (Bug #20692219) -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql