Released on 11 Oct 2010
MySQL 5.1.52 Changelog

Bugs Fixed

  • Security Fix; InnoDB: Issuing TRUNCATE TABLE and examining the same table's information in the INFORMATION_SCHEMA database at the same time could cause a crash in the debug version of the server. (Bug #54678)

  • Security Fix: The server crashed for assignment of values of types other than Geometry to items of type GeometryCollection (MultiPoint, MultiCurve, MultiSurface). Now the server checks the value type and fails with bad geometry value if it detects incorrect parameters. (Bug #55531)

  • Security Fix: EXPLAIN EXTENDED caused a server crash with some prepared statements. (Bug #54494)

  • Security Fix: In prepared-statement mode, EXPLAIN for a SELECT from a derived table caused a server crash. (Bug #54488)

  • Important Change; Replication: The LOAD DATA INFILE statement is now considered unsafe for statement-based replication. When using statement-based logging mode, the statement now produces a warning; when using mixed-format logging, the statement is made using the row-based format. (Bug #34283)

  • InnoDB: The server could crash with a high volume of concurrent LOCK TABLES and UNLOCK TABLES statements. (Bug #57345)

  • InnoDB: InnoDB incorrectly reported an error when a cascading foreign key constraint deleted more than 250 rows. (Bug #57255)

  • InnoDB: For debug builds, a SELECT ... FOR UPDATE statement affecting a range of rows in an InnoDB table could cause a server crash. (Bug #56716)

  • InnoDB: Improved the performance of UPDATE operations on InnoDB tables, when only non-indexed columns are changed. (Bug #56340)

  • InnoDB: The server could crash on shutdown, if started with --innodb-use-system-malloc=0. (Bug #55627)

  • InnoDB: For an InnoDB table with an auto-increment column, the server could crash if the first statement that references the table after a server restart is a SHOW CREATE TABLE statement. (Bug #55277)

  • InnoDB: Setting the PACK_KEYS=0 table option for an InnoDB table prevented new indexes from being added to the table. (Bug #54606)

  • InnoDB: Changed the locking mechanism for the InnoDB data dictionary during ROLLBACK operations, to improve concurrency for REPLACE statements. (Bug #54538)

  • InnoDB: InnoDB transactions could be incorrectly committed during recovery, rather than rolled back, if the server crashed and was restarted after performing ALTER TABLE ... ADD PRIMARY KEY on an InnoDB table, or some other operation that involves copying the entire table. (Bug #53756)

  • Partitioning; Replication: Attempting to execute LOAD DATA on a partitioned MyISAM table while using statement-based logging mode caused the master to hang or crash. (Bug #51851)

  • Partitioning: Multiple-table UPDATE statements involving a partitioned MyISAM table could cause this table to become corrupted. Not all tables affected by the UPDATE needed to be partitioned for this issue to be observed. (Bug #55458)

  • Partitioning: EXPLAIN PARTITIONS returned bad estimates for range queries on partitioned MyISAM tables. In addition, values in the rows column of EXPLAIN PARTITIONS output did not take partition pruning into account. (Bug #53806, Bug #46754)

  • Replication: Backticks used to enclose identifiers for savepoints were not preserved in the binary log, which could lead to replication failure when the identifier, stripped of backticks, could be misinterpreted, causing a syntax or other error.

    This could cause problems with MySQL application programs making use of generated savepoint IDs. If, for instance, java.sql.Connection.setSavepoint() is called without any parameters, Connector/J automatically generates a savepoint identifier consisting of a string of hexadecimal digits 0-F encased in backtick (`) characters. If such an ID took the form `NeN` (where N represents a string of the decimal digits 0-9, and e is a literal uppercase or lowercase E character). Removing the backticks when writing the identifier into the binary log left behind a substring which the slave MySQL server tried to interpret as a floating point number, rather than as an identifier. The resulting syntax error caused loss of replication. (Bug #55961)

    References: See also Bug #55962.

  • When mysqld was started as a service on Windows and mysqld was writing the error log to a file (for example, if it was started with the --log-error option), the server reassigned the file descriptors of the stdout and stderr streams to the file descriptor of the log file. On Windows, if stdout or stderr is not associated with an output stream, the file descriptor returns a negative value. Previously, this caused the file descriptor reassignment to fail and the server to abort. To avoid this problem on Windows, the server now first assigns the stdout and stderr streams to the log file stream by opening this file. This causes the stdout and stderr file descriptors to be nonzero and the server can successfully reassign them to the file descriptor of the log file. (Bug #56821)

    References: This bug is a regression of Bug #29751.

  • Memory leaks detected by Valgrind were corrected. (Bug #56709)

  • If a query specified a DATE or DATETIME value in a format different from 'YYYY-MM-DD HH:MM:SS', a greater-than-or-equal (>=) condition matched only greater-than values in an indexed TIMESTAMP column. (Bug #55779, Bug #50774, Bug #11758558)

  • If there was an active SELECT statement, an error arising during trigger execution could cause a server crash. (Bug #55421)

  • With an UPDATE IGNORE statement including a subquery that was evaluated using a temporary table, an error transferring the data from the temporary was ignored, causing an assertion to be raised. (Bug #54543)

  • Row subqueries producing no rows were not handled as UNKNOWN values in row-comparison expressions. (Bug #54190)

  • The max_length metadata value of MEDIUMBLOB types was reported as 1 byte greater than the correct value. (Bug #53296)

  • In some cases, when the left part of a NOT IN subquery predicate was a row and contained NULL values, the query result was incorrect. (Bug #51070)

  • For some queries, the optimizer produced incorrect results using the Index Merge access method with InnoDB tables. (Bug #50402)

  • EXPLAIN produced an incorrect rows value for queries evaluated using an index scan and that included LIMIT, GROUP BY, and ORDER BY on a computed column. (Bug #50394)

  • mysql_store_result() and mysql_use_result() are not for use with prepared statements and are not intended to be called following mysql_stmt_execute(), but failed to return an error when invoked that way. (Bug #47485)

  • Using REPAIR TABLE tbl_name USE_FRM on a MERGE table caused the server to crash. (Bug #46339)

  • A malformed packet sent by the server when the query cache was in use resulted in lost-connection errors. (Bug #42503)

  • CREATE TABLE failed if a column referred to in an index definition and foreign key definition had different lettercases in the two definitions. (Bug #39932)