v2.9.1 - Dec 14, 2018

This release fixes regressions introduced in v2.9.0 and issues specific to the SQL Anywhere platform.

    Total issues resolved: 11

MySQL, Schema Introspection:

    3393: Fixed parsing MySQL create table flags (options without a value) thanks to @morozov and @AdrianSherwood
    3398: BC Break in 2.9.0 for MySQL Tables containing partitions thanks to @bcremer

SQL Anywhere:

    3375: [SQL Anywhere] Fix bound parameter references in PHP 7 thanks to @deeky666
    3378: [SQL Anywhere] Fix query limit values "0" and "null" thanks to @deeky666
    3385: [SQL Anywhere] Fix fetching empty values via fetchAll() thanks to @deeky666
    3386: [SQL Anywhere] Fix view schema introspection test thanks to @deeky666

Schema Comparison:

    3382: Reverted strict comparison back to loose because of a new regression thanks to @morozov and @Majkl578

Connections:

    3305: Fix Fetch mode query in MasterSlaveConnection thanks to @BradCrumb

Cache:

    3381: ResultCacheStatement lost its cache capability on fetchAll method thanks to @roger-codina

Documentation:

    3392: fixed annotations of parameter $columns in Table thanks to @LukasVitek and @ricardofiorani

v2.9.0 - Dec 4, 2018

This is a minor release of Doctrine DBAL that aggregates over 40 fixes and improvements developed by 18 contributors over the last 5 months.

This release includes all changes of the 2.8.x series, as well as feature additions and improvements that couldn't land in patch releases.

Backwards Compatibility Breaks

This doesn't contain any intentional Backwards Compatibility (BC) breaks.

Deprecations

    The usage of NULL to specify the absence of an offset in LIMITed queries is deprecated. Use 0 instead.
    It's not recommended to rely on the default length specified by implementations of Type. These values are not used by the library and will be removed.
    It's not recommended to rely on the string representation of Type objects.
    Regular-expression based asset filters are deprecated in favor of callback-based as more extensible.
    Calling Statement::fetchColumn() with an invalid column index is deprecated.
    The dbal:import CLI command is deprecated. Please use other database client applications for import.

Please see details in the UPGRADE.md documentation.

New Features

    Added support for MariaDB 10.3.
    Added support for Windows authentication for SQL Server.
    Added support for column length in index definitions on MySQL.

Improvements and Fixes

    Implemented handling BLOB objects represented as streams in the MySQL (mysqli) driver.
    Implemented handling BLOB objects represented as streams in the IBM DB2 driver.
    DBAL is now continuously tested with the PDO driver for Oracle.
    Implemented handling of URLs in master-slave and pooling-shard connection configuration.
    The codebase is now fully compatible with the Doctrine Coding Standard v5.0.

Total issues resolved: 45

Deprecations:

    3244: Deprecated dbal:import CLI command thanks to @morozov
    3253: Deprecated usage of the NULL offset in LIMITed queries thanks to @morozov
    3256: Deprecate Doctrine\DBAL\Types\Type::getDefaultLength() thanks to @Majkl578
    3258: Deprecate Doctrine\DBAL\Types\Type::__toString() thanks to @Majkl578
    3316: Deprecated regex-based asset filters thanks to @morozov
    3359: Removed DataAccessTest::testFetchColumnNonExistingIndex() since it covers a bug in PDO thanks to @morozov

New Features:

    2412: Add mysql specific indexes with lengths thanks to @bburnichon
    3278: Add support for MariaDB 10.3 thanks to @javiereguiluz
    3283: MariaDB improvements, support 10.3 thanks to @sidz
    3333: Allow windows (userless/passwordless) authentication for SQL Server thanks to @odinsey

Bug Fixes:

    3355: Implemented comparison of default values as strings regardless of their PHP types thanks to @morozov and @Majkl578

Improvements:

    3201: Fix support for URL to account for master-slave and pooling-shard connections thanks to @stof
    3217: Fix that MysqliStatement cannot handle streams thanks to @mpdude
    3235: Use PSR-4 autoloader thanks to @Majkl578
    3254: Throw ConversionException when unserialization fail for array and object types thanks to @seferov
    3259: Update export ignores thanks to @Majkl578
    3309: Implemented handling BLOBs represented as stream resources for IBM DB2 thanks to @morozov and @mpdude
    3331: Fetch all should use the driver statement's fetchAll method thanks to @michaelcullum

Documentation Improvements:

    3223: GitHub template grammar/spelling fixes thanks to @GawainLynch
    3232: Removed NOW() from QueryBuilder usage examples thanks to @morozov
    3239: 2.8 in README & branch alias to 2.9 thanks to @Majkl578
    3269: Fixed type hints in DockBlocks thanks to @marforon
    3275: Add .doctrine-project.json to root of the project. thanks to @jwage
    3276: Update homepage thanks to @Majkl578
    3280: Use behaviuor instead of behavior thanks to @BackEndTea
    3285: Remove old comment from MysqliStatement thanks to @mpdude
    3318: Removed link to www.doctrine-project.org from doc blocks thanks to @morozov
    3319: remove ClassLoader thanks to @garak
    3337: Fix of links in documentation thanks to @SenseException
    3350: Remove pdo_sqlsrv from known vendor issues list thanks to @ostrolucky
    3357: Fix typo thanks to @BenMorel
    3370: Removed 2.7 from README thanks to @morozov

Code Quality Improvements:

    3252: Replaced call_user_func_array() of a fixed method with the usage of variadic arguments thanks to @morozov
    3306: Fixed coding standard violations in the codebase thanks to @morozov
    3303: Updated doctrine/coding-standard to 5.0, thanks to @morozov
    3317: Implemented proper escaping of string literals in platforms and schema managers thanks to @morozov
    3363: Remove redundant implements thanks to @BenMorel

Continuous Integration Improvements:

    3307: Test against the latest stable sqlsrv extension thanks to @morozov
    3320: Trying to fix failing DB builds thanks to @morozov
    3325: Updated PHPUnit to 7.4 thanks to @morozov
    3339: ContinuousPHP configuration for PDO Oracle driver thanks to @morozov
    3365: Reorganize Travis build matrix thanks to @BenMorel

v2.8.1 -Dec 4, 2018

This release backports the bug fixes implemented in newer DBAL versions.

    Total issues resolved: 7

PostgreSQL:

    3158: postgres: correctly produce alter table sql comment to update column definition thanks to @bendavies
    3226: Ignore case when matching ARRAY thanks to @ohvitorino
    3268: Force Sequence::$initialValue type thanks to @vpArth

Oracle:

    3297: Do not generate SID or SERVICE_NAME when dbname or service name is not specified thanks to @morozov and @lcp0578
    3330: Fixed quoting of string literals containing backslash thanks to @morozov

SQL Anywhere:

    3362: [SQL Anywhere] Disable exact row count retrieval on SQL Anywhere thanks to @deeky666

Continuous Integration:

    3327: Use locked version of PHPStan to avoid accidental build failures thanks to @morozov

v2.8.0 - Jul 12, 2018

This is a minor release of Doctrine DBAL that aggregates over 30 fixes and improvements developed over the last 3 months.

This release includes all changes of the 2.7.x series, as well as feature additions and improvements that couldn’t land in patch releases.

Backwards Compatibility Breaks

This doesn't contain any intentional Backwards Compatibility (BC) breaks.

Dependency Changes

    The dependency on doctrine/common is removed. DBAL now depends on doctrine/cache and doctrine/event-manager instead.

Please see details in the UPGRADE.md documentation.

Deprecations

    The usage of binary fields whose length exceeds the maximum field size on a given platform is deprecated. Please use binary fields of a size which fits all target platforms, or use blob explicitly instead.
    The usage of DB-generated UUIDs is deprecated. Their format is inconsistent across supported platforms and therefore the feature is not portable. Use a PHP library (e.g. ramsey/uuid) to generate UUIDs on the application side.

New features

    Initial support of MySQL 8.
    Initial support of PostgreSQL 11.
    Ability to evaluate arbitrary SQL expressions via AbstractPlatform::getDummySelectSQL().

Improvements and Fixes

    Improved support of binary fields on Oracle and IBM DB2.
    Improved SQL Server configuration capabilities via both sqlsrv and pdo_sqlsrv.
    Improved handling of AUTOINCREMENTed primary keys in SQLite.
    Integration tests are run against IBM DB2 on Travis CI.
    Code coverage is collected for the Oracle platform on continuousphp.

