==================
- Add support for Python 3.7.
- Drop support for Python 3.4.
- Drop support for Python 2.7.8 and earlier.
- Drop support for ZODB 4 and ZEO 4.
- Officially drop support for versions of MySQL before 5.7.9. We haven't
been testing on anything older than that for some time, and older
than 5.6 for some time before that.
- Drop the ``poll_interval`` parameter. It has been deprecated with a
warning and ignored since 2.0.0b2. See :issue:`222`.
- Drop support for pg8000 older than 1.11.0.
- Drop support for MySQL Connector/Python older than 8.0.16. Many
older versions are known to be broken. Note that the C extension,
while available, is not currently recommended due to internal
errors. See :issue:`228`.
- Test support for MySQL Connector/Python on PyPy. See :issue:`228`.
.. caution:: Prior to PyPy 7.2 or RelStorage 3.0a3, it is necessary to disable JIT
inlining due to `a PyPy bug
<https://bitbucket.org/pypy/pypy/issues/3014/jit-issue-inlining-structunpack-hh>`_
with ``struct.unpack``.
- Drop support for PyPy older than 5.3.1.
- Drop support for the "MySQL Connector/Python" driver name since it
wasn't possible to know if it would use the C extension or the
Python implementation. Instead, explicitly use the 'Py' or 'C'
prefixed name. See :pr:`229`.
- Drop the internal and undocumented environment variables that could be
used to force configurations that did not specify a database driver
to use a specific driver. Instead, list the driver in the database
configuration.
- Opening a RelStorage configuration object read from ZConfig more
than once would lose the database driver setting, reverting to
'auto'. It now retains the setting. See :issue:`231`.
- Fix Python 3 with mysqlclient 1.4. See :issue:`213`.
- Drop support for mysqlclient < 1.4.
- Make driver names in RelStorage configurations case-insensitive
(e.g., 'MySQLdb' and 'mysqldb' are both valid). See :issue:`227`.
- Rename the column ``transaction.empty`` to ``transaction.is_empty``
for compatibility with MySQL 8.0, where ``empty`` is now a reserved
word. The migration will happen automatically when a storage is
first opened, unless it is configured not to create the schema.
.. note:: This migration has not been tested for Oracle.
.. note:: You must run this migration *before* attempting to upgrade
a MySQL 5 database to MySQL 8. If you cannot run the
upgrade through opening the storage, the statement is
``ALTER TABLE transaction CHANGE empty is_empty BOOLEAN
NOT NULL DEFAULT FALSE``.
- Stop getting a warning about invalid optimizer syntax when packing a
MySQL database (especially with the PyMySQL driver). See
:issue:`163`.
- Add ``gevent MySQLdb``, a new driver that cooperates with gevent
while still using the C extensions of ``mysqlclient`` to communicate
with MySQL. This is now recommended over ``umysqldb``, which is
deprecated and will be removed.
- Rewrite the persistent cache implementation. It now is likely to
produce much higher hit rates (100% on some benchmarks, compared to
1-2% before). It is currently slower to read and write, however.
This is a work in progress. See :pr:`243`.
- Add more aggressive validation and, when possible, corrections for
certain types of cache consistency errors. Previously an
``AssertionError`` would be raised with the message "Detected an
inconsistency between RelStorage and the database...". We now
proactively try harder to avoid that situation based on some
educated guesses about when it could happen, and should it still
happen we now reset the cache and raise a type of ``TransientError``
allowing the application to retry. A few instances where previously
incorrect data could be cached may now raise such a
``TransientError``. See :pr:`245`.