=========
**Backwards incompatible change** Fixed :issue:`72` where APSW wasn't
zero basing virtual table :meth:`~VTTable.BestIndex` constraints
returned as documented. If you have working BestIndex code then you
need to update it for this release. Thanks to Lefteris for finding
this issue.
**Backwards incompatible change** The :meth:`~apsw.complete` method
has moved from :class:`Connection` to :mod:`apsw` where it should have
been all along. You should now call :meth:`apsw.complete` instead. (It
even had an example showing it to be part of the module and not a
specific connection!)
There is now an :class:`interactive shell <shell.Shell>` very similar to
that `provided by SQLite <https://sqlite.org/sqlite.html>`__. You
can embed it in your own program, inherit from it to provide more
commands and output modes, or just run it like this::
$ python -c "import apsw ; apsw.main()"
Added the `SQLITE_LIMIT_TRIGGER_DEPTH
<https://sqlite.org/c3ref/c_limit_attached.html>`__,
`SQLITE_OPEN_PRIVATECACHE
<https://sqlite.org/c3ref/c_open_autoproxy.html>`__ and
`SQLITE_OPEN_SHAREDCACHE
<https://sqlite.org/c3ref/c_open_autoproxy.html>`__ constants.
The :file:`setup.py` file now has the various options available made
applicable to appropriate commands only. Read the :ref:`updated
documentation <setup_py_flags>`.
You can now specify `build --enable=stat2` to :file:`setup.py`
to enable `advanced statistics gathering
<https://sqlite.org/compile.html#enable_stat2>`__ for query
planning.
:file:`setup.py` can automatically fetch the asyncvfs
extension for you. If the source is present when APSW is built then
it will be automatically included and *async_initialize* called.
A :meth:`fork_checker` is available which turns on detection when you
have used SQLite objects across a fork (a **very** bad thing). This
is possible on Unix like operating systems, especially if you use the
:mod:`multiprocessing module <multiprocessing>`.
Extension loading is now compiled in by default when using the
amalgamation and compiled out when using existing libraries. This is
more likely to match your machine. You can use
`--omit=load_extension` or `--enable=load_extension`
to the build/build_ext commands to explicitly disable/enable extension
loading. :issue:`67`
:file:`setup.py` will now abort on a download that has no
checksum. See :ref:`more information <fetch_checksums>` on checksums.
:ref:`setup.py <setup_py_flags>` can also fetch the version of SQLite
currently under development before a release. Use
`--version=fossil`.
Updated which code uses `experimental SQLite APIs
<https://sqlite.org/c3ref/experimental.html>`__ based on changes in
SQLite. The test suite will also work correctly with experimental on
or off. (It is on by default.)