Total issues resolved: 33

Deprecations:

    3187: Deprecate usage of binary fields whose length exceeds maximum thanks to @morozov
    3188: Deprecated usage of binary fields whose length exceeds the platform maximum thanks to @morozov
    3192: Added more information to the deprecation notice thanks to @morozov
    3212: Deprecated usage of DB-generated UUIDs thanks to @morozov

New Features:

    3109: Allow to specify arbitrary SQL expression in AbstractPlatform::getDummySelectSQL() thanks to @morozov
    3128: Add MySQL 8 reserved keywords thanks to @mlocati
    3160: Test against Postgres 11 thanks to @Majkl578

Bug Fixes:

    3149: Introduced binary binding type to support binary parameters on Oracle thanks to @morozov
    3178: Fix incorrect exception thrown from SQLAnywhere16Platform thanks to @Majkl578
    3044: Functional test for allowing dynamic intervals in date sub/add thanks to @AshleyDawson

Improvements:

    3033: Added support for available DSN parameters for the PDOSqlsrv driver thanks to @aashmelev
    3141: allow creating PRIMARY KEY AUTOINCREMENT fields for sqlite (unit tests) thanks to @TimoBakx
    3143: initialize sql array into platform files thanks to @AlessandroMinoccheri
    3157: When building a limit query, zero offset without a limit should be ignored thanks to @morozov
    3180: Import simplified version of Common\Util\Debug for var dumping purposes thanks to @Majkl578

Documentation Improvements:

    3117: Added badges for the develop branch in README thanks to @morozov
    3125: Upgrading docs thanks to @jwage
    3144: added improvement type into pull request template thanks to @AlessandroMinoccheri

Code Quality Improvements:

    3025: Added PHPStan, apply changes for level 3 thanks to @Majkl578
    3200: Php Inspections (EA Ultimate): minor code tweaks thanks to @kalessil
    3204: Fix typo in AbstractPlatform thanks to @Majkl578
    3205: Ignore OCI-* classes in static analysis (no stubs) thanks to @Majkl578

Continuous Integration Improvements:

    3049: Test failures caused by invalid database connection result in fatal error thanks to @Majkl578
    3102: Use newer PHPUnit to prevent crashes on failures thanks to @Majkl578
    3112: Removed hard-coded configuration filenames from the test runner thanks to @morozov
    3133: Travis DB2 thanks to @Majkl578, @morozov
    3135: AppVeyor tweaks, retry coverage upload on failure thanks to @Majkl578
    3137: Workaround for the inability to use a post-PHPUnit script on ContinuousPHP thanks to @morozov
    3151: MSSQL DLL 5.2.0 has been released. thanks to @photodude

Dependencies

    3173: Fix composer branch aliases thanks to @Majkl578
    3176: Eliminate dependency on doctrine/common thanks to @Majkl578
    3181: Remove dependency on doctrine/common thanks to @Majkl578
    3193: DBAL 2.8 needs Common 2.9 thanks to @Majkl578

v2.7.2 - Jul 12, 2018

This release backports the bug fixes implemented in newer DBAL versions.

Total issues resolved: 7

Platforms:

    3103: Added keywords OVER and RETURNING for MariaDb102 thanks to @mdriessen

Schema Comparison:

    3086: Postgres, Oracle and SQL Server Sequence increment_by & min_value as int thanks to @simPod
    3210: Unnecessary alter sequence queries generated on Oracle db during schema update thanks to @bobvandevijver

Performance:

    3114: Portability Statement still fetches all data in iterator mode thanks to @morozov
    3115: Replaced ArrayIterator with StatementIterator in Portability\Connection thanks to @morozov

Documentation:

    3121: Document how to opt-in for deprecations thanks to @Majkl578
    3123: Opt in deprecations docs thanks to @greg0ire

v2.7.1 - Apr 7, 2018

This release fixes unintentional BC breaks:

    It was impossible to use deprecated fetch modes with PDO-based drivers.
    An unsupported option passed to the Column object prevented subsequent options from being applied.
    Date interval values stored prior to upgrade to v2.7.0 were reported as invalid.

Total issues resolved: 10

Backwards Compatibility Fixes:

    3082: Custom PDO fetch modes and 2.7.0 thanks to @corphi
    3088: Fix #3082: Add BC for PDO-only fetch modes thanks to @corphi
    3089: Don't skip column options. thanks to @andytruong
    3093: When updating to version v2.7 type DateInterval throws errors thanks to @fnagel
    3097: Fix compatibility for pre-2.7 DateIntervalType format thanks to @Majkl578

Documentation Improvements:

    3083: Document the correct way of configuring a MariaDB database with serverVersion thanks to @tristanbes
    3084: README: Add 2.7, drop 2.5 thanks to @Majkl578

Continuous Integration Improvements:

    3085: Tests: remove implicit verbose flag thanks to @Majkl578
    3090: Add symfony tests listener thanks to @greg0ire
    3095: CI: Add missing listener for MariaDB @ mysqli thanks to @Majkl578

v2.7.0 - Apr 3, 2018

This is a minor release of Doctrine DBAL that aggregates over 80 fixes and improvements developed over the last 8 months.

This release includes all changes of the 2.6.x series, as well as feature additions and improvements that couldn't land in patch releases.

Backwards Compatibility Breaks

This release comes with one potential Backwards Compatibility (BC) break that is to be considered during upgrade.
Please see the details below.

Dependency requirement changes

There are no changes in requirements to runtime dependencies.

Deprecations

    Direct usage of PDO:: constants in calls to DBAL API is deprecated.
    Calls to \PDOStatement methods on a \Doctrine\DBAL\Driver\PDOStatement instance are deprecated.
    A series of enum-like constants are deprecated.
    Setting unsupported options on a schema column object is deprecated.

Please see details in the UPGRADE.md documentation.

New features

This release introduces the following major additions:

    MariaDB 10.2 platform support
    PostgreSQL 10 platform support

Improvements and Fixes

This release comes with a few bug fixes and a significant set of improvements in continuous integration processes, code style and documentation:

    The code is continuously tested on all supported versions of SQL Server on Windows and Linux.
    The code is tested with lowest compatible versions of dependencies.
    New improved code style requirements have been introduced.
    The codebase has been cleaned up from the fragments required to support the older PHP versions and uses the full power of the PHP 7.1.
    All pull requests are validated for compliance with the coding standards before getting accepted.
    Handling of platform-specific features has been improved.

Total issues resolved: 81

BC Breaks:

    2579: DateIntervalType (negative support) resolves doctrine/dbal#2578 thanks to @galeaspablo

Deprecations:

    2846: Ensure column options map to an existing method thanks to @greg0ire
    2996: Forward compatibility with 3.x thanks to @morozov
    2998: Extract some constants into TransactionIsolationLevel, TrimMode and DateIntervalUnit thanks to @Majkl578

New Features:

    2825: MariaDB 10.2 initial support thanks to @belgattitude
    2893: PostgreSQL 10 support thanks to @simPod

Bug Fixes:

    2819: PHP Fatal error: Uncaught Doctrine\DBAL\DBALException: Failed to connect to the database: Invalid platform version "5.5.5-10.1.25-MariaDB thanks to @stfast
    2868: Doctrine\DBAL\Exception\InvalidFieldNameException when working with DB schema on PostgreSQL 10 thanks to @skobkin
    2988: renameColumn will changed default from NULL to 'NULL' thanks to @kingshark8848

Improvements:

    2551: Implement the column collation for Mysql thanks to @mikeSimonson
    2578: DateIntervalType (negative support) thanks to @galeaspablo
    2588: Inherit charset from master connection if not set explicitly thanks to @Deltachaos
    2718: Add iterators for non pdo drivers. thanks to @jenkoian
    2616: CI testing of MSSQL on windows with AppVeyor thanks to @photodude
    2617: Testing of MSSQL on Windows with AppVeyor thanks to @photodude
    2835: Stop relying on Type::__toString thanks to @greg0ire
    2851: Test default value declaration for the date type thanks to @greg0ire
    2919: Add tests for column collation to prove it works thanks to @Tobion
    2952: Enabled testFetchLongBlob() for PDO SQL Server driver thanks to @morozov
    2954: The IBM DB2 Statement driver suppresses errors triggered by db2_execute thanks to @morozov
    2955: Removed error suppression in IBM DB2 Statement thanks to @morozov
    3009: PHPUnit 7 thanks to @carusogabriel
    3013: Escape LIKE metacharacters thanks to @greg0ire
    3019: Allow dynamic intervals in DATE_ADD & DATE_SUB for SQLite thanks to @fogs
    3020: Improve handling of schemas in SQL Server >= 2008 thanks to @stlrnz
    3031: Connection parameters are cached hashed thanks to @fullbl

