[This is part 3 of the announcement]
Bugs Fixed * Important Change: The empty string value is now accepted as a key when used with JSON functions such as JSON_EXTRACT(). In such cases, it must be quoted. (Bug #79643, Bug #22366102) * MySQL Cluster: Previously, the mysql.ndb_binlog_index table was created even if the server was built without NDB. Now the table is created only if the server is built with NDB. (Bug #22874872) * InnoDB: Unnecessary checks were removed from the ut_cpuid() function which is used to fetch information about the CPU. (Bug #24405292) * InnoDB: An asynchronous read operation on a deleted tablespace raised an error. (Bug #24388498) * InnoDB: dict_col_t accessors were added to the InnoDB code. (Bug #24363566) * InnoDB: dict_col functions in the InnoDB code were replaced by accessors. (Bug #24361098) * InnoDB: dict_index_t functions in the InnoDB code were replaced by accessors. (Bug #24361023) * InnoDB: Unnecessary code that checked for and released reserved adaptive hash index search latches was removed. (Bug #24300175) * InnoDB: A system tablespace data file size greater than 4G on a 32-bit operating system could result in an overflow condition. (Bug #23753625) * InnoDB: Internal methods for accessing table object data were added to to dict_table_t. (Bug #23748128) * InnoDB: An unspecified block size resulted in an empty INFORMATION_SCHEMA.TABLESPACES table on Windows NTFS with a cluster page size greater than or equal to 8K. (Bug #23598872) * InnoDB: The restriction that required the first undo tablespace to use space_id 1 was removed to avoid space_id conflicts with existing tablespaces during upgrade. The first undo tablespace can now use a space_id other than 1. space_id values for undo tablespaces are still assigned in a consecutive sequence. (Bug #23517560) * InnoDB: Internal accessor functions for iterating the indexes of a table were replaced with accessor methods. Dead code was removed. (Bug #23336108) * InnoDB: The mysql.innodb_index_stats and mysql.innodb_table_stats table definitions, which were previously created by an SQL script, are now hard-coded. As a result, the dict_table_schema_check function is longer required and was removed. (Bug #23336079) * InnoDB: The ut_snprint function was replaced by the C++11 snprintf function. (Bug #23329353) * InnoDB: For consistency, instances of ulint in InnoDB code were replaced with space_id_t and page_no_t data types. (Bug #23297169) * InnoDB: Use of boost::atomic in InnoDB code was replaced with std::atomic. (Bug #23280649) * InnoDB: MySQL binaries were not built with the NUMA feature. (Bug #23259754) * InnoDB: References to UNIV_NONINL and UNIV_MUST_NOT_INLINE were removed. The fut0fut.cc and ut0byte.cc files, which were only necessary when UNIV_NONINL was defined, were also removed. (Bug #23150562) * InnoDB: The mutex_own() mapping caused warnings when compiling with Clang or newer GCC compilers. (Bug #23090278) * InnoDB: Compilation of InnoDB with Visual Studio 2015 Update 2 returned warnings. (Bug #23056963) * InnoDB: Querying Performance Schema for InnoDB memory allocation event data incorrectly reported values of 0. (Bug #23020280) * InnoDB: DBUG_OFF compile-time flags were replaced by UNIV_DEBUG flags. To improve error log output, ut_dbg_assertion_failed() now uses sql_print_error() to display the file name, line number, and message in a single line. The thread ID is displayed in a subsequent line. (Bug #22996442, Bug #23028144) * InnoDB: SHOW ENGINE INNODB STATUS output displayed negative spin rounds per wait values. Thanks to Laurynas Biveinis for the patch. (Bug #22844987, Bug #79703) * InnoDB: The innodb_disable_resize_buffer_pool_debug option was removed. The patch for this change also removed a code variable and simplified the buf_pool_resize() function. (Bug #22755053) * InnoDB: After a successful ALTER TABLE ... ALGORITHM=COPY operation, an assertion was raised while building a previous version of a clustered index record. (Bug #22707367) * InnoDB: A DML operation that updated a counter in a table with a virtual index raised on assertion in row_parse_int(). (Bug #22650195) * InnoDB: The InnoDB memcached plugin would not load when compiled with libevent 2.0. (Bug #22646919) * InnoDB: Unused calculations for integer-based rec_per_key values were removed from InnoDB. Integer-based rec_per_key information was replaced by floating point index statistics in an earlier release. (Bug #22625348) * InnoDB: On slow shutdown, purge thread shutdown was initiated before the background rollback thread exited, resulting in an assertion failure. (Bug #22561332) * InnoDB: Blocks were lost in row_vers_old_has_index_entry() due to unfreed heaps. (Bug #22543834, Bug #79973) * InnoDB: A transportable tablespace debug test raised an assertion that was due to a race condition. (Bug #22453668) * InnoDB: The server failed to start due to missing undo tablespaces. (Bug #22452992) * InnoDB: InnoDB recovery asserted while attempting to close an undo tablespace due to buffered undo tablespace changes introduced by the recovery process. (Bug #22361764) * InnoDB: Reallocation of memcached-referenced memory raised an assertion. (Bug #22304250, Bug #79500) * InnoDB: Building InnoDB with C++11 returned "register" deprecation warnings. Handling of "register" deprecation warnings remained in the code after the deprecated "register" keyword was removed. Also, an unused declaration of yyset_extra() was removed. (Bug #22292704) * InnoDB: SHOW CREATE TABLE output for partitioned tables did not accurately display tablespace assignment information for table partitions. (Bug #22245554) * InnoDB: An ALTER TABLE...TRUNCATE PARTITION operation ignored the table's KEY_BLOCK_SIZE attribute and used the default value instead, which is half of the innodb_page_size value. (Bug #22186558, Bug #79223) * InnoDB: Memory leaks in innochecksum were corrected. (Bug #22179518) * InnoDB: A SPACE_ID column was added to the INNODB_CACHED_INDEXES table. The INDEX_ID value is no longer a global unique identifier. (Bug #22172026) * InnoDB: Creating a table with a full-text index and a foreign key constraint failed when foreign_key_checks was disabled. (Bug #22094601, Bug #78955) References: This issue is a regression of: Bug #16845421. * InnoDB: The ha_innobase::m_primary_key field was removed. It was redundant. A boolean predicate, TABLE_SHARE::is_missing_primary_key(), was added. (Bug #21928734, Bug #78662) * InnoDB: A buffer pool load operation that attempted to load an uninitialized page caused a Valgrind failure. (Bug #21747906) * InnoDB: Unused functions introduced by the InnoDB memcached plugin were removed. (Bug #21625760) * InnoDB: An internal global variable used by the innodb_buffer_pool_size configuration option was removed. (Bug #21512749) * InnoDB: An InnoDB page cleaner thread asserted during a buffer pool resize operation. (Bug #21473497) * InnoDB: Log buffer contention was reduced with the addition of a second buffer, allowing for concurrent log buffer writing and flushing. A new mutex was added to protect log buffer flushing. Thanks to Zhai Weixiang for the patch. (Bug #21352937, Bug #77094) * InnoDB: Unused InnoDB and libsql functions and variables were removed, and global symbols were converted to static keywords, where possible. (Bug #21153166, Bug #21141390, Bug #77146, Bug #21178589) * InnoDB: The SysTablespace::parse_units() function now returns the number of pages in a file instead of the number of megabytes. The SysTablespace::normalize_size() function was removed. Error messages in SysTablespace::parse_params() were revised. (Bug #21040199, Bug #76949) * InnoDB: For persistent tables, the internal unique identifier for InnoDB indexes (index_id) now includes a tablespace identifier (space_id,index_id). This change makes index identifiers unique at the tablespace level as well as the InnoDB instance level, and supports future work related to index identifier allocation. (Bug #20737524, Bug #76392) * InnoDB: Code related to innochecksum was cleaned up and reorganized. Checksum functionality is now located in buf0checksum.cc. (Bug #20518099) * InnoDB: __attribute__((nonnull)) was removed from InnoDB code. The attribute is no longer permitted by InnoDB coding guidelines. (Bug #20468234) * InnoDB: A new struct was added to provide a logical interface for handling and manipulating external BLOB field references. (Bug #18195972) * InnoDB: TRUNCATE TABLE is now mapped to DROP TABLE and CREATE TABLE. This change has the following implications: + On systems with a large buffer pool and innodb_adaptive_hash_index enabled, TRUNCATE TABLE operations previously caused a temporary drop in system performance due to an LRU scan that occurred when removing the table's adaptive hash index entries. The remapping of TRUNCATE TABLE to DROP TABLE and CREATE TABLE avoids the problematic LRU scan. + TRUNCATE TABLE is temporarily non-atomic. A server exit during a TRUNCATE TABLE operation can result in a dropped table and orphaned foreign key constraints in the InnoDB SYS_FOREIGN and SYS_FOREIGN_COLS system tables. + The InnoDB memcached plugin flush_all command invokes DELETE instead of TRUNCATE TABLE. DELETE has a higher overhead cost than FLUSH TABLE since it involves undo-logging, delete-marking, and eventually purging each deleted row. + A log checkpoint that occurred for internal truncate table operations on file-per-table tablespaces was replaced by a log flush. (Bug #16834993, Bug #68184, Bug #16207919) * InnoDB: InnoDB wasted most pages in extents used for fragment pages. (Bug #16204823, Bug #67963) * Partitioning: In some cases, an issue with partition pruning being attempted a second time during optimization after all partitions had already been pruned at parsing time led to an assert. (Bug #23194259) * Replication: In Slave_worker::write_info(), DBUG_ENTER() had "Master_info::write_info" as its argument instead of "Slave_worker::write_info". This fix corrects the argument. Thanks to Stewart Smith for the patch. (Bug #21658067, Bug #78133) * The client library failed to build on Solaris using the Cstd library. (Bug #24353920) * MySQL now uses readdir() rather than readdir_r(). The latter has been deprecated since glibc 2.24 and causes debug builds of MySQL to fail. (Bug #23708395) * On OS X, stack trace demangling now occurs for builds compiled using Clang, just as for GCC. (Bug #23606094) * For segmentation faults on FreeBSD, the server did not generate a stack trace. (Bug #23575445, Bug #81827) * CHECKSUM TABLE calculated the checksums for JSON values using the memory addresses of the values rather than the values themselves, which made the checksum vary. Now in such cases the calculation is based on the actual JSON value, and not on that value's address. (Bug #23535703) * libevent was built on OS X even when not needed. (Bug #23228287) * A function that returns a JSON value could cause a server exit if called as part of a CASE statement in a stored procedure. (Bug #23212765) * Passing NULL to a stored procedure expecting a JSON parameter led to an assertion failure in debug builds. (Bug #23209914) * Previously, different values were reported by SHOW ENGINE PERFORMANCE_SCHEMA STATUS and SELECT * FROM performance_schema.memory_summary_global_by_event_name for total memory used in the Performance Schema. The memory for scalable buffer pages, instrumented as memory/performance_schema/scalable_buffer, was missing from the SHOW ENGINE STATUS output. That statement now includes the missing memory, displayed as (pfs_buffer_scalable_container).memory. (Bug #23104498) * The -fexpensive-optimizations option to GCC caused ARM64 and PowerPC builds to compute floating-point operations slightly differently from other platforms. This option was enabled by -O2 and higher optimization levels. The option now is disabled on platforms negatively affected by it. (Bug #23046775) * After a failed administrative operation such as ALTER TABLE ... OPTIMIZE PARTITION, selecting from the Performance Schema in lock-tables mode could hang. (Bug #23044286) * In builds with AddressSanitizer enabled, CAST(... AS BINARY) could cause a server exit. (Bug #22900560) * Some spatial functions were reported using a different spatial function name in error messages. (Bug #22883056, Bug #80627) * Fixed Valgrind warnings with Clang in optimized mode for the my_strtod_int() function. (Bug #22839888) * Precision math operations on values with 64 decimals could produce a 0 result. (Bug #22828692) * Geometry import functions that took an SRID parameter cast it to an unsigned 32-bit integer without warning or error, so negative values or values larger than unsigned 32-bit integer range were silently converted to a number within the range. Now, all geometry functions that take the SRID as a parameter check that it is within unsigned 32-bit integer range and produce an ER_DATA_OUT_OF_RANGE error if not. This also applies to GeoJSON and GeoHash functions that previously checked that the parameter was within range but returned a different error code. (Bug #22819614) * Parsing of JSON path arguments failed to distinguish between a NULL path and one that was syntactically invalid. This has been changed so that parsing of these paths now clearly distinguishes between valid non-NULL paths, NULL paths, and invalid paths. (Bug #22816576) * ST_GeomFromGeoJSON() could return an error with valid arguments. (Bug #22804853) * For debug builds, an assertion could be raised when the server created a temporary table to hold JSON objects. (Bug #22782948) * For debug builds with STRICT_TRANS_TABLES SQL mode enabled, an assertion could be raised by INSERT or REPLACE statements that had made changes that could not be rolled back and that subsequently generated an ER_NO_DEFAULT_FOR_FIELD error. (Bug #22635253) * The optimizer contained a memcpy() call that did not check for overlapping source and destination. (Bug #22537196) * For debug builds, a missing error check on the result of a subquery that accessed a JSON value could raise an assertion. (Bug #22522073) * Preparing a CREATE TABLE ... SELECT statement, then flushing tables (thus closing the table) and executing the prepared statement could cause a server exit. (Bug #22393309) * A prepared statement that used a parameter in the select list of a derived table that was part of a join could cause a server exit. (Bug #22392374, Bug #24380263) * Re-evaluation of a generated column expression could cause access to previously freed memory and a server exit. (Bug #22346120) * HANDLER read statements that searched an index when the target index value was not stored into the row buffer successfully could cause a server exit. (Bug #22321965) * Improper handling of numeric-to-ZEROFILL conversion for NULL values could lead to a server exit. (Bug #22281205) * Using a subquery containing a row constructor to set a variable in a SET statement could cause a server exit. (Bug #22276843) * If the SQL mode did not include ALLOW_INVALID_DATES, a query that contained invalid_date IN (subquery) and was handled by subquery materialization could cause a server exit. (Bug #22262843) * For the embedded server, the code following the check for invalid arguments was invoked with missing or incorrect arguments, which could lead to an improper exit. (Bug #22262706) * Queries that executed a JSON function that raised an error could cause a server exit. (Bug #22253965) * On OS X, vio_io_wait() used select(), limiting the number of file descriptors to 1024. Now kqueue event notification is used instead to avoid this limit. FreeBSD was changed to use kqueue as well. (Bug #22244911) * On Windows, setting the global log_syslog system variable in multiple threads could cause a server exit. (Bug #22180046) * Memory leaks could result if stored routine loading involved temporarily changing the default database and errors occurred restoring the original default database. (Bug #22179795) * CMake configuration was adjusted to check for -Wxxx compiler options instead of -Wno-xxx because the latter produce false positives for GCC. (Bug #21881753) * Views could evaluate user-defined or SQL functions before evaluating restrictions from the view definition. (Bug #20933307) * The return value from an fread() call was not checked. (Bug #20671150) * With -DENABLE_DTRACE=ON, CMake did not check whether a working DTrace installation was present. Now it checks and aborts if DTrace cannot be found. (Bug #20671056) * If given a relative path name for the --log-error option, mysqld could sent stdout and stderr to the wrong location. (Bug #20609063) * Evaluation of LEAST() and GREATEST() could use too small a sort buffer for datetime and string literals, causing an assertion to be raised. (Bug #20565160) * The range of error numbers for errors that are new in MySQL 8.0 has been designated to begin with 3500. (Bug #20538173) * Debian packaging was updated not to set the sql_mode system variable in my.cnf. (Bug #20535729) * Statements such as INSERT and LOAD DATA that use the REPLACE or IGNORE keyword to handle duplicate records could affect subsequent operations. (Bug #20017428) * CREATE TABLE ... SELECT where non-BIT data was selected from the source table into a BIT column in the destination table could cause a server exit. (Bug #19930894) * Compilation failed on OS X when MySQL was configured with -DMYSQL_MAINTAINER_MODE=1 and compiled with clang/Xcode 6.0. (Bug #19694515, Bug #74100) * For CHANGE MASTER TO statements rewritten to filter the password before being written to the general query log, any MASTER_AUTO_POSITION clause was lost. (Bug #19622609) * Use of the VALUES() function in a SELECT clause could result in a server exit. (Bug #19601973) * A potential null-pointer dereference and memory leak in table-rename code were corrected. (Bug #18194270) * Using MATCH ... AGAINST to compare a character column and an aggregate function could cause a server exit. (Bug #17865492) * Slightly different values for the number of connections could be reported in various information sources, such as the Connections status variable, Performance Schema threads and global_status tables, and SHOW PROCESSLIST statement. (Bug #17666696) * A query with a subquery containing a set operation with an outer reference might cause a server exit. (Bug #17270896) * Using GRANT to change a password for an invalid user produced an error, but also updated the mysql.user system table. (Bug #17180985) * The parser for spatial WKT data accepted numbers such as 0.23 but not .23, the equivalent value without the leading zero. Now both formats are accepted. (Bug #17167633) * Previously, if a client attempted to send connection attribute key/value pairs that in aggregate had a size larger than the value of the performance_schema_session_connect_attrs_size system variable, the Performance Schema truncated the attribute data. In addition, the Performance Schema wrote this message to the error log if the log_warnings system variable was greater than zero: [Warning] Connection attributes of length N were truncated This message was not helpful to a DBA attempting to determine the problematic client, so several changes have been made to connection attribute handling: + Truncation of connection attributes still occurs for excessive data, but the log message is more informative. It includes the number of bytes lost, the connection identifier, and information about the client user. The additional information should enable DBAs to more easily identify clients for which attribute truncation occurred. + When truncation occurs, a _truncated attribute is added to the session attributes with a value indicating how many bytes were lost, if the attribute buffer has sufficient space. This enables the Performance Schema to expose per-connection truncation information in the connection attribute tables. + A new status variable, Performance_schema_session_connect_attrs_longest_see n, indicates the longest connection attribute buffer smaller than 64KB seen by the server. If this value is larger than performance_schema_session_connect_attrs_size, attribute truncation has occurred, and DBAs may wish to increase the latter value, or, alternatively, investigate which clients are sending large amounts of attribute data. For more information, see Performance Schema Connection Attribute Tables (http://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html). (Bug #16576959) * For abnormal server exit on Windows, the server previously created a minidump file named module_name.dmp, where module_name is the name of the server executable file. To prevent earlier minidump files from being overwritten, minidump file names now include the process ID and have the form module_name..piddmp; for example, mysqld.exe.7296.dmp. (Bug #12779463) * For queries on INFORMATION_SCHEMA tables, comparisons of schema and table names could be case sensitive or insensitive, depending on the characteristics of the underlying file system and the lower_case_table_names system variable value. Furthermore, it was ineffective to provide a COLLATE clause to change the comparison properties because that clause was ignored. This has been changed so that COLLATE is no longer ignored and can be used to obtain the desired comparison properties. (Bug #11748044, Bug #34921) * FLOOR(CEIL()) truncated large BIGINT UNSIGNED arguments. (Bug #80873, Bug #23013359) * Manipulation of a value returned by the JSON_MERGE() function using JSON_SET() sometimes produced an invalid result. (Bug #80787, Bug #22961128) * ST_AsGeoJSON() failed when geometry arguments were supplied using user-defined variables. (Bug #80697, Bug #22912800) * CAST(expr AS BINARY(N) ) unexpectedly returned NULL for some valid values of N. (Bug #80630, Bug #22885819) * If rounding occurred while storing a predicate value, the range optimizer might not return correct results for the < and <= operators. (Bug #80244, Bug #22661012) * For the mf_iocache unit test, add a missing va_end(), fix a memory leak by calling my_end(), and add a target for the test. Thanks to Daniel Black for the patch on which these changes are based. (Bug #80085, Bug #22578670) * SELECT DISTINCT SUBSTR() could incorrectly discard values as duplicates for large position or length arguments. The same issue also affected LEFT() and RIGHT(). (Bug #80047, Bug #22565155) * SUBSTRING_INDEX(str, delim, count) did not properly handle count values larger than 32 bits. (Bug #79978, Bug #22545429) * For calls to CONVERT(), literal string arguments could be modified during execution, producing incorrect results. (Bug #79924, Bug #22531111) * REPLACE('a', BINARY 'b', NULL) returned 'a' rather than NULL. (Bug #79912, Bug #22523836) * Transaction state tracking now avoids a function that is not 8-bit safe, for enhanced compatibility with nonstandard character sets. (Bug #79905, Bug #22523383) * GREATEST() and LEAST() treated all integer input as signed. (Bug #79902, Bug #22523685) * Lines in the general query log were missing a tab between the timestamp and the thread ID. Thanks to Tsubasa Tanaka for the patch. (Bug #79868, Bug #22508563) * Some comparisons between unsigned values and negative upper limits could return incorrect results (for example, CAST(100 AS UNSIGNED) BETWEEN 1 AND -1). (Bug #79857, Bug #22501606) * The REPEAT() function did not properly handle output from the SUBSTR() function. (Bug #79695, Bug #22391186) * The JSON_TYPE() function now shows the type of BIT literals cast to JSON as BLOB, rather than BIT. (Bug #79308, Bug #22297987) * Configuring MySQL with the -DWITH_UBSAN=ON CMake option produced a server that was not fully functional. (Bug #79238, Bug #22194071) * sql_common.h, a header file included in MySQL distributions, included and was therefore dependent on hash.h, a header file not included in MySQL distributions. This resulted in compilation failures. To eliminate this dependency, sql_common.h was modified to no longer include hash.h. (Bug #79237, Bug #22187997, Bug #70672, Bug #17633467) * Timers used for checking maximum statement execution time were initialized even when the server was started with the --help option. If --help is given, this is no longer done. (Bug #79182, Bug #22172389) * The optimizer failed when trying to optimize away expressions of the form IF(true, '2015-01-01', '2015-01-01') IS NOT NULL. (Bug #79114, Bug #22148586) * Subtraction of an unsigned decimal could return a negative value, but with metadata type information of UNSIGNED BINARY. Subtraction for unsigned decimal subtraction now is handled the same way as for unsigned integer: Produce an ER_DATA_OUT_OF_RANGE error if the result is negative, unless the NO_UNSIGNED_SUBTRACTION SQL mode is enabled. (Bug #78914, Bug #22083757) * Handling by the HEX() function of numbers larger than 2^64 was improved. (Bug #78828, Bug #22297983) References: This issue is a regression of: Bug #9854. * The client-side plugin deinitialization function signature was changed from int (*deinit)() to int (*deinit)(void) to avoid warnings when compiling with -Wstrict-prototypes. (Bug #78177, Bug #21680094, Bug #81419, Bug #23282498) * CREATE TABLE reported an incorrect error if a very long or incorrect path name was specified for the DATA DIRECTORY or INDEX DIRECTORY table option. Now ER_PATH_LENGTH or ER_WRONG_VALUE are reported for those cases. (Bug #76635, Bug #20857556) * The server now tries to provide more informative messages for these error codes: ER_CANT_CREATE_DB, ER_CANT_CREATE_TABLE, ER_DB_DROP_DELETE, ER_DB_DROP_RMDIR, ER_ERROR_DURING_COMMIT, ER_ERROR_DURING_ROLLBACK, ER_GET_ERRNO. (Bug #76298, Bug #20694494) * For some instances of failure to prepare an XA transaction, incomplete transaction cleanup could raise an assertion. (Bug #75809, Bug #20488921) * mysqld could attempt to close an invalid socket file descriptor. Thanks to Zhai Weixiang for the patch. (Bug #75778, Bug #20504513) * A statement of the following form converted the table data to latin1, but also changed the table default character set to latin1 and ignored the utf8 clause: ALTER TABLE tbl_name CHARACTER SET utf8, CONVERT TO CHARACTER SET lati n1; Thanks to Daniel Black for the patch. (Bug #75320, Bug #20279241) * In mysqld.cc, the abort_loop variable was quantified with volatile, which on some platforms could result in changes not being seen immediately in threads running on different cores. Thanks to Stewart Smith for the patch. (Bug #74846, Bug #20134637) * Calling a procedure which created a view from a trigger, or creating a function that called a procedure that executed RENAME TABLE could, under certain circumstances, raise an assertion. (Bug #74740, Bug #19988193, Bug #21198646) * Timestamps for server-side prepared statements could be written to the binary log up to a second behind timestamps for the corresponding nonprepared statements. (Bug #74550, Bug #19894382) * For dynamic storage engine plugins, DROP TABLE, TRUNCATE TABLE, and RENAME TABLE did not work due to incorrectly determining the engine from the .frm file. (Bug #74277, Bug #19902868) * Executed prepared statements are logged with ? parameter markers replaced by data values. Construction of the logged string was inefficient and has been improved. (Bug #73056, Bug #20955496) * Assignment by a plugin to its thread variables of string type could leak memory. (Bug #71759, Bug #19917521) * Grouping with a view could produce an ER_INVALID_GROUP_FUNC_USE error ("Invalid use of group function") when selecting from the base table did not. (Bug #70220, Bug #17406425) * Test cases that were intended to be storage engine-agnostic but were actually using a specific engine were corrected.