MySQL Community Server 8.0.17 has been released (part 3/3)
Posted by: Balasubramanian Kandasamy
Date: July 22, 2019 03:09AM
Date: July 22, 2019 03:09AM
[This is part 3 (last) of the announcement ] * The functions STATEMENT_DIGEST() and STATEMENT_DIGEST_TEXT() used character_set_client while parsing the function's argument instead of the character set of the argument. (Bug #29526571) * The server now tracks data dictionary upgrades to ensure that INFORMATION_SCHEMA views are recreated when data dictionary tables are changed. (Bug #29513265) * Execution of STATEMENT_DIGEST() or STATEMENT_DIGEST_TEXT() could have unintended side effects on data in the performance_schema.events_statements_summary_by_digest table. (Bug #29512067) * The implementation for CREATE TABLE did not provide the table a clearly defined starting cursor when no seeks or writes were performed. (Bug #29511318) * When a table is const optimized, any predicate terms in the join's ON condition should also be evaluated on the tables marked as const to make sure that the row qualifies for the ON condition. The optimizer failed to mark a table as const when it was handled as having an impossible ON condition, in which case the resulting row from this table is a NULL extended row. This fix sets the const_table flag for the table and marks the row as a NULL row. It also changes EXPLAIN output for a table optimized as having an impossible ON condition, where the resulting NULL values from this row are now propagated into the rows column values, as with other const rows. (Bug #29493830) * A query containing an IN subquery could return superfluous rows when optimizer_switch did not include firstmatch=on. (Bug #29493026) * RPM package detection of whether the operating system is EL6 or EL7 failed on some systems. (Bug #29492896) * SQL layer validation of keys stored in storage-engine-private data fields in the data dictionary was disabled to permit storage engines to add new keys as required. Storage engines are now responsible for key validation. (Bug #29491593, Bug #94667) * Checks for NULL returned an incorrect result for some expressions comparing rows. (Bug #29491083) * When optimizing a table join which included ORDER BY and LIMIT, the optimizer modified the select limit on the first table by taking the fanout of the entire join into consideration. The fanout was calculated using the filter_effect for each table, which can be set to COND_FILTER_STALE (-1) to indicate an unknown value. This value was not actually checked for by the optimizer, which could result in a negative fanout, leading to an unexpected rows value of 0 in the EXPLAIN output for the query. Now COND_FILTER_STALE (filter_effect unknown) is specifically checked for, and, if it is found, the fanout is also assumed to be unknown, and the number of rows to be selected from the first table is thus not modified by the fanout for the entire join. (Bug #29487181, Bug #29531472) * An implicit assumption was made for the LEAST() and GREATEST() functions that arguments to either of these were all signed or all unsigned values. (Bug #29467577) * Some arguments for the BIT_OR() function were not always handled correctly. (Bug #29459549) * For debug builds, mishandling of the user_attributes column of the mysql.user system table could cause a server exit. (Bug #29451897) * MySQL Cluster-specific Debian debug packages had an incorrect path to the debug symbols. (Bug #29446947) * Compilation failure occurred when building with Protobuf 3.7.0. (Bug #29436791, Bug #94543) * On Debian and Ubuntu, MySQL packages did not enable mysql.service after upgrades from native MySQL packages. (Bug #29435592) * The server did not properly close shared-memory connections when an error occurred, which could result in unexpected server behavior. (Bug #29435426) * The internal JOIN_CACHE::join_record() method attempted to leave all tables on which it operated in the same state with regard to the has_row and null_row flags by saving the state upon entry and restoring the appropriate flags when on completion. The issue addressed here arose after these flags had been restored, due to the fact that restore_last_record() was also called to restore any records that had been processed, which could lead to setting back a null_row flag that had just been restored based on the saved state. This is fixed by calling restore_last_record() before the saved states are restored, rather than after, as well as making sure that reset_null_row() is also called if the saved state indicates that the null_row flag was not set at the beginning. (Bug #29435133) * Some ALTER TABLE statements using ADD COLUMN did not perform as expected. (Bug #29428288) References: This issue is a regression of: Bug #28333657. * An incorrect error message was reported during upgrade from MySQL 5.7 to MySQL 8.0 when a non-natively partitioned table was encountered. The error message referenced the -DWITH_PARTITION_STORAGE_ENGINE CMake build option, which is not supported in MySQL 8.0. (Bug #29426632, Bug #94518) * MySQL Installer did not install OpenSSL DLL dependencies if the Development component was not selected. (Bug #29423421, Bug #94168) * At startup, the server did not properly check the length of user and host names in persisted variables. (Bug #29420141) * The parser could leak memory for certain multiple-statement queries. (Bug #29419820) * Installing MySQL on EL8 from RPM packages caused a conflict with the installed MeCab library. (Bug #29413115) * On FreeBSD, stack traces dumped for fatal signals did not work correctly. (Bug #29408039) * With the derived_merge switch disabled in the value of the optimizer_switch system variable, information retrieved for base tables from INFORMATION_SCHEMA.TABLES displayed inappropriate information in the TABLE_COMMENT column. (Bug #29406053, Bug #94468) * In certain cases, use of ORDER BY in a subselect did not produce the expected result. (Bug #29402943) * ROLLUP queries with wildcards (and probably also certain other wildcard queries) could cause assertion errors. (Bug #29396628) * A condition inside an IF function having a constant evaluating to TRUE was not always handled correctly. (Bug #29394833) * A code change in MySQL 8.0.13 related to full-text search caused a segmentation fault. (Bug #29393105) * mysqlpump did not check whether the argument to --result-file was opened correctly and exited unexpectedly if an error occurred. (Bug #29389828) * In queries without joins, batch mode was not enabled until after initialization was complete, so that OFFSET rows were read outside of batch mode. This negated any performance benefit to be had from batch mode. (Bug #29373972) * When renaming a functional index, the server did not check for a possible duplicate index name. (Bug #29360763) * The system variable service did not check the input buffer size for some operations. (Bug #29343505) * For mysql system schema dumps, mysqlpump dumped certain tables by row rather than as account-management statements. (Bug #29343073) * Creation of a functional index on a UNION subquery led to an assertion in debug builds. (Bug #29342245) * Non-numeric arguments to AVG() were not always handled correctly. (Bug #29321764) * Result sets with a very large number of columns could cause client programs to use all available memory. Now the client library allocates no more than max_allowed_packet bytes for result set metadata, returning an out-of-memory error if this limit is exceeded. If this error occurs, it is fatal and the client should disconnect. (Bug #29316814) * A call to mysql_shutdown() could cause the client to exit when the server and client were from different MySQL series, due to return packet payload misinterpretation. (Bug #29315393) * Client programs could fail while reading result set metadata if communicating with the server using the pre-MySQL 4.1 protocol. (Bug #29304864) * HANDLER statements did not always work correctly with tables having generated columns. (Bug #29300049) * Session-tracking information in the client/server protocol could be mishandled. (Bug #29297652) * Client programs that used the libmysqlclient C client library could exit upon receipt of an OK packet containing malformed session-tracking information. (Bug #29297620) * With the PAD_CHAR_TO_FULL_LENGTH SQL mode enabled, password changes failed, with no warning or error reported. (Bug #29287785) * Initialization code of user-defined functions for the keyring_aws plugin did not properly check whether the plugin had been initialized. (Bug #29278153) * Scalar subqueries were not always identified and handled correctly when compared with aggregate or window functions. (Bug #29276063) * Ubuntu packages did not disable binary logging for initialization scripts. (Bug #29263771) * The internal collation map could become corrupted by use of invalid collation names. (Bug #29258979) * Single-table UPDATE and DELETE statements that used indexed expressions could cause the server to exit when executed as prepared statements. (Bug #29257254) * The audit_log plugin did not log UNINSTALL PLUGIN audit_log statements. (Bug #29248047) * MySQL now uses open(O_TMPFILE) whenever applicable when creating a temporary file that is immediately unlinked. This is more efficient than previously and avoids the small possibility of a race condition. Thanks to Daniel Black for the contribution. (Bug #29215177, Bug #93937) * audit_log filtering operations could leak memory. (Bug #29201747) * The GRANT OPTION privilege could be mishandled in some cases. (Bug #29179334) * Previously, LIKE comparisons could be incorrect if either of the _ or % SQL wildcard characters was used as the ESCAPE character. These characters can now be used. (Bug #29175461, Bug #93811) * The component_sys_variable service could fail to read certain system variables, causing a server exit. (Bug #29162657) * Multiple-table UPDATE statements could search for incorrect generated-column values when determining which row to update. (Bug #29154379) * If the server was started with Performance Schema parameters that caused an out-of-memory condition, startup failed. (Bug #29140212, Bug #93726) * For consistency and compliance with standard SQL, the ISNULL() function is now printed as IS NULL in warnings generated by EXPLAIN statements. (Bug #29119455) * Some supplemental Unicode characters could incorrectly be flagged with a warning message as invalid. (Bug #29110613, Bug #93626) * For upgrades from MySQL 5.7 to 8.0, the root user was not given all dynamic privileges. (Bug #29043233) * When using subpartitioning, table serialized dictionary information (SDI) was not stored in any tablespace file. (Bug #29020745, Bug #93499) * Privileges for dropping some Performance Schema tables were checked incorrectly. (Bug #29010031) * mysqldump failed to wrap SET NAMES utf8mb4 and SET character_set_client = utf8mb4 statements within version-specific comments, which could cause compatibility problems. (Bug #29007506, Bug #93450) * For a unique index created on one or more columns defined as NULL, the optimizer failed to handle joins using that index as eq_ref. As part of this fix, late NULL filtering is now also performed to avoid treating comparisons with NULL as potential equality matches. (Bug #28965762, Bug #29337233) * For debug builds, an assertion could be raised by string comparisons for which the expected and actual collation differed. (Bug #28960901) * The server did not handle correctly a subquery which, prior to conversion to a semijoin, contained a merged derived table or common table expression which in turn had a WHERE clause with an outer reference against an indexed column. (Bug #28955216) * A query that employed a derived table which included an ORDER BY was not always handled correctly. (Bug #28942965) * When clients were terminated for inactivity exceeding the wait_timeout value, the message written to the error log was unclear. Now ER_NET_WAIT_ERROR is written, which is more specific about the cause of the problem. (Bug #28940167, Bug #93240) * Concurrent execution of FLUSH PRIVILEGES along with CREATE USER or ALTER USER could cause the server to stall. (Bug #28937018, Bug #93085) * CASE statement comparisons that relied on index prefix values could produce incorrect results. (Bug #28934315, Bug #93215) * When adjusting the query cost after sort elimination to compensate for sorts that had not been considered in the original cost estimate, and the estimates could sometimes be too low, or even negative. The sort cost is added to the total cost in Optimize_table_order::consider_plan(), and subtracted from the total cost in JOIN::optimize() if it is found that sorting is not needed. If consider_plan() finds that sorting is not needed, it does not add the sort cost to the total cost, but still records a sort cost in JOIN::sort_cost(), and this is set to the sort cost of the candidate plan considered previously. Later, JOIN::optimize() saw that the JOIN object had an associated sort cost, and subtracted that cost from the total cost, since it also sees that no sort is needed. Since the sort cost came from a candidate plan that was not the same as the chosen plan, the estimate was incorrect. The fix is to make consider_plan() set JOIN::sort_cost to 0 if no sort cost is added to the total cost, so that the mistaken adjustment of the cost in JOIN::optimize() is not performed. (Bug #28884359) * Some GIS code failed to compile under Visual Studio 2017 15.5.6. (Bug #28861188) References: This issue is a regression of: Bug #28842878. * Stored generated column values and indexes on virtual generated columns were not correctly updated after columns on which these generated columns depended were swapped using ALTER TABLE with RENAME COLUMN or CHANGE COLUMN. Renaming of base columns for generated columns, generated defaults, and functional indexes is now prohibited unless the same ALTER TABLE statement satisfies one of these conditions: + The statement removes the generated column, generated default, or functional index. + The statement updates the dependent expression in question. This enables supporting existing scenarios in which generation expressions are updated to follow base column renaming. Restrictions on dropping columns on which generated columns, generated defaults, or functional indexes depend were relaxed in a similar way. (Bug #28772251, Bug #92727) * Base columns were not excluded from index-only access by a generated column. (Bug #28652733) References: See also: Bug #29664369. This issue is a regression of: Bug #23169112. * SET PERSIST_ONLY did not properly handle the version_tokens_session system variable. (Bug #28542569) * For debug builds, improper error checking for CREATE TABLE statements could cause an assertion to be raised. (Bug #28490361, Bug #91976) * MySQL 5.7 supported foreign keys on InnoDB tables with a parent key for which part of the referenced columns were hidden, but MySQL 8.0 did not. MySQL 8.0 now supports this capability. (Bug #28480149, Bug #91952) * INSERT ... ON DUPLICATE KEY UPDATE did not consider privileges granted by active roles. (Bug #28395115) * For unloaded components, component options specified at startup with a --loose- prefix were not processed if the component was later loaded at runtime. (Bug #28341329) * Long passwords solicited interactively by client programs could fail to be null-terminated. (Bug #28121400) * When building MySQL, CMake begins the process of downloading Boost by creating a zero-length tarball in the destination directory, which is removed when the download is complete. If the download was interrupted or timed out, the presence of this file prevented CMake from attempting to perform the download the time it was run. Now the zero-length tarball, if present, is removed before the download is started. (Bug #28089173) * A thread pool group could be blocked when a thread process tick time exceeded the maximum permitted value. The tick time now uses a larger data type to permit larger values. (Bug #28072609) * Privileges were not checked correctly for ALTER USER ... IDENTIFIED WITH ... BY. (Bug #27923149) * MySQL does not support OpenSSL session tickets, but did not set the SSL_OP_NO_TICKET flag to inform OpenSSL of that. The flag is now set. (Bug #27655493) * The audit_null plugin did not properly check for a null event record. (Bug #27638290) * UpdateXML() did not always free memory properly in certain cases. (Bug #27312862) * Empty values in the name column of the mysql.plugin system table caused the server to exit during startup. (Bug #27302459) * The server did not properly check privileges for CACHE INDEX statements. (Bug #26173827) * With the thread_pool plugin enabled, the Performance Schema status_by_thread table contained no data. (Bug #25933891) * The GRANT OPTION privilege was treated as related to database operations. (Bug #25203933) * REPAIR TABLE for ARCHIVE tables could result in a server exit. (Bug #23304911) * If an INSTALL PLUGIN statement contained invalid UTF-8 characters in the shared library name, it caused the server to hang (or to raise an assertion in debug builds). (Bug #14653594, Bug #23080148, Bug #27167197) * Logging to the mysql.slow_log system table could fail when values were to large for table columns. Now logging proceeds on a best-effort basis, writing what information can be provided. Otherwise, the row is discarded and a message is written to the error log. (Bug #11748692, Bug #37132) * A query using WHERE date_column LIKE 'year_value' failed with error 1525 Incorrect DATE value on Windows platforms. (Bug #95780, Bug #29904751) References: This issue is a regression of: Bug #29368521. * A fix for a previous issue caused YEAR values to be treated as unsigned, but this did not allow for possible negative values arising during calculations involving subtraction, which could lead to data truncation errors. (Bug #95045, Bug #29668676) References: This issue is a regression of: Bug #92209, Bug #28562930. * When working with derived tables with an aggregation which had zero input rows, the results of the aggregate functions were not properly copied into the temporary table. This caused incorrect results in cases where the derived table was evaluated multiple times, such as when performing a lateral join. (Bug #94721, Bug #29514504) * A window without a frame specification inheriting from a window with an ORDER BY yielded an incorrect result. (Bug #94251, Bug #29328529) * The results returned by the functions REGEXP_REPLACE() and REGEXP_SUBSTR() used UTF-16 rather than the character set and collation of the expression searched for matches. (Bug #94203, Bug #29308212) * A UNION ALL query with SUM(constant) was processed very slowly compared to the same query using SUM(column) instead. (Bug #93922, Bug #29227464) * JSON_OBJECTAGG() is non-deterministic in the presence of duplicate keys unless the window has ordering on the key, which is expected behavior, but a key-value pair that was no longer in the window frame still appeared in the result. (Bug #93822, Bug #29175262) * LIMIT was applied before HAVING in queries with subselects. (Bug #93214, Bug #28934388) References: This issue is a regression of: Bug #25466100. * A query involving GROUP BY on a TIMESTAMP column resulted in a duplicate entry for key (ER_DUP_ENTRY) error. This problem arose when TIMESTAMP values were inserted into a table using a given setting for the time zone and these values were later fetched after the time zone setting had been changed, such that at least some of the inserted TIMESTAMP values occurred during the hour that the time changed from standard to daylight time (DST) in the new time zone, during which time the same TIMESTAMP value can exist twice. Now, when the server would otherwise return the error DUPLICATE ENTRY FOR KEY 'group_key', if the grouping involves a TIMESTAMP column, it instead raises the error Grouping on temporal is non-deterministic for time zones having DST. Please consider switching to UTC for this query. In addition, it is suggested to set explicit_defaults_for_timestamp to ON as well as one or more of MODE_NO_ZERO_IN_DATE, MODE_NO_ZERO_DATE, or MODE_INVALID_DATES as part of the server SQL mode to help avoid this issue. (Bug #90398, Bug #27970159) On Behalf of Oracle/MySQL Release Engineering Team, Balasubramanian Kandasamy
Subject
Views
Written By
Posted
MySQL Community Server 8.0.17 has been released (part 3/3)
2208
July 22, 2019 03:09AM
Sorry, you can't reply to this topic. It has been closed.
Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.