Documentation Improvements:

    2793: Fix articles of words sounding with a consonant (SQL => ESS-kew-ELL) thanks to @afoeder
    2799: Fix Shard Manager docs with more accurate docblocks in SQLAzureShardManager and PoolingShardManager thanks to @tolbon
    2813: fixed return type into OCI8Statement thanks to @AlessandroMinoccheri
    2814: Incorrect documentation example for QueryBuilder#set() thanks to @Dormilich
    2818: #2814 removing incorrect QueryBuilder#set() documentation, which was showing wrong password hashing and value binding practices (combo!) thanks to @Dormilich
    2827: use intended semantics thanks to @greg0ire
    2840: Proofread types doc thanks to @greg0ire
    2874: Tenant documentation typos thanks to @phil-davis
    2875: Doc typos and grammar thanks to @phil-davis
    2864: Removed the "OCI8: SQL Queries with Question Marks" section thanks to @morozov
    2935: Improve deprecation wording in Doctrine\DBAL\Schema\Column#setOptions() thanks to @greg0ire
    2940: Clean up note on query builder setParameter documentation thanks to @jnvsor
    3027: Documentation: Warn against using object fields in MySQL and MariaDB thanks to @Jasu
    3068: typo in known vendor issues documentation thanks to @gdc676463
    3069: fix typo in known vendor issues documentation thanks to @gdc676463

Continuous Integration Improvements:

    2801: added badges for continuousphp and other badges for 2.6 thanks to @ppaulis
    2849: Update build to use stages (adding PHPCS to check for CS violations) thanks to @lcobucci
    2920: Improve build configuration thanks to @lcobucci
    2936: Incremental check for coding standards in pull requests thanks to @morozov
    2946: Attempt to run PostgeSQL 10 on Travis thanks to @Majkl578
    2956: Travis: Test against lowest and dev dependencies thanks to @Majkl578
    2961: Code style check fails on develop thanks to @morozov
    2962: Fixed code style check failures for pull request against non-master branches thanks to @morozov
    3050: Test SQL Server 17 on Travis thanks to @Majkl578
    3056: Set Appveyor to use PHP 7.2 thanks to @photodude
    3062: Added badges for AppVeyor thanks to @morozov

Code Style Improvements:

    2789: Use short array declarations thanks to @AlessandroMinoccheri
    2797: Typing final class DriverManager thanks to @tolbon
    2798: Fix PSR2 rules : "the static declaration should come after visibility" thanks to @tolbon
    2800: Fix inconsistent/missing return statements thanks to @tolbon
    2809: Missing @throws declarations in Connection thanks to @bestform
    2810: add @throws declarations to docs in Connection thanks to @bestform
    2856: use newer PHP syntax thanks to @AlessandroMinoccheri
    2857: use newer PHP syntax thanks to @AlessandroMinoccheri
    2858: Style improvements thanks to @greg0ire
    2869: fixed typo into security documentation thanks to @AlessandroMinoccheri
    2927: Refactoring tests thanks to @carusogabriel
    2932: Refactoring tests thanks to @carusogabriel
    2934: Use Null Coalesce Operator thanks to @carusogabriel
    2937: Clean elses thanks to @carusogabriel
    2942: Combine consecutives unsets thanks to @carusogabriel
    2957: Whitespaces clean-up in docs thanks to @carusogabriel
    2965: Update Doctrine CS requirement thanks to @Majkl578
    2980: Simplify returns thanks to @carusogabriel
    2999: CS: correct annotation types to use symbols specified in the CS rules thanks to @carusogabriel
    3002: Use @var instead of @param thanks to @carusogabriel
    3008: removed an else condition, fixed a parameter annotation and make little improvements thanks to @AlessandroMinoccheri
    3015: A cast statement must be followed by a single space thanks to @carusogabriel
    3026: Bump CS version to 3.0 thanks to @Majkl578
    3077: CS bump to 4.0, imports for global functions & constants thanks to @Majkl578

Chore:

    2950: Removed pre-7.1 quirks thanks to @Majkl578
    2989: Update license's copyright thanks to @SenseException
    3024: Fixed unqualified PDO class name thanks to @morozov
    3060: Development branch build fails on SQL Server thanks to @morozov
    3061: Fixed build failure on SQL Server thanks to @morozov
    3071: Start SQL Server using a synchronous command to avoid intermittent login failures thanks to @morozov

v2.6.3 - Nov 19, 2017

This release fixes the generation of default values of immutable date/datetime
times, default values of PostgreSQL's SERIAL types, and the required arguments
for SSL connections using MySQLi.

Also includes a fix for a BC-break related to json types comparison.

Total issues resolved: 11

    2815: mysqli ssl_key and ssl_cert should not be mandatory thanks to @gauauu
    2816: #2815 don't require ssl_key and ssl_cert to use ssl_ca thanks to @gauauu
    2596: Schema diff keeps thinking custom mapping types have changed thanks to @vicdelfant
    2905: Fixes custom type comment regex thanks to @jeremy-smith-maco
    2679: Fix: Doctrine custom types now accepts anything but ')' thanks to @PedroTroller
    2907: Don't Set a Default Value on PostgreSQL SERIAL Fields thanks to @chrisguitarguy
    2906: Cannot Generate [BIG]SERIAL Columns Without a Default or NOT NULL thanks to @chrisguitarguy
    2859: DateTimeImmutable error with default value CURRENT_TIMESTAMP thanks to @tok-amsiq
    2861: Default value declaration for immutable types thanks to @tok-amsiq
    2880: Symfony 3 - Postgresql JSON type always appear in diff thanks to @PapsOu
    2855: Fix BC-break regarding JsonArrayType thanks to @lcobucci

v2.6.2 - Aug 28, 2017

This release fixes an incorrect optimisation in
Doctrine\DBAL\Query\Expression\CompositeExpression which
could have led to dropping query expression components.

Also, DBAL was ignoring some important platform settings
when determining which cache keys to use when looking for
result caches: that could have led to sharing caches for
results produced by different DB connections.

Total issues resolved: 2

    2785: Fix CompositeExpression#add() optimization, which was leading to broken CompositeExpression instances thanks to @Grzesie2k
    2821: Platform from params are not correctly passed to a QueryCacheProfile thanks to @kimhemsoe

v2.6.1 - Jul 28, 2017

This release fixes an unintentional BC break that
prevented using DateTimeImmutable interfaces
in the pre-existing date-related types.

Users are still encouraged to migrate to the newly
introduced immutable date types.

Total issues resolved: 2

    2794: BC Break in Date/Time related types: can no longer convert DateTimeImmutable to database value thanks to @langj
    2795: #2794 revert bc break preventing DateTimeImmutable conversion thanks to @Ocramius

v2.6.0 - Jul 23, 2017

This is a minor release of Doctrine DBAL that aggregates over 200 fixes
and improvements that we have tested, checked, reviewed and stabilised
over the last year.

This release includes all changes of the 2.5.x series, as well as
feature additions and improvements that couldn't land in patch releases.

Backwards Compatibility Breaks

This release comes with few potential Backwards Compatibility (BC)
breaks that, while unlikely affecting consumers of the library, are
to be considered.
Please take some time to read the UPGRADE.md documentation.
The issues related to these BC breaks are listed below.

Dependency requirement changes

The dependency requirements for DBAL 2.6.0 onwards have also changed:

    HHVM is no longer officially supported
    PHP 7.1.0 is the minimum supported PHP version
    The PDO extension is now a required dependency

Deprecations

    The json_array type is now to be considered deprecated
    The Doctrine\DBAL\Schema\Table#renameColumn() API is deprecated
    and disabled
    The Doctrine\DBAL\Connection#getDatabasePlatform() may
    now trigger database connections, if a platform version
    isn't provided upfront

New features

