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:
Incompatible Change:
Prior to this release, when DATE values were
compared with DATETIME values, the time
portion of the DATETIME value was ignored.
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 in the following
way: SELECT .
(Bug#28929)date_col =
CAST(NOW() as DATE);
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, via 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.
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 allow 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)
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()
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)
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)
Non-grouped columns were allowed 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)
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 filesystem 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)
Aborting a statement on the master that applied to a non-transactional 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)
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 filesystem 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 allow 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)
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)
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 non-temporary 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)

User Comments
Add your own comment.