## 2.9.2
- Fixed significant bug in the `savepoint` commit/rollback implementation.
- Added support for postgresql `INTERVAL` columns.
- Fixed bug where missing `sqlite3` library was causing other, unrelated
libraries to throw errors when attempting to import.
- Added a `case_sensitive` parameter to the SQLite `REGEXP` function
implementation. The default is `False`, to preserve backwards-compatibility.
- Fixed bug that caused tables not to be created when using the `dataset`
extension.
- Modified `drop_table` to raise an exception if the user attempts to drop
tables with `CASCADE` when the database backend does not support it.
- Fixed Python3 issue in the `AESEncryptedField`.
- Modified the behavior of string-typed fields to treat the addition operator
as concatenation
## 2.9.1
- Fixed#1218, where the use of `playhouse.flask_utils` was requiring the
`sqlite3` module to be installed.
- Fixed#1219 regarding the SQL generation for composite key sub-selects,
joins, etc.
## 2.9.0
In this release there are two notable changes:
- The ``Model.create_or_get()`` method was removed.
- The SQLite closure table extension gained support for many-to-many
relationships thanks to a nice PR by @necoro.
## 2.8.8
This release contains a single important bugfix for a regression in specifying
the type of lock to use when opening a SQLite transaction.
## 2.8.7
This release contains numerous cleanups.
### Bugs fixed
- #1087 - Fixed a misuse of the iteration protocol in the `sqliteq` extension.
- #1096 - Fix representation of recursive foreign key relations when using the
`model_to_dict` helper.
- #1126 - Allow `pskel` to be installed into `bin` directory.
- #1105 - Added a `Tuple()` type to Peewee to enable expressing arbitrary
tuple expressions in SQL.
- #1133 - Fixed bug in the conversion of objects to `Decimal` instances in the
`DecimalField`.
- Fixed an issue renaming a unique foreign key in MySQL.
- Remove the join predicate from CROSS JOINs.
- #1148 - Ensure indexes are created when a column is added using a schema
migration.
- #1165 - Fix bug where the primary key was being overwritten in queries using
the closure-table extension.
### New stuff
- Added properties to the `SqliteExtDatabase` to expose common `PRAGMA`
settings.
- Clarified documentation on calling `commit()` or `rollback()` from within the
scope of an atomic block.
- Allow table creation dependencies to be specified using new `depends_on` meta
option.
- Allow specification of the lock type used in SQLite transactions.
- Added support for `CROSS JOIN` expressions in select queries.
- Docs on how to implement optimistic locking
- Documented optional dependencies.
- Generic support for specifying select queries as locking the selected rows
`FOR X`, e.g. `FOR UPDATE` or `FOR SHARE`.
- Support for specifying the frame-of-reference in window queries, e.g.
specifying `UNBOUNDED PRECEDING`, etc.
### Backwards-incompatible changes
- As of 9e76c99, an `OperationalError` is raised if the user calls `connect()`
on an already-open Database object. Previously, the existing connection would
remain open and a new connection would overwrite it, making it impossible to
close the previous connection. If you find this is causing breakage in your
application, you can switch the `connect()` call to `get_conn()` which will
only open a connection if necessary. The error **is** indicative of a real
issue, though, so audit your code for places where you may be opening a
connection without closing it (module-scope operations, e.g.).