This release introduces a few major additions:

    PostgreSQL 9.4+ platform support
    MySQL 5.7.9 (GA) platform support
    A JsonType that maps to JSON column types when supported
    by the underlying RDBMS
    DateIntervalType
    DateTimeImmutableType
    DateTimeTzImmutableType
    DateImmutableType
    TimeImmutableType
    PDO::FETCH_OBJ emulation for mysqli and oci8
    statements
    SSL root certificate configuration support for pdo_pgsql
    SSL support for mysqli

Improvements and Fixes

This release comes with a myriad of improvements and
bug-fixes that should improve both compatibility with
exotic database engines and overall performance.
We focused on stability and reliability of
existing features, and improved the overall consistency
of cross-platform behavior of the library.

A detailed list of fixes can be found below.

Total issues resolved: 224

BC Breaks:

    2527: Normalize method signatures for fetch() and fetchAll(), ensuring compatibility with the PDOStatement signature thanks to @phansys
    2519: ResultStatement#fetchAll() must define 3 arguments in order to be compatible with PDOStatement#fetchAll() thanks to @phansys
    2504: URL-decode URL-style DSN thanks to @c960657
    990: DBAL-1057 Connection is not lazy anymore when platform detection is necessary
    1072: DBAL-1130 #784 Connection is not lazy anymore, since platform detection was introduced - exposing the issue via broken test

Deprecations:

    916: Fix return type of Table#renameColumn() and mark it as deprecated thanks to @aivus
    1276: DBAL-1318 #916 Fix return type of Table#renameColumn() and mark it as deprecated
    2782: Stop using the deprecated json_array type internally thanks to @lcobucci

New Features:

    718: Identify retryable transaction errors and cause them to raise specific exception types thanks to @Tobion
    798: Add application_name to PostgreSQL driver connection thanks to @davividal
    814: Allow serverVersion to be explicitly unspecified (null) thanks to @BreiteSeite
    819: Added support for column inline comments in SQLite thanks to @hason
    824: DBAL-1143 Added Postgres 9.4 platform thanks to @mbeccati
    854: add DateInterval type thanks to @vbartusevicius
    892: DDC-3863 add a json type that doesn't have the flaws of json_array thanks to @Taluu
    919: add sslrootcert connection option to the pdo_pgsql driver thanks to @peterjmit
    1028: DBAL-1091 #755 Update MysqliStatement to emulate PDO::FETCH_OBJ behavior
    1043: DBAL-1104 DBAL-1104 #766 Add support for object hydration in oci8 driver
    1086: DBAL-1143 add JSONB type to PostgreSQL
    1127: DBAL-1184 DBAL-1143 #824 Added Postgres 9.4 platform
    1176: DBAL-1228 #854 add DateInterval type
    1280: DBAL-1321 #919 add sslrootcert connection option to the pdo_pgsql driver
    1882: DBAL-662 Support DateTimeImmutable
    2266: Add native JSON type support for MySQL >=5.7.8 thanks to @ismailbaskin
    2284: Added parameter default_dbname to pdo_pgsql driver, used to override the default database thanks to @kimhemsoe
    2306: Add "easy connect string" support for the Oci8Driver thanks to @bobvandevijver
    2307: Add support for Easy Connect string as connection parameter in OracleDB thanks to @bobvandevijver
    2450: Add immutable date types support thanks to @deeky666
    2455: Use native JSON type on MySQL >=5.7 thanks to @rh389
    2570: Allow secure connections using SSL on mysqli thanks to @pgrau
    2688: Support IS NULL checking in Connection#delete() and Connection#update() generated criteria, allowing for null column searches thanks to @jnvsor

Bug Fixes:

    713: Prevent result cache key collisions when sharing caches across different connections thanks to @vilartoni
    784: Connection is not lazy anymore, since platform detection was introduced - exposing the issue via broken test thanks to @weaverryan
    827: Fix DISTINCT queries with LIMIT and no ORDER on SQLServer 2012 thanks to @billschaller
    871: SqlConsoleCommand should show results of queries containing RETURNING thanks to @bountin
    918: Fix typo in DBALException message thanks to @chadrien
    923: DBAL-1302 Avoid rewrapping Docrine\DBAL\Exception\DriverException with nested drivers thanks to @mathroc
    924: Correcting reference to the Connection#rollBack() method - case sensitivity thanks to @rawkode
    1018: DBAL-1082: SchemaTool does not generate DDL for MySQL unsigned float
    1019: DBAL-1083 DBAL-1082 #749 Fix SchemaTool, which does not generate DDL for MySQL unsigned float
    1130: DBAL-1187 #827 Fix DISTINCT queries with LIMIT and no ORDER on SQLServer 2012
    1138: DBAL-1194 #832 Fix test failures on Windows due to differing newlines
    1139: DBAL-1196 #834 Remove documentation for non-existing events from Connection#rollBack() docblock
    1281: DBAL-1322 Correct typo in driver exception message
    1344: DBAL-1783 #924 Correcting reference to the Connection#rollBack() method - case sensitivity
    2250: Unit tests are failing on OracleDB thanks to @DeepDiver1975
    2252: ModifyLimitQueryTest::testModifyLimitQuerySubSelect() fails on OracleDB thanks to @DeepDiver1975
    2253: SchemaManagerFunctionalTestCase::testDropsDatabaseWithActiveConnections() fails on OracleDB thanks to @DeepDiver1975
    2254: Correct SchemaManagerFunctionalTestCase::testDropsDatabaseWithActiveConnections() on OracleDB thanks to @DeepDiver1975
    2255: Use shorter table names, as OracleDB allows max 30 characters thanks to @DeepDiver1975
    2263: Fix failing unit tests on OracleDB thanks to @DeepDiver1975
    2276: Fix test case on OracleDB thanks to @deeky666
    2335: Correct case sensitivity of usages of the Connection#rollBack() method thanks to @kadala
    2314: DateIntervalType supports conversion of invalid values thanks to @MisatoTremor
    2316: Fix DateInterval database value truncation (string overflow) thanks to @vbartusevicius
    2372: Handle arbitrary whitespaces when parsing SQL in order to apply LIMIT for MS SQL Server thanks to @morozov
    2413: Ensure deterministic results in the ModifyLimitQueryTest, which may otherwise fail depending on database settings and provisioning thanks to @Deltachaos
    2427: Postgres SchemaManager is reading a default of -1 as (-1) for postgres 9.4 thanks to @DeepDiver1975
    2565: Both PostgreSQL 9.5 and PostgreSQL 9.6 are currently failing on Travis thanks to @photodude
    2592: Ensure the database name is always provided when trying to use pgsql in the test suite thanks to @mikaelkael
    2594: Schema generator is not adding COMMENT to custom types thanks to @fkrauthan
    2595: assertValidIdentifier() is too restrictive against OracleDB schema object naming rules thanks to @IMP3ter
    2604: DBAL-2595 Fix retrieving last insert ID for FQN sequence name with OCI8 - allows . symbol in sequence names thanks to @deeky666
    2614: DBAL-2427 Fix negative default value introspection on PostgreSQL 9.4 thanks to @deeky666
    2631: Fix CREATE/DROP DATABASE support on SQL Server thanks to @deeky666
    2632: Fix "application_name" connection parameter tests for PostgreSQL < 9.2 thanks to @deeky666
    2640: Fix drivers' exec() method to not execute queries via prepared statements thanks to @deeky666
    2669: Add missing SSL parameters to the pdo_pgsql driver thanks to @fsok
    2671: DBAL-990 Attempt platform detection even when the database name is not set thanks to @deeky666
    2674: Correct testListTableColumns checked keys thanks to @mdwheele
    2692: Fix default isolation level for the MySqlPlatform thanks to @jnvsor
    2701: DB2SchemaManager#listTableNames() does not call filterAssetNames thanks to @asgrim
    2702: Added missing filtering of table name assets in DB2SchemaManager thanks to @asgrim
    2709: Adding PDO as hard dependency as per discussion in #808 thanks to @Ocramius
    2733: Correct documented parameter and return types for Connection#quote() thanks to @lolli42
    2745: Wrong Connection#quote() parameter hinting, incompatible with PDO::PARAM_* constants thanks to @helsner
    2747: Correct Connection#quote() parameter hinting, now compatible with PDO::PARAM_* constants thanks to @helsner

