Changes in release 3.22.5
-------------------------
* All table lock handing is changed to avoid some very subtle
deadlocks when using `DROP TABLE', `ALTER TABLE', `DELETE FROM
TABLE' and `mysqladmin flush-tables' under heavy usage. Changed
locking code to get better handling of locks of different types.
* Updated `DBI' to 1.00 and `DBD' to 1.2.0.
* Added a check that the error message file contains error messages
suitable for the current version of `mysqld'. (To avoid errors if
you accidentally try to use an old error message file.)
* All count structures in the client (`affected_rows()',
`insert_id()', ...) are now of type `BIGINT' to allow 64-bit values
to be used. This required a minor change in the MySQL protocol
which should affect only old clients when using tables with
`AUTO_INCREMENT' values > 16M.
* The return type of `mysql_fetch_lengths()' has changed from `uint
*' to `ulong *'. This may give a warning for old clients but
should work on most machines.
* Change `mysys' and `dbug' libraries to allocate all thread
variables in one struct. This makes it easier to make a threaded
`libmysql.dll' library.
* Use the result from `gethostname()' (instead of `uname()') when
constructing `.pid' file names.
* New better compressed server/client protocol.
* `COUNT()', `STD()' and `AVG()' are extended to handle more than 4G
rows.
* You can now store values in the range `-838:59:59' <= x <=
`838:59:59' in a `TIME' column.
* *WARNING: INCOMPATIBLE CHANGE!!* If you set a `TIME' column to too
short a value, MySQL now assumes the value is given as: `[[[D
]HH:]MM:]SS' instead of `HH[:MM[:SS]]'.
* `TIME_TO_SEC()' and `SEC_TO_TIME()' can now handle negative times
and hours up to 32767.
* Added new option `SET OPTION SQL_LOG_UPDATE={0|1}' to allow users
with the *process* privilege to bypass the update log. (Modified
patch from Sergey A Mukhin <violet@rosnet.net>.)
* Fixed fatal bug in `LPAD()'.
* Initialize line buffer in `mysql.cc' to make `BLOB' reading from
pipes safer.
* Added `-O max_connect_errors=#' option to `mysqld'. Connect
errors are now reset for each correct connection.
* Increased the default value of `max_allowed_packet' to `1M' in
`mysqld'.
* Added `--low-priority-updates' option to `mysqld', to give
table-modifying operations (`INSERT', `REPLACE', `UPDATE',
`DELETE') lower priority than retrievals. You can now use
`{INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ...' You can
also use `SET OPTION SQL_LOW_PRIORITY_UPDATES={0|1}' to change the
priority for one thread. One side effect is that `LOW_PRIORITY'
is now a reserved word. :(
* Add support for `INSERT INTO table ... VALUES(...),(...),(...)',
to allow inserting multiple rows with a single statement.
* `INSERT INTO tbl_name' is now also cached when used with `LOCK
TABLES'. (Previously only `INSERT ... SELECT' and `LOAD DATA
INFILE' were cached.)
* Allow `GROUP BY' functions with `HAVING':
mysql> SELECT col FROM table GROUP BY col HAVING COUNT(*)>0;
* `mysqld' will now ignore trailing `;' characters in queries. This
is to make it easier to migrate from some other SQL servers that
require the trailing `;'.
* Fix for corrupted fixed-format output generated by `SELECT INTO
OUTFILE'.
* *WARNING: INCOMPATIBLE CHANGE!!* Added Oracle `GREATEST()' and
`LEAST()' functions. You must now use these instead of the
`MAX()' and `MIN()' functions to get the largest/smallest value
from a list of values. These can now handle `REAL', `BIGINT' and
string (`CHAR' or `VARCHAR') values.
* *WARNING: INCOMPATIBLE CHANGE!!* `DAYOFWEEK()' had offset 0 for
Sunday. Changed the offset to 1.
* Give an error for queries that mix `GROUP BY' columns and fields
when there is no `GROUP BY' specification.
* Added `--vertical' option to `mysql', for printing results in
vertical mode.
* Index-only optimization; some queries are now resolved using only
indexes. Until MySQL 4.0, this works only for numeric columns.
Note:MySQL indexes.
* Lots of new benchmarks.
* A new C API chapter and lots of other improvements in the manual.