Appendix D. MySQL Change History

Table of Contents

D.1. Changes in release 5.1.x (Development)
D.1.1. Changes in release 5.1.6 (Not yet released)
D.1.2. Changes in release 5.1.5 (Not yet released)
D.1.3. Changes in release 5.1.4 (21 December 2005)
D.1.4. Changes in release 5.1.3 (29 November 2005)
D.1.5. Changes in release 5.1.2 (Not released)
D.1.6. Changes in release 5.1.1 (Not released)
D.2. Changes in MyODBC
D.2.1. Changes in MyODBC 3.51.13
D.2.2. Changes in MyODBC 3.51.12
D.2.3. Changes in MyODBC 3.51.11

This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 5.1, which is currently MySQL 5.1.5-alpha. Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 4.1 Reference Manual.

We update this section as we add new features in the 5.1 series, so that everybody can follow the development process.

Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.

The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.

The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.

D.1. Changes in release 5.1.x (Development)

The following changelog shows what has been done in the 5.1 tree:

For a full list of changes, please refer to the changelog sections for each individual 5.1.x release.

D.1.1. Changes in release 5.1.6 (Not yet released)

Functionality added or changed:

  • Subselect could return wrong results when records cache and grouping was involved. (Bug #15347)

  • Words with apostrophes are now matched in a FULLTEXT search against non-apostrophe words (i.e. a search for Jerry will match against the term Jerry's). (Bug #14194)

  • The ARCHIVE storage engine supports the AUTO_INCREMENT column attribute and the AUTO_INCREMENT table option. Section 15.8, “The ARCHIVE Storage Engine”.

Bugs fixed:

  • Temporary table aliasing did not work inside stored functions. (Bug #12198)

  • Parallel builds occasionally failed on Solaris. (Bug #16282)

D.1.2. Changes in release 5.1.5 (Not yet released)

Functionality added or changed:

  • Plugins now can have status variables that are displayed in the output from SHOW STATUS.

  • Added the XML functions ExtractValue() and UpdateXML(). ExtractValue() returns the content of a fragment of XML matching a given XPath expression. UpdateXML() replaces the element selected from a fragment of XML by an XPath expression supplied by the user with a second XML fragment (also user-supplied), and returns the modified XML. See Section 12.9, “XML Functions”.

  • Added the --base64-output option to mysqlbinlog to print all binary log entries using base64 encoding. This is for debugging only. Logs produced using this option should not be applied on production systems.

  • Added the --port-open-timeout option to mysqld to control how many seconds the server should wait for the TCP/IP port to become free if it cannot be opened. (Bug #15591)

  • Two new Hungarian collations are included: utf8_hungarian_ci and ucs2_hungarian_ci. These support the correct sort order for Hungarian vowels. However, they do not support the correct order for sorting Hungarian consonant contractions; this issue will be fixed in a future release.

Bugs fixed:

  • InnoDB: Comparison of indexed VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin columns using LIKE could fail. (Bug #14583)

  • Creating a trigger caused a server crash if the table or trigger database was not known because no default database had been selected. (Bug #14863)

  • Issuing a DROP USER command could cause some users to encounter a hostname is not allowed to connect to this MySQL server error. (Bug #15775)

  • The --plugin_dir option was not working. Also fix error with specifying parser name for fulltext. (Bug #16068)

  • Attempting to insert into a table partitioned by LIST a value less than any specified in one of the table's partition definitions resulted in a server crash. In such cases, mysqld now returns ERROR 1500 (HY000): Table has no partition for value v , where v is the out-of-range value. (Bug #15819)

D.1.3. Changes in release 5.1.4 (21 December 2005)

Functionality added or changed:

  • Added the mysqlslap program, which is designed to emulate client load for a MySQL server and report the timing of each stage. It works as if multiple clients are accessing the server.

  • Added the --server-id option to mysqlbinlog to enable only those events created by the server having the given server ID to be extracted. (Bug #15485)

  • It is now possible to build the server such that MyISAM tables can support up to 128 keys rather than the standard 64. This can be done by configuring the build using the option --with-max-indexes=N, where N≤128 is the maximum number of indexes to permit per table. (Bug #10932)

  • The bundled BDB library was upgraded to version 4.4.16.

  • Added the cp1250_polish_ci collation for the cp1250 character set.

  • Added the myisam_use_mmap system variable.

  • Added the --bdb-data-direct and --bdb-log-direct server options.

Bugs fixed:

  • BDB: A DELETE, INSERT, or UPDATE of a BDB table could cause the server to crash where the query contained a subquery using an index read. (Bug #15536)

  • A left join on a column that having a NULL value could cause the server to crash. (Bug #15268)

  • It was not possible to reorganize a partition reusing a discarded partition name.

    Now, for example, you can create a table such as this one:

    CREATE TABLE t1 (a INT) 
        PARTITION BY RANGE (a) (
          PARTITION p0 VALUES LESS THAN (10),
          PARTITION p1 VALUES LESS THAN (20),
          PARTITION p2 VALUES LESS THAN MAXVALUE
        );
    

    and then repartition it as shown here:

    ALTER TABLE t1 REORGANIZE PARTITION p2 INTO (
        PARTITION p2 VALUES LESS THAN (30)
    );
    

    Previously, attempting to do so would produce the error All partitions must have unique names in the table . (Bug #15521)

  • NDB Cluster: The --ndb option for perror did not function. (Bug #15486)

  • The BLACKHOLE storage engine did not handle transactions properly: Rolled-back transactions were written to the binary log. Now they ae not. (Bug #15406)

  • NDB Cluster: Using ORDER BY primary_key_column when selecting from a table having the primary key on a VARCHAR column caused a forced shutdown of the cluster. (Bug #14828, Bug #15240, Bug #15682, Bug #15517)

  • ANALYZE TABLE did not properly update table statistics for a MyISAM table with a FULLTEXT index containing stopwords, so a subsequent ANALYZE TABLE would not recognize the table as having already been analyzed. (Bug #14902)

  • The maximum value of MAX_ROWS was handled incorrectly on 64-bit systems. (Bug #14155)

  • Multiple-table update operations were counting updates and not updated rows. As a result, if a row had several updates it was counted several times for the “rows matched” value but updated only once. (Bug #15028)

  • SELECT queries that began with an opening parenthesis were not being placed in the query cache. (Bug #14652)

  • Space truncation was being ignored when inserting into BINARY or VARBINARY columns. Now space truncation results in a warning, or an error in strict mode. (Bug #14299)

  • Selecting from a view processed with the temptable algorithm caused a server crash if the query cache was enabled. (Bug #15119)

  • Creating a view that referenced a stored function that selected from a view caused a crash upon selection from the view. (Bug #15096)

  • Creating a view within a stored procedure could result in an out of memory error or a server crash. (Bug #14885)

  • SHOW CREATE DATABASE was sometimes refused when the client had privileges for the database. (Bug #9785)

  • mysql ignored the MYSQL_TCP_PORT environment variable. (Bug #5792)

  • ROW_COUNT() returned an incorrect result after EXECUTE of a prepared statement. (Bug #14956)

  • Invalid casts to DATE values now result in a message of Incorrect datetime value, rather than Truncated incorrect datetime value. (Bug #8294)

  • Attempts to assign NULL to a NOT NULL column in strict mode now result in a message of Column 'col_name' cannot be null, rather than Column set to default value; NULL supplied to NOT NULL column 'col_name' at row n. (Bug #11491)

  • For binary string data types, mysqldump --hex-blob produced an illegal output value of 0x rather than ''. (Bug #13318)

  • Some comparisons for the IN() operator were inconsistent with equivalent comparisons for the = operator. (Bug #12612)

D.1.4. Changes in release 5.1.3 (29 November 2005)

Functionality added or changed:

This is the first public alpha release of the current MySQL 5.1 development branch, providing an insight to upcoming features. Although some of these are still under heavy development, this release includes the following new features and changes (in comparison to the current MySQL 5.0 production release):

  • Partitioning: allows distributing portions of individual tables across a filesystem, according to rules which can be set when the table is created. In effect, different portions of a table are stored as separate tables in different locations, but from the user point of view, the partitioned table is still a single table. See Chapter 18, Partitioning, for further information on this functionality. (Author: Mikael Ronström)

  • Plugin API: MySQL 5.1 adds support for a very flexible plugin API that enables loading and unloading of various components at runtime, without restarting the server. Although the work on this is not finished yet, plugin full-text parsers are a first step in this direction. This allows users to implement their own input filter on the indexed text, enabling full-text search capability on arbitrary data such as PDF files or other document formats. A pre-parser full-text plugin performs the actual parsing and extraction of the text and hands it over to the built-in MySQL full-text search. (Author: Sergey Vojtovich)

    The plugin API requires the mysql.plugin table. When upgrading from an older version of MySQL, you should run the mysql_fix_privilege_tables command to create this table. See Section 2.10.2, “Upgrading the Grant Tables”.

    Incompatible change: Plugins are installed in the directory named by the plugin_dir system variable. This variable also controls the location from which the server loads user-defined functions (UDFs), which is a change from earlier versions of MySQL. That is, all UDF library files now must be installed in the plugin directory. When upgrading from an older version of MySQL, you must migrate your UDF files to the plugin directory.

  • The Instance Manager (IM) now has some additional functionality:

    • SHOW instance_name LOG FILES provides a listing of all log files used by the instance. (Author: Petr Chardin)

    • SHOW instance_name LOG {ERROR | SLOW | GENERAL} size retrieves a part of the specified log file. (Author: Petr Chardin)

    • SET instance_name. option_name=option_value sets an option to the specified value and writes it to the config file See Section 5.2, “mysqlmanager — The MySQL Instance Manager”, for more details on these new commands. (Author: Petr Chardin)

  • The performance of boolean full-text searches (using the “+” Operator) has been improved. See Section 12.7, “Full-Text Search Functions”, for more details about full-text searching. (Author: Sergey Vojtovich)

  • VARCHAR fields used in MySQL Cluster tables are now variable-sized; that is, they now only allocate as much space as required to store the data. Previously, a VARCHAR(n) column allocated n+2 bytes (aligned to 4 bytes), regardless if the actual inserted value required that much space. (In other words, a VARCHAR column always required the same, fixed, amount of storage as a CHAR column of the same size.)

  • Renamed the table_cache system variable to table_open_cache. Any scripts that refer to table_cache should be updated to use the new name.

  • Added the table_definition_cache system variable. If you use a large number of tables, you can create a large table definition cache to speed up opening of tables. The table definition cache takes less space and does not use file descriptors, unlike the normal table cache.

Bugs fixed:

  • Set functions could not be aggregated in outer subqueries. (Bug #12762)

D.1.5. Changes in release 5.1.2 (Not released)

Functionality added or changed:

  • Added MAXLOCKS, MINLOCKS, MAXWRITE, and MINWRITE as allowable values of the --bdb-lock-detect option. (Bug #14876)

  • Added the bdb_cache_parts and bdb_region_size system variables, and allowed bdb_cache_size to be larger than 4GB on systems that support it. (Bug #14895)

  • Added Transactions, XA, and Savepoints columns to SHOW ENGINES output.

  • Added --replace to mysqldump. This option uses REPLACE INTO, rather than INSERT INTO, when writing the dumpfile.

Bugs fixed:

  • Foreign keys were not properly enforced in TEMPORARY tables. Foreign keys now are disallowed in TEMPORARY tables. (Bug #12084)

D.1.6. Changes in release 5.1.1 (Not released)

Functionality added or changed:

Bugs fixed:

  • Performing a CREATE TABLE statement with a PARTITION BY clause in a prepared statement could crash a server running in debug mode. (Bug #12097)

  • NDB: Specifying the wrong nodegroup in a CREATE TABLE using partitioning would lead to the table name being locked after the CREATE TABLE statement failed (that is, the table name could not be re-used). (Bug #12114)

  • Using ORDER BY in a query with a partitioned table on a 64-bit operating system could crash the server. (Bug #12116)

  • When two threads compete for the same table, a deadlock could occur if one thread has also a lock on another table through LOCK TABLES and the thread is attempting to remove the table in some manner and the other thread want locks on both tables. (Bug #10600)

D.2. Changes in MyODBC

D.2.1. Changes in MyODBC 3.51.13

Functionality added or changed:

  • N/A

Bugs fixed:

  • The SQLDriverConnect() ODBC method did not work with recent MyODBC releases. (Bug #12393)

D.2.2. Changes in MyODBC 3.51.12

Functionality added or changed:

  • N/A

Bugs fixed:

  • SQLColumns() returned no information for tables that had a column named using a reserved word. (Bug #9539)

D.2.3. Changes in MyODBC 3.51.11

Functionality added or changed: No changes.

Bugs fixed:

  • mysql_list_dbcolumns() and insert_fields() were retrieving all rows from a table. Fixed the queries generated by these functions to return no rows. (Bug #8198)

  • SQLGetTypoInfo() returned tinyblob for SQL_VARBINARY and nothing for SQL_BINARY. Fixed to return varbinary for SQL_VARBINARY, binary for SQL_BINARY, and longblob for SQL_LONGVARBINARY. (Bug #8138)