Improvements:

    768: DBAL-1106 Improve schema introspection performance on Oracle thanks to @deeky666
    779: DBAL-1123 Initialize database schema only once per PHPUnit run thanks to @deeky666
    781: Call detectDatabasePlatform only once thanks to @rosier
    810: Remove redundant Connection#connect() calls thanks to @rosier
    829: Add PostgreSQL connection test with the new charset parameter thanks to @billschaller
    841: Documentation and code styling fixes thanks to @BenMorel
    848: DBAL-1219 Add missing IBMDB2 driver functional tests thanks to @deeky666
    867: Add test for schema diffing on a table with a renamed foreign key column referencing a renamed table thanks to @billschaller
    869: Make date and time types throw exception when invalid values are passed to convertToDatabaseValue thanks to @billschaller
    897: Various typo and wording fixes in the codebase thanks to @SpacePossum
    899: add requiresSQLCommentHint in DateIntervalType thanks to @vbartusevicius
    902: #869 cleanups and hardening of tests around date-related types thanks to @Ocramius
    966: DBAL-1035 #718 Identify retryable transaction errors and cause them to raise specific exception type
    1011: DBAL-1076: #745 Added doModifyLimitQuery for the SQLServer2012Platform, which uses OFFSET... FETCH instead of LIMIT
    1045: DBAL-1106 DBAL-1106 #768 Improve schema introspection performance on Oracle
    1068: DBAL-1127 #781 Call detectDatabasePlatform only once
    1085: DBAL-1142 #796 Map tsvector type as text in PostgreSQL Platform
    1089: DBAL-1146 #798 Add application_name to PostgreSQL driver connection
    1103: DBAL-1161 #810 Remove redundant Connection#connect() calls
    1109: DBAL-1167 #814 allow serverVersion to be explicitly unspecified (null)
    1118: DBAL-1176 #819 Added support for column inline comments in SQLite
    1134: DBAL-1190 #829 Add PostgreSQL connection test with the new charset parameter
    1155: DBAL-1209 #841 Documentation and code styling fixes
    1166: DBAL-1219 DBAL-1219 #848 Add missing IBMDB2 driver functional tests
    1199: DBAL-1249 #869 Make date and time types throw exception when invalid values are passed to convertToDatabaseValue
    1213: DBAL-1261 return callable result from Doctrine\DBAL\Connection::transactional()
    1238: DBAL-1284 #897 Various typo and wording fixes in the codebase
    1242: DBAL-1288 #899 add requiresSQLCommentHint in DateIntervalType
    1247: DBAL-1292 Drop PHP 5.3 support
    1248: DBAL-1293 Make date and time types throw exception when invalid values are passed to convertToDatabaseValue
    1249: DBAL-1294 #869 #902 cleanups and hardening of tests around date-related types
    2309: Remove useless ternary in the DecimalType thanks to @JHGitty
    2317: Add the ReservedWordsCommand -l or --list parameter to the usage hints thanks to @rquadling
    2349: Fluent methods in QueryBuilder are now documented as returning self thanks to @mrclay
    2363: Add test case scenario for LIMIT/OFFSET when selecting from a sub-SELECT thanks to @Deltachaos
    2419: Remove PHP 5.5 support thanks to @Ocramius
    2422: Map custom exceptions for the "no default value" (1364) error in the MySQL drivers thanks to @MorrisJobke
    2425: Explicitly use CompositeExpression#count() method rather than count($this) thanks to @Progdom
    2432: Removed nearly all call_user_* usages thanks to @kimhemsoe
    2437: Improve the phpdoc on Connection thanks to @mnapoli
    2485: Remove unused parameter from ConversionException::conversionFailedSerialization() thanks to @greg0ire
    2493: Reuse prepared statements in the SQL Server driver thanks to @morozov
    2494: Use the same statement resource for repeated execution of the same statement on SQL Server thanks to @morozov
    2495: Optimize and improve parameter conversion in OCI8Statement thanks to @morozov
    2547: Replacing spaces in the pgsql DSN string with semicolons for consistency with pdo_pgsql thanks to @chrisissorry
    2603: DBAL-2594 Implicitly mark types as commented in all platforms thanks to @deeky666
    2622: Remove dead code from MasterSlaveConnection::connect() thanks to @jnvsor
    2630: DBAL-2626 Add PHPUnit config for ContinuousPHP OracleDB testing thanks to @deeky666
    2653: Merge MySQL 5.7.9 (GA) semantics into MySQL57Platform thanks to @deeky666
    2657: Enhance phpdoc of QueryBuilder::setParameter() thanks to @ufomelkor
    2658: Making the DBALException implement Throwable thanks to @svycka
    2704: Add error as well as exception handling to Mysqli drivers thanks to @develancer
    2724: Improve Table#getColumns() performance by reducing its runtime complexity thanks to @evgpisarchik
    2735: Mysqli is missing some driver connection options thanks to @leadboots5
    2742: Use short array declarations in the Driver namespace thanks to @alessandrominoccheri
    2746: Using short array declarations in the MasterSlaveConnection namespace thanks to @alessandrominoccheri
    2768: Add all missing MariaDB keywords to the MySQL platform thanks to @roelvanduijnhoven
    2774: Use short array declarations in the Query namespace thanks to @alessandrominoccheri
    2776: Use short array declarations in the Sharding namespace thanks to @alessandrominoccheri
    2778: Use short array declaration inside the Tools namespace thanks to @alessandrominoccheri
    2786: Map error code 1429 to ConnectionException in the AbstractMySQLDriver thanks to @SpacePossum

Documentation Improvements:

    761: Fixed typo in types documentation thanks to @BenMorel
    834: Remove documentation for non-existing events from Connection#rollBack() docblock thanks to @slider
    901: Update docs dependencies script and readme to target Ubuntu 14.04 thanks to @billschaller
    904: Fix tearDown of some functional test cases thanks to @deeky666
    907: Corrected MySQL collation support documentation thanks to @mroca
    909: Fix typo in transactions documentation thanks to @xelan
    915: Correcting 2 anchors in the docs that don't exist anymore thanks to @mikesimonson
    1034: DBAL-1098 #761 Fixed typo in types documentation
    1245: DBAL-1290 #901 Update docs dependencies script and readme to target Ubuntu 14.04
    1257: DBAL-1300 #907 Corrected MySQL collation support documentation
    1260: DBAL-1303 #909 Fix typo in transactions documentation
    1275: DBAL-1317 #915 Correcting 2 anchors in the docs that don't exist anymore
    2271: Correct minor formatting glitches in the transactions documentation thanks to @jonpasquier
    2290: Document exceptions for retryable transactions thanks to @deeky666
    2293: Fixed some broken links in the types documentation thanks to @jeancarlomachado
    2322: Improve overall DBAL raised Events documentation thanks to @senseexception
    2382: Remove arbitrary line number from github link in the caching documentation thanks to @jacobhenke
    2453: Documentation for test suite runner references non-existing files thanks to @miholeus
    2454: #2453 Update test runner parameters in the documentation thanks to @miholeus
    2521: Reference global namespace classes via FQCN in the transactions documentation thanks to @frost-nzcr4
    2599: Corrected styling around the GUID type in the types documentation thanks to @tolbon
    2623: Generic SQL Sharding Support - Documentation of the wrapperClass parameter is invalid thanks to @ivanbogomoloff
    2641: DBAL-2623 Fix Generic SQL Sharding Support documentation examples thanks to @deeky666
    2664: Add oci8 persistent connection support to the configuration documentation thanks to @mathieubouchard
    2703: Correct documentation examples for the Doctrine\DBAL\Id\TableGenerator thanks to @justblackbird
    2736: Correcting references to Driver\Connection in the documentation thanks to @b0nd0
    2740: Correct classes referenced in the Driver implementation details in the documentation thanks to @b0nd0
    2760: Add documentation regarding transactional exceptions thanks to @dsantang
    2761: Fix documentation format regarding retryable exceptions thanks to @dsantang
    2770: Fix namespace separator in the exceptions in the transactional handling documentation thanks to @Tobion

