------------------
- Expand query report, to cover details on sort indexes, order and limits.
- As part of each progress handler report, also do an automatic transaction
savepoint, to give the ZODB cache a chance to do garbage collection.
- Added a `threshold` argument to the catalog's `addColumn` and `delColumn`
methods and used it for a progress handler. Also optimized some of their
internals.
- Added support for `sort_on` queries with any number of sort indexes and
differing `sort_order` values. For example:
`{'foo': 'a', 'sort_on': ('foo', 'bar')}`
`{'foo': 'a', 'sort_on': ('foo', 'bar'), 'sort_order': ('', 'reverse')}`
`{'foo': 'a', 'sort_on': ('foo', 'bar', 'baz')}`
- Added support for `not` queries in field and keyword indexes. Both
restrictions of normal queries and range queries are supported, as well as
purely exclusive queries. For example:
`{'foo': {'query': ['a', 'ab'], 'not': 'a'}}`
`{'foo': {'query': 'a', 'range': 'min', 'not': ['a', 'e', 'f']}}`
`{'foo': {'not': ['a', 'b']}}`.
Note that negative filtering on an index still restricts items to those
having a value in the index. So with 10 documents, 5 of them in the `foo`
index with a value of `1`, a query for `not 1` will return no items instead
of the 5 items without a value. You need to index a dummy/default value if
you want to consider all items for a particular index.
- Updated deprecation warnings to point to Zope 4 instead of 2.14.