Released on 23 May 2007
MySQL 5.0.42 Changelog

This is a Monthly Rapid Update release of the MySQL Enterprise Server 5.0.

This section documents all changes and bug fixes that have been applied since the last MySQL Enterprise Server release (5.0.40).

  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • Incompatible Change: Prior to this release, when DATE values were compared with DATETIME values, the time portion of the DATETIME value was ignored, or the comparison could be performed as a string compare. Now a DATE value is coerced to the DATETIME type by adding the time portion as 00:00:00. To mimic the old behavior, use the CAST() function as shown in this example: SELECT date_col = CAST(NOW() AS DATE) FROM table;. (Bug #28929)

  • Incompatible Change: INSERT DELAYED is now downgraded to a normal INSERT if the statement uses functions that access tables or triggers, or that is called from a function or a trigger.

    This was done to resolve the following interrelated issues:

    • The server could abort or deadlock for INSERT DELAYED statements for which another insert was performed implicitly (for example, using a stored function that inserted a row).

    • A trigger using an INSERT DELAYED caused the error INSERT DELAYED can't be used with table ... because it is locked with LOCK TABLES although the target table was not actually locked.

    • INSERT DELAYED into a table with a BEFORE INSERT or AFTER INSERT trigger gave an incorrect NEW pseudocolumn value and caused the server to deadlock or abort.

    (Bug #21483)

    References: See also Bug #20497, Bug #21714.

  • mysqld_multi now understands the --no-defaults, --defaults-file, and --defaults-extra-file options. The --config-file option is deprecated; if given, it is treated like --defaults-extra-file. (Bug #27390)

Bugs Fixed

  • Security Fix: Use of a view could enable a user to gain update privileges for tables in other databases. (Bug #27878, CVE-2007-3782)

  • Security Fix: The requirement of the DROP privilege for RENAME TABLE was not enforced. (Bug #27515, CVE-2007-2691)

  • Security Fix: If a stored routine was declared using SQL SECURITY INVOKER, a user who invoked the routine could gain privileges. (Bug #27337, CVE-2007-2692)

  • MySQL Cluster: The cluster waited 30 seconds instead of 30 milliseconds before reading table statistics. (Bug #28093)

  • MySQL Cluster: INSERT IGNORE wrongly ignored NULL values in unique indexes. (Bug #27980)

  • MySQL Cluster: The name of the month March was given incorrectly in the cluster error log. (Bug #27926)

  • MySQL Cluster: It was not possible to add a unique index to an NDB table while in single user mode. (Bug #27710)

  • MySQL Cluster: Repeated insertion of data generated by mysqldump into NDB tables could eventually lead to failure of the cluster. (Bug #27437)

  • MySQL Cluster: ndb_connectstring did not appear in the output of SHOW VARIABLES. (Bug #26675)

  • Replication: Aborting a statement on the master that applied to a nontransactional statement broke replication. The statement was written to the binary log but not completely executed on the master. Slaves receiving the statement executed it completely, resulting in loss of data synchrony. Now an error code is written to the error log so that the slaves stop without executing the aborted statement. (That is, replication stops, but synchrony to the point of the stop is preserved and you can investigate the problem.) (Bug #26551)

  • Replication: Restoration of the default database after stored routine or trigger execution on a slave could cause replication to stop if the database no longer existed. (Bug #25082)

  • Cluster API: For BLOB reads on operations with lock mode LM_CommittedRead, the lock mode was not upgraded to LM_Read before the state of the BLOB had already been calculated. The NDB API methods affected by this problem included the following:

    • NdbOperation::readTuple()

    • NdbScanOperation::readTuples()

    • NdbIndexScanOperation::readTuples()

    (Bug #27320)

  • On the IBM i5 platform, the installation script in the .savf binaries unconditionally executed the mysql_install_db script. This problem was fixed in a repackaged distribution numbered 5.0.42b. (Bug #30084)

  • A query with a NOT IN subquery predicate could cause a crash when the left operand of the predicate evaluated to NULL. (Bug #28375)

  • For InnoDB, in some rare cases the optimizer preferred a more expensive ref access to a less expensive range access. (Bug #28189)

  • A performance degradation was observed for outer join queries to which a not-exists optimization was applied. (Bug #28188)

  • SELECT * INTO OUTFILE ... FROM INFORMATION_SCHEMA.SCHEMATA failed with an Access denied error, even for a user who had the FILE privilege. (Bug #28181)

  • Comparisons of DATE or DATETIME values for the IN() function could yield incorrect results. (Bug #28133)

  • The server could hang for INSERT IGNORE ... ON DUPLICATE KEY UPDATE if an update failed. (Bug #28000)

  • CAST() to DECIMAL did not check for overflow. (Bug #27957)

  • For INSERT ... ON DUPLICATE KEY UPDATE statements that affected many rows, updates could be applied to the wrong rows. (Bug #27954)

  • Early NULL-filtering optimization did not work for eq_ref table access. (Bug #27939)

  • Views ignored precision for CAST() operations. (Bug #27921)

  • Nongrouped columns were permitted by * in ONLY_FULL_GROUP_BY SQL mode. (Bug #27874)

  • Debug builds on Windows generated false alarms about uninitialized variables with some Visual Studio runtime libraries. (Bug #27811)

  • Certain queries that used uncorrelated scalar subqueries caused EXPLAIN to crash. (Bug #27807)

  • Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug #27792)

  • Performing a UNION on two views that had ORDER BY clauses resulted in an Unknown column error. (Bug #27786)

  • mysql_install_db is supposed to detect existing system tables and create only those that do not exist. Instead, it was exiting with an error if tables already existed. (Bug #27783)

  • mysqld did not check the length of option values and could crash with a buffer overflow for long values. (Bug #27715)

  • Comparisons using row constructors could fail for rows containing NULL values. (Bug #27704)

  • LOAD DATA did not use CURRENT_TIMESTAMP as the default value for a TIMESTAMP column for which no value was provided. (Bug #27670)

  • mysqldump could not connect using SSL. (Bug #27669)

  • On Linux, the server could not create temporary tables if lower_case_table_names was set to 1 and the value of tmpdir was a directory name containing any uppercase letters. (Bug #27653)

  • For InnoDB tables, a multiple-row INSERT of the form INSERT INTO t (id...) VALUES (NULL...) ON DUPLICATE KEY UPDATE id=VALUES(id), where id is an AUTO_INCREMENT column, could cause ERROR 1062 (23000): Duplicate entry... errors or lost rows. (Bug #27650)

  • The XML output representing an empty result was an empty string rather than an empty <resultset/> element. (Bug #27608)

  • Comparison of a DATE with a DATETIME did not treat the DATE as having a time part of 00:00:00. (Bug #27590)

    References: See also Bug #32198.

  • The fix for Bug #17212 provided correct sort order for misordered output of certain queries, but caused significant overall query performance degradation. (Results were correct (good), but returned much more slowly (bad).) The fix also affected performance of queries for which results were correct. The performance degradation has been addressed. (Bug #27531)

  • The CRC32() function returns an unsigned integer, but the metadata was signed, which could cause certain queries to return incorrect results. (For example, queries that selected a CRC32() value and used that value in the GROUP BY clause.) (Bug #27530)

  • An interaction between SHOW TABLE STATUS and other concurrent statements that modify the table could result in a divide-by-zero error and a server crash. (Bug #27516)

  • A race condition between DROP TABLE and SHOW TABLE STATUS could cause the latter to display incorrect information. (Bug #27499)

  • Nested aggregate functions could be improperly evaluated. (Bug #27363)

  • A stored function invocation in the WHERE clause was treated as a constant. (Bug #27354)

  • Failure to allocate memory associated with transaction_prealloc_size could cause a server crash. (Bug #27322)

  • mysqldump crashed if it got no data from SHOW CREATE PROCEDURE (for example, when trying to dump a routine defined by a different user and for which the current user had no privileges). Now it prints a comment to indicate the problem. It also returns an error, or continues if the --force option is given. (Bug #27293)

  • mysqlbinlog produced different output with the -R option than without it. (Bug #27171)

  • Flow control optimization in stored routines could cause exception handlers to never return or execute incorrect logic. (Bug #26977)

  • mysqldump would not dump a view for which the DEFINER no longer exists. (Bug #26817)

  • Creating a temporary table with InnoDB when using the one-file-per-table setting, and when the host file system for temporary tables was tmpfs, would cause an assertion within mysqld. This was due to the use of O_DIRECT when opening the temporary table file. (Bug #26662)

  • mysql_upgrade did not detect failure of external commands that it runs. (Bug #26639)

  • Index hints (USE INDEX, IGNORE INDEX, FORCE INDEX) cannot be used with FULLTEXT indexes, but were not being ignored. (Bug #25951)

  • If CREATE TABLE t1 LIKE t2 failed due to a full disk, an empty t2.frm file could be created but not removed. This file then caused subsequent attempts to create a table named t2 to fail. This is easily corrected at the file system level by removing the t2.frm file manually, but now the server removes the file if the create operation does not complete successfully. (Bug #25761)

  • mysql_upgrade did not pass a password to mysqlcheck if one was given. (Bug #25452)

  • On Windows, mysql_upgrade was sensitive to lettercase of the names of some required components. (Bug #25405)

  • For storage engines that permit the current auto-increment value to be set, using ALTER TABLE ... ENGINE to convert a table from one such storage engine to another caused loss of the current value. (For storage engines that do not support setting the value, it cannot be retained anyway when changing the storage engine.) (Bug #25262)

  • Several math functions produced incorrect results for large unsigned values. ROUND() produced incorrect results or a crash for a large number-of-decimals argument. (Bug #24912)

  • The result set of a query that used WITH ROLLUP and DISTINCT could lack some rollup rows (rows with NULL values for grouping attributes) if the GROUP BY list contained constant expressions. (Bug #24856)

  • For queries that used ORDER BY with InnoDB tables, if the optimizer chose an index for accessing the table but found a covering index that enabled the ORDER BY to be skipped, no results were returned. (Bug #24778)

  • Concurrent execution of CREATE TABLE ... SELECT and other statements involving the target table suffered from various race conditions, some of which might have led to deadlocks. (Bug #24738)

  • An attempt to execute CREATE TABLE ... SELECT when a temporary table with the same name already existed led to the insertion of data into the temporary table and creation of an empty nontemporary table. (Bug #24508)

  • The MERGE storage engine could return incorrect results when several index values that compare equality were present in an index (for example, 'gross' and 'gross ', which are considered equal but have different lengths). (Bug #24342)

  • Some upgrade problems are detected and better error messages suggesting that mysql_upgrade be run are produced. (Bug #24248)

  • Some views could not be created even when the user had the requisite privileges. (Bug #24040)

  • Using CAST() to convert DATETIME values to numeric values did not work. (Bug #23656)

  • The AUTO_INCREMENT value would not be correctly reported for InnoDB tables when using SHOW CREATE TABLE statement or mysqldump command. (Bug #23313)

  • SELECT COUNT(*) from a table containing a DATETIME NOT NULL column could produce spurious warnings with the NO_ZERO_DATE SQL mode enabled. (Bug #22824)

  • Using SET GLOBAL to change the lc_time_names system variable had no effect on new connections. (Bug #22648)

  • A multiple-table UPDATE could return an incorrect rows-matched value if, during insertion of rows into a temporary table, the table had to be converted from a MEMORY table to a MyISAM table. (Bug #22364)

  • yaSSL crashed on pre-Pentium Intel CPUs. (Bug #21765)

  • A slave that used --master-ssl-cipher could not connect to the master. (Bug #21611)

  • Quoted labels in stored routines were mishandled, rendering the routines unusable. (Bug #21513)

  • CREATE TABLE IF NOT EXISTS ... SELECT caused a server crash if the target table already existed and had a BEFORE INSERT trigger. (Bug #20903)

  • Deadlock occurred for attempts to execute CREATE TABLE IF NOT EXISTS ... SELECT when LOCK TABLES had been used to acquire a read lock on the target table. (Bug #20662, Bug #15522)

  • Changing a utf8 column in an InnoDB table to a shorter length did not shorten the data values. (Bug #20095)

  • The omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions. (Bug #16377)

  • INSERT...ON DUPLICATE KEY UPDATE could cause Error 1032: Can't find record in ... for inserts into an InnoDB table unique index using key column prefixes with an underlying utf8 string column. (Bug #13191)

  • Having the EXECUTE privilege for a routine in a database should make it possible to USE that database, but the server returned an error instead. This has been corrected. As a result of the change, SHOW TABLES for a database in which you have only the EXECUTE privilege returns an empty set rather than an error. (Bug #9504)