Chore:

    770: Moved Doctrine\Tests namespace to composer autoload-dev thanks to @guilhermeblanco
    778: DBAL-1122 Cleanup PHPUnit test suite bootstrap thanks to @deeky666
    787: Add left-over console file to the mapped composer binaries thanks to @t0xiccode
    825: Add postgresql 9.4 to travis builds thanks to @billschaller
    830: README.md nicer badges, cleanup, 2.3 dropped thanks to @tomasvotruba
    832: Fix test failures on Windows due to differing newlines thanks to @billschaller
    837: Revert the addition of the wrong bin script to composer.json thanks to @stof
    853: Remove HHVM-nightly builds thanks to @stof
    876: Remove unused git submodules thanks to @koc
    880: Drop PHP 5.3 from Travis-CI build matrix thanks to @billschaller
    884: Travis-CI - Switch to container-based infrastructure thanks to @tomasvotruba
    888: Allow testing against doctrine/common 2.6 thanks to @nicolas-grekas
    911: Fix test suite on windows: skip on missing extensions, correct path flags thanks to @Tobion
    917: Remove GIT submodule entries and use autoload-dev for the test suite thanks to @Tobion
    992: DBAL-1059: #735 Bump branch alias to version 2.6.0-DEV
    1006: DBAL-1071: #740 Add 2.5 build status to README.md
    1031: DBAL-1094: #758 Cleanup travis database creation
    1050: DBAL-1110 #770 Moved Doctrine\Tests namespace to composer autoload-dev
    1063: DBAL-1122 #778 Cleanup PHPUnit test suite bootstrapper
    1064: DBAL-1123 #779 Initialize database schema only once per PHPUnit run
    1075: DBAL-1133 #787 Add left-over console file to the mapped composer binaries
    1128: DBAL-1185 #825 Add postgresql 9.4 to travis builds
    1135: DBAL-1191 #830 README.md nicer badges, cleanup, 2.3 dropped
    1143: DBAL-1199 #837 Revert the addition of the wrong bin script to composer.json
    1174: DBAL-1226 #853 Remove HHVM-nightly builds
    1209: DBAL-1258 #876 Remove unused git submodules
    1215: DBAL-1263 #880 Drop PHP 5.3 from Travis-CI build matrix
    1219: DBAL-1267 #884 Travis-CI - Switch to container-based infrastructure
    1226: DBAL-1273 #888 Allow testing against doctrine/common 2.6
    1252: DBAL-1297 #904 Fix tearDown of some functional test cases
    1277: DBAL-1319 #917 Remove GIT submodule entries and use autoload-dev for the test suite
    1282: DBAL-1323 Remove submodule entries and improve test setup
    2274: Removed 2.4.x build status from README.md thanks to @Ocramius
    2278: Allow PHP 7 failure on Travis-CI thanks to @deeky666
    2282: Allow PHP 7 + pdo_pgsql failures on Travis-CI again thanks to @deeky666
    2340: Fix SQL queries numbering in test failure output thanks to @guilliamxavier
    2364: Display further contextual information on failed functional tests thanks to @Deltachaos
    2435: Replace getMock() with createMock() thanks to @deeky666
    2488: Blacklist buggy phpunit-mock-objects v3.2.5 from the dev dependencies thanks to @greg0ire
    2480: Exclude buggy phpunit-mock-objects v3.2.4 from the allowed dev dependencies thanks to @greg0ire
    2550: Bump HHVM version to 3.15.2+ thanks to @photodude
    2564: Add PostgreSQL 9.6 to the build pipeline thanks to @photodude
    2590: Remove support for PHP 5.x thanks to @railto
    2607: DBAL-2565 Remove fragile test that cannot be abstracted across all PostgreSQL versions thanks to @deeky666
    2626: Test OracleDB abstractions in a continuous integration environment thanks to @photodude
    2629: HHVM testing needs to be in PHP 7 mode thanks to @photodude
    2633: Run SQL Azure tests conditionally thanks to @deeky666
    2655: Simplify Travis-CI build matrix thanks to @photodude
    2660: Revert PgSQL and MariaDB Travis-CI build matrix simplification thanks to @photodude
    2732: Update docs/en/_theme submodule references thanks to @eibt
    2750: Require PHP 7.1 thanks to @lcobucci
    2755: Ensure compatibility with different MySQL versions thanks to @lcobucci
    2756: Add Scrutinizer-CI to the build pipeline thanks to @malukenho
    2757: Add mysql version 5.6 and 5.7 to Travis-CI thanks to @epinxteren
    2758: Generate code coverage via PHPUnit, pass it to Scrutinizer-CI thanks to @malukenho
    2764: Add mysql versions 5.6 and 5.7 to Travis-CI thanks to @zghosts

v2.5.13 - Jul 22, 2017

This release fixes a number of issues around the PostgreSQL,
OracleDB and MySQL platforms database introspection.

Connection DSN generation fixes were applied for the
SQLAnywhere driver.

Corrections on how record fetching mode have been applied to
the DB2 driver.

Fixes were applied to the handling of cursors and result
caching with pdo_sqlsrv.

Total issues resolved: 16

    889: #1234 On OracleDB, a "Table has no primary key" error is raised when the index and the constraint name don't match thanks to @nitso
    1131: DBAL-1188: OracleDB: List table columns are returned in the wrong order thanks to @doctrinebot
    1234: DBAL-1280: "Table has no primary key" when generating entities for Oracle tables thanks to @doctrinebot
    2405: SQLAnywhere corrections for DSN generation and persistent connections thanks to @andipohl
    2647: DBAL-2644: Fix fetchAll(PDO::FETCH_COLUMN) on DB2 with Portability wrapper thanks to @morozov
    2650: Fix result cache and PDO connection test on pdo_sqlsrv thanks to @deeky666
    2651: Fix closing statement cursor on pdo_sqlsrv if not executed yet thanks to @deeky666
    2654: Make functional sqlanywhere driver tests conditional thanks to @deeky666
    2670: Slash before _ in postgresql LIKE condition with any pg_ prefix to prevent confusion with the wildcard character thanks to @blackbjorn
    2673: #1131 On OracleDB, getListTableColumnsSQL returns columns ordered by position instead of by name thanks to @mdwheele
    2686: #889 On OracleDB, primary key is considered missing if index_name != constraint_name thanks to @SkydiveMarius
    2696: MySQL: Fix primary key alteration when adding new columns thanks to @drieschel
    2714: Sequence::isAutoIncrementsFor() is not normalising PK column, and is unable to distinguish different casing thanks to @dhensby
    2715: #2714 Sequence::isAutoIncrementsFor() is now case-insensitive thanks to @dhensby
    2720: SQLParserUtils::getPlaceholderPositions() fails if there are quoted strings containing only backslashes thanks to @mondrake
    2730: Corrected duplicate COMMENT part in DDL statement thanks to @mondrake

v2.5.12 - Feb 8, 2017

This release fixes some regressions introduced in OracleDB support in 2.5.11.
Specifically, closing a cursor caused an ORA-01002 exception to be raised
in some scenarios.

Further fixes include:

    support for dropping "in use" databases in OracleDB and SQL Server (must disconnect first)
    corrections in how the last insert ID is fetched on SQL Server
    re-use of parameters bound to an sqlsrv statement via bindValue()

Total issues resolved: 8

    2634: Fix fetching last insert ID for sequences on SQL Server
    2635: Fix date diff test
    2636: Fix dropping in use databases on SQL Server and Oracle
    2637: ORA-01002: fetch out of sequence
    2638: Tear down active transactions in functional test cases
    2639: Update Version.php
    2645: DBAL-2637 Fix closing prepared statement cursor with LOB column on Oracle
    2646: Fix the reuse of a statement on sqlsrv with explicit bindValue()

v2.5.11 - Feb 4, 2017

This release fixes a number of inconsistencies around prepared statements
when closeCursor() is called, or when a prepared statement is re-used
multiple times.

Total issues resolved: 5

    2487: Store results of subsequents statement executions same as of the first one
    2489: Rebind row values to the statement after freeing result
    2536: Bind result variables after each execution in order to prevent string truncation
    2546: Prepared statements become unusable after calling closeCursor() on IBM DB2, Oracle and MS SQL Server.
    2557: Inconsistent semantics of close cursor

v2.5.10 - Jan 23, 2017

This release fixes:

    some PHP 5.3 compatibility issues that caused the test suite to fail
    for the previous release
    index renaming for indexes that had particular assigned options, and
    that were being added rather than renamed or recreated under a different
    name
    date and datetimetz OracleDB type introspection: these two types
    were incorrectly recognized as datetime

Total issues resolved: 4

    2508: Renaming index does not rename the index, but creates new one
    2555: schema generation maps oracledb DATE fields to datetime
    2611: #2508 Pass through index options when renaming index on table
    2612: #2555 Fix date and datetimetz type mapping on Oracle

