Doctrine is proud to announce the release of Doctrine DBAL 3.4.0. Below is a summary of the most noteworthy changes in the new release:
Database schema introspection optimization (#5268)
Older DBAL versions, in order to introspect database schema, performed a set of queries for each table individually. This caused noticeable performance issues on some platforms like Oracle which seemingly rebuild their internal views for each such query.
As of this release, the entire schema is introspected in a fixed number of queries. The more tables the schema contains, the more noticeable this optimization should be.
It was impossible to make these optimizations while using the schema introspection platform methods
getListTableColumnsSQL()). As a result, although these methods are kept in the codebase for backward
compatibility, the DBAL itself no longer uses them. The SQL queries used for schema introspection are no longer
considered part of the public DBAL API.
Support for foreign key constraints on SQLite (#5427)
Although SQLite has supported foreign key constraints since its earliest versions, their support in the DBAL was quite limited. One of the reasons for that was that managing foreign key constraints in SQLite is quite different from the rest of the supported platforms.
For example, when a foreign key constraint is declared, platforms like MySQL require that the referenced table
must already exist. To support creating tables with mutually referencing constraints, the DBAL would
create the tables first and create the constraints via
ALTER TABLE … ADD FOREIGN KEY ….
This approach doesn't work with SQLite since it doesn't allow adding constraints to an existing table. Fortunately, it doesn't require the referenced table to exist at the time of creating the foreign key either.
The new DBAL release introduces a new API for building
CREATE TABLE and
DROP TABLE statements for multiple tables
which could be tailored to the requirements of a given platform. The
is now deprecated since the DBAL supports foreign key constraints on all supported platforms.
Support for TEXT/BLOB default values on MariaDB (#5332)
The platform layer in the DBAL is organized in the way that the code implementing the support for MySQL is also used to support MariaDB. As a result, even though MariaDB may support certain features the DBAL doesn't support them because they are not supported by MySQL. One of such features is the default values for TEXT and BLOB columns.
As of the new release, the default TEXT and BLOB values are supported on MariaDB but are still unsupported on MySQL, even though MySQL supports them as of release 8.0.13.
Support for result caching in QueryBuilder (#5539)
The recently added
enableResultCache() method of the
QueryBuilder class allows specifying the query cache profile
to be used for performing the queries built by the builder.
PHP 7.4 or newer is required (#5459)
In light of the DBAL 4 release planned for later this year, the 3.4.0 release introduces over 30 deprecations which, as usual, focus on cleaning up obsolete features and making the API more robust and clearer from the static analysis standpoint.