v2.5.9 - Jan 19, 2017

This release fixes an issue with type information passed to Connection#update(),
which was incorrectly handled if the updated columns and the identifier columns
had equivalent keys.

Also, the generated current date and time SQL expressions for SQL Server were fixed.

Total issues resolved: 4

    2511: DBAL Connection::update() - types list does not match the parameter list if fields are used in SET and WHERE clause
    2586: SQL-Server : issue on getCurrentDateSql()
    2608: DBAL-2586 Fix current date and time SQL generation on SQL Server
    2609: DBAL-2511 Fix type list extraction in connection update method

v2.5.8 - Jan 17, 2017

This release fixes some issues around LIMIT/OFFSET handling in DB2, OracleDB, SQL Server:

    Allowing LIMIT/OFFSET modification without LIMIT on OracleDB
    Allowing LIMIT/OFFSET modification with OFFSET = 0 on DB2
    Avoiding an accidental infinite loop in LIMIT/OFFSET modification on SQL Server

Total issues resolved: 4

    2408: Hotfix 2313 infinite loop
    2463: IBM_DB2 platform doesn't handle offset without limit
    2509: Oracle platform ignores OFFSET in case if LIMIT is not specified
    2602: Backport #2408

v2.5.7 - Jan 14, 2017

This release fixes some OracleDB and PostgreSQL specific issues.

    Introspecting table columns on OracleDB when using a non-default schema caused SQL error ORA-01427
    SQL parameter expansion was broken when using the ARRAY[] expression on PostgreSQL

Total issues resolved: 9

    2496: Fix parameter list expansion inside PostgreSQL arrays
    2515: PHP Warning when listing table columns in Oracle
    2516: #2515 fix schema listing when having identical tables in databases
    2517: ORA-01427 when listing table columns
    2518: Fixed ORA-01427 when listing columns
    2522: OraclePlatform - ORA-01427: single-row subquery returns more than one row
    2549: Oracle column metadata import fix
    2584: Doctrine:Schema:Validate leeds to ORA-01427(single-row subquery returns more than one row)
    2585: OraclePlatform : Add an owner condition to the list table column comment subquery

v2.5.6 - Jan 12, 2017

Total issues resolved: 1

    2569: Allow doctrine/common 2.7

v2.5.5 - Sep 9, 2016

    842: Fixed incorrect handling of single quotes in SQL-Strings
    856: MySQL getListTableForeignKeysSQL: use current database if null passed
    861: Check for foreign table name on removed tables foreign key
    862: Quote table and constraint names in drop foreign key / drop constraint SQL
    863: Strip leading slash of databasename from URL
    925: Fixing the command when option is CURRENT_SCHEMA
    1054: DBAL-1114: Problem with drop database on PostgreSQL
    1106: DBAL-1164: Creating SQLite Connections via a URL Does Not Work
    1151: DBAL-1205: getPlaceholderPositions finds placeholders which are actually no placeholder if string contains single quotes
    1183: DBAL-1234: Additional slash in dbname when providing settings as URL without scheme
    2182: DBAL-939: schema update doesnt detect boolean type correctly
    2261: OCI8 - bindValue overwrite previous values
    2262: Issue #2261 - OCI8 Driver PHP 7 - Fix bindValue overwriting other params.
    2267: Pass "path" to pdo-sqlite drivers from DriverManager instead of "dbname"
    2270: SqlitePlatform does not escape table name on truncate
    2275: Quote reserved keywords in TRUNCATE TABLE SQL
    2277: [DBAL-939] Fix reverse engineering boolean type columns on DB2
    2279: Stop using template1 as default database for postgres drivers
    2286: Fix list foreign keys SQL database parameter evaluation
    2287: Fix parsing schemeless connection URLs
    2288: Preserve quotation of old column name in ColumnDiff
    2291: The QueryBuilder::getSQLForSelect() always appends a FROM clause for select queries
    2292: Do not generate FROM clause in QueryBuilder if no tables specified
    2302: when use \Doctrine\DBAL\Schema\Comparator to compare two table schema, has a problem
    2303: Fix another primary key alteration with autoincrement column case on MySQL
    2310: [DB2] Move row number to the end of the field list in query limit/offset modification
    2318: [Oracle] Fix list table columns when using external or OS authentication with Oracle
    2384: Fluent methods in QueryBuilder are now documented as returning $this
    2386: Fix oci driver bindValue overwrite with php7
    2390: Catch Throwable in Connection::transactional()
    2403: fix grammar in DBALException messages
    2428: Modify Limit Query on SQLServer2012 with newline before ORDER BY
    2434: Keep references to bound parameter values in oci8 driver
    2436: MySqlPlatform::getListTableColumnsSQL() is not escaping names
    2440: No parameters passed to logger when executing statement using bindParam
    2442: Escape identifiers in metadata SQL properly when used as string literal
    2443: Track the Values & Types Passed to Statement::bindParam
    2484: Allow usage of symfony/console ^3.0 in dev dependencies
    2497: ResultStatement::fetch() returns null instead of false with mysqli
    2500: Making sure that fetch returns false if nothing is found

v2.5.4 - Jan 5, 2016

Total issues resolved: 3

    2249: Compatibility mis-match? PGSQL_ATTR_DISABLE_PREPARES in v2.5.2 (in a PHP 5.6.16 envt)
    2272: [DBAL-1779] Fix string column type declarations with whitespace on SQLite
    2273: Fix usage of PDO::PGSQL_ATTR_DISABLE_PREPARES for edge case pdo_pgsql setups

v2.5.3 - Dec 25, 2015

Total issues resolved: 2

    818: Rebuild SQLServerPlatform::doModifyLimitQuery again to use a CTE
    2268: #2260 - loosening doctrine/common requirement: allowing 2.6.x

v2.5.2 - Sep 16, 2015

Total issues resolved: 24
Bug

    [DBAL-1115] - [GH-773] Fix quoted identifiers for database creation SQL on SQL Anywhere
    [DBAL-1121] - [GH-777] Make host and server connection parameters optional for sqlanywhere driver
    [DBAL-1128] - [GH-782] Fix: SQLite offset with no limit support
    [DBAL-1132] - [GH-786] Fix removing autoincrement column from a primary key
    [DBAL-1137] - Infinite recursion on non-unique table/join alias in QueryBuilder
    [DBAL-1154] - [GH-806] Fix broken functional test for SQL server
    [DBAL-1169] - [GH-815] Fix for inconsistent use of getSQLDeclaration
    [DBAL-1181] - [GH-822] Fix for bad profiling data, showing an indefinitely long query
    [DBAL-1183] - [GH-823] fix client_encoding setting to support pgbouncer
    [DBAL-1186] - [GH-826] fix incorrect ordering of columns in clustered indexes on sql server
    [DBAL-1189] - [GH-828] rehashed charset implementation to support old versions of postgresql
    [DBAL-1192] - [GH-831] allow hhvm/mysqli failure so poor travis can feel better
    [DBAL-1215] - [GH-844] template1 as default database for PostgreSQL
    [DBAL-1217] - [GH-846] Fix retrieving the database name connected to for SQL Server
    [DBAL-1218] - [GH-847] [DBAL-1217] Fix retrieving the database name connected to for SQL Anywhere
    [DBAL-1220] - [GH-849] Fix dropping database with active connection on PostgreSQL
    [DBAL-1233] - TEXT type in MSSQL should be NVARCHAR(MAX) not VARCHAR(MAX)
    [DBAL-1240] - [GH-864] Fix undefined notices within MasterSlaveConnection
    [DBAL-1260] - [GH-878] Fix call on non-object in ping() with PDO wrapper
    [DBAL-1296] - [GH-903] Override methods for sharding connection

Documentation

    [DBAL-1174] - [GH-817] Fixed a minor typo

Improvement

    [DBAL-1159] - [GH-809] travis: PHP 7.0 nightly added
    [DBAL-1270] - [GH-886] Add test for MariaDB 5.5, 10.0 and 10.1 on Travis

Task

    [DBAL-1299] - [GH-906] [2.5] Fix allowed failures for HHVM + MariaDB builds on Travis

v2.5.1 - 12 January 2015

Total issues resolved: 24
Bug

    [DBAL-1033] - [GH-716] Do not TRIM() parentheses around partial indexe conditions
    [DBAL-1038] - [GH-720] Type json_array is not consistent with NULL values
    [DBAL-1051] - [GH-730] Update index name quoting in MySQL table creation
    [DBAL-1058] - It seems that MSSQL syntax was changed
    [DBAL-1060] - [GH-736] [DBAL-1058] Fix database and namespace introspection for SQL Server
    [DBAL-1062] - upgrade from v2.4.3 to v2.5.0 is forcing recreating Indexes making Doctrine unusable
    [DBAL-1063] - Exceptions from SchemaTool when running with DBAL 2.5.0
    [DBAL-1072] - [GH-741] [DBAL-1051] Quote index name in inline index declaration SQL
    [DBAL-1073] - [GH-742] Take care about mariadb platform
    [DBAL-1087] - [GH-751] Length of fixed string type (char) is ignored on Postgre schema update
    [DBAL-1088] - [GH-752] Fix error handling restore
    [DBAL-1090] - [GH-754] Changing string to fixed string is not recognized in PostgreSQL Platform
    [DBAL-1092] - [GH-756] [DBAL-1062] Fix renaming indexes used by foreign key constraints
    [DBAL-1093] - [GH-757] Fix creating and dropping database on PostgreSQL
    [DBAL-1095] - [GH-759] [DBAL-1095] Fix index introspection on SQL Anywhere
    [DBAL-1097] - [GH-760] [DBAL-1097] Fix foreign key constraint referential action on Oracle
    [DBAL-1100] - [GH-762] PostgreSQL needs explicitly closed connection in functional test
    [DBAL-1102] - [GH-764] [DBAL-1063] Allow defining duplicate indexes on a table
    [DBAL-1109] - unique-constraints names not quoted on create
    [DBAL-1111] - [GH-771] Fix unique index exception handling for an index on multiple columns in PHP 5.4

Documentation

    [DBAL-1075] - [GH-744] Removed non-phpdoc @internal tags
    [DBAL-1078] - [GH-746] minor phpdoc fixes in the platform files

Improvement

    [DBAL-1079] - [GH-747] minor phpdoc fixes in the schema files
    [DBAL-1108] - [GH-769] Allow overriding implicit indexes

v2.5.0 - 4 December 2014

The following list contains the major new features of DBAL:

    Support for SAP Sybase SQL Anywhere versions 10, 11, 12 and 16 (DBAL-475)
    Support for auto-commit=NO on all drivers and platforms. (DBAL-81)
    Refactor exceptions to use common error-codes and exception classes that derive from Doctrine\DBAL\DBALException. (DBAL-407)
    Add support to retry connections with Doctrine\DBAL\Connection#ping() method. (DBAL-275)
    Add INSERT support to QueryBuilder (DBAL-320)
    Add Binary type for VARBINARY support (DBAL-714)
    Add charset and SSL connection support to PostgreSQL (DBAL-567, DBAL-702)
    Add options support for Myqli (DBAL-643)
    Add support for using database uris with the url parameter in DriverManager::getConnection() which supports several forms used by PaaS providers out of the box (DBAL-1050).
    Auto detection of platform to use based on database (DBAL-757)
    Improved SQL Server LIMIT emulation support. (Multiple tickets)
    Improvements to HHVM Support (no full support yet)

v2.4.3 - 16 October 2014

Total issues resolved: 12

    DBAL-760 - Don't return warnings as errors in sqlsrv driver #490
    DBAL-766 - PostgreSQL: Fix statement for getTableWhereClause method #492
    DBAL-759 - Fix driver error while introspecting sequences in SQL Server 2012 #489
    DDC-2883 - DBAL-766 - PostgreSQL: Fix statement for getTableWhereClause method #492
    DBAL-787 - Fix modifying limit/offset for statements with subqueries on SQL Server #512
    DBAL-792 - Fix sqlite autoincrement detection #515
    #625 - Fix pg boolean conversion
    DBAL-950 - Backport #625 - pgsql boolean conversion
    DBAL-951 - Remove duplicate suggest section in composer.json #641
    DBAL-963 - Add close() method in MasterSlaveConnection.php #652
    DBAL-976 - Fix evaluation of NOLOCK table hint on SQL Server #663
    DBAL-1006 - DBAL-717 - DBAL-335 - Fix bug in MasterSlaveConnection with keepSlave option and switch back after transaction #690

v2.4.0 - 7 September 2013

[DBAL-340] - [GH-196] Fixed mini-typo
[DBAL-344] - [GH-200] params not passed from execute to logger
[DBAL-350] - [GH-205] Added exit code for dbal:reserved-words command
[DBAL-355] - [GH-208] Optimize autoload prefix in composer.json
[DBAL-356] - [GH-209] Added query micro-optimization
[DBAL-366] - [GH-218] [MySQL] Fixed bug with comments not adding quotes for
	tables
[DBAL-370] - [GH-220] Added support for alter table, foreign keys and
	autoincrement detection to Sqlite platform and schema
[DBAL-381] - [GH-227] MySql TEXT and BLOB type declarations
[DBAL-383] - [GH-228] fixed typo for enabling DEFERRED support
[DBAL-396] - [GH-236] DBAL-200 Missing docs for 1 parameter in
	Connection::update
[DBAL-417] - [GH-250] Lightweight export as of doctrine/doctrine2#543
[DBAL-431] - [GH-261] Fix OFFSET without LIMIT cause MySQL syntax error.
[DBAL-432] - [GH-262] Add Symfony Console dependency to composer.json
[DBAL-435] - [GH-264] Allow passing empty arrays as parameters
[DBAL-438] - [GH-266] Removed outdated methods in DatabasePlatformMock.
[DBAL-439] - [GH-267] Add SQLServerPlatform supports schemas
[DBAL-440] - [GH-268] Remove deprecated getShowDatabasesSQL() from Platforms
[DBAL-442] - Break the query building with multiple from parts
[DBAL-445] - [GH-271] added the possibility to use column names as keys for
	the types in Connection::insert()
[DBAL-447] - [GH-272] Refactor SQL Server keyword dictionaries and MsSQL
	leftovers
[DBAL-455] - [GH-278] OraclePlatform sequence naming for primary keys
[DBAL-459] - [GH-282] Add column collation support for SQL Server
[DBAL-460] - [GH-283] Fix SchemaManagerFunctionalTestCase composite foreign
	keys test
[DBAL-462] - [GH-284] Correcting code example
[DBAL-473] - [GH-292] Add length in the OCI8 bindParam
[DBAL-476] - [GH-294] Allow removing column comment on some platforms
[DBAL-478] - [GH-295] Fix ModifyLimitQueryTest
[DBAL-484] - [GH-298] Fix SQL Server default constraints
[DBAL-485] - [GH-299] Fix list SQL Server composite foreign keys
[DBAL-486] - [GH-300] Improve list SQL Server table indexes
[DBAL-494] - [GH-304] Fix for DBAL-442
[DBAL-497] - SQLServerPlatform modifies limit query incorrectly when column
	names start with "from"
[DBAL-498] - [GH-306] [DBAL-497] Fixed SQL Server platform replacing 'FROM' in
	column names during limit
[DBAL-499] - [GH-307] Postgres fix for a possible unavailable dbname
[DBAL-500] - [GH-308] added index flags to schema table
[DBAL-506] - [GH-312] [DBAL-264] Support for UIDs in PostgreSQL
[DBAL-508] - MySqlSchemaManager accessing undefined index tableColumn[comment]
[DBAL-511] - Schema\ColumnDiff incorrect with default varchar value and
	postgresql
[DBAL-520] - [GH-319] Delete unnecessary "use PDO" statement
[DBAL-522] - BC break : executeQuery with an array containing null value(s).
[DBAL-530] - sqlite: foreignKey - definition wrong when tables has
	databasename as prefix
[DBAL-533] - [GH-327] #DDC-2313: QueryBuilder Deep Cloning
[DBAL-539] - [GH-332] [DDC-2470] Use column name instead of alias to modify
	order by clause
[DBAL-549] - [GH-339] Removed an unused method in AbstractPlatform.
[DBAL-568] - [GH-348] Portability wrapper _defaultFetchMode
[DBAL-583] - [GH-360] Don't add 'NOT NULL' to the 'ALTER TABLE' when that
	hasn't changed
Improvement
[DBAL-331] - [GH-192] ExpressionBuilder in and notIn methods
[DBAL-403] - [GH-240] Fix for DBAL-209
