Unverified Commit 01143c9c authored by Sergei Morozov's avatar Sergei Morozov

Merge branch '3.0.x'

parents 9c91d750 133ce49c
......@@ -3,7 +3,7 @@ build:
analysis:
environment:
php:
version: 7.2
version: 7.3
cache:
disabled: false
directories:
......
......@@ -14,7 +14,11 @@ before_install:
fi
before_script:
- if [[ "$DB" == "mysql" || "$DB" == "mysqli" || "$DB" == *"mariadb"* ]]; then mysql < tests/travis/create-mysql-schema.sql; fi;
- |
if [[ -n "$IMAGE" ]]
then
bash ./tests/travis/docker-run-mysql-or-mariadb.sh
fi
install:
- |
......@@ -56,288 +60,152 @@ jobs:
script: vendor/bin/phpcs
- stage: Test
php: 7.2
env: DB=mysql.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
php: 7.3
env: DB=mysql.docker IMAGE=mysql:5.7 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=mysqli.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
php: 7.3
env: DB=mysql.docker IMAGE=mysql:8.0 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=mariadb MARIADB_VERSION=10.3
addons:
mariadb: 10.3
php: 7.3
env: DB=mysqli.docker IMAGE=mysql:5.7 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=mariadb.mysqli MARIADB_VERSION=10.3
addons:
mariadb: 10.3
php: 7.3
env: DB=mysqli.docker IMAGE=mysql:8.0 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=pgsql POSTGRESQL_VERSION=11.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-postgres-11.sh
php: 7.3
env: DB=mariadb.docker IMAGE=mariadb:10.0 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=sqlite
php: 7.3
env: DB=mariadb.docker IMAGE=mariadb:10.1 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
php: 7.3
env: DB=mariadb.docker IMAGE=mariadb:10.2 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=pdo_sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-pdo_sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
php: 7.3
env: DB=mariadb.docker IMAGE=mariadb:10.3 COVERAGE=yes
- stage: Test
php: 7.2
env: DB=sqlite DEPENDENCIES=low
install:
- travis_retry composer update --prefer-dist --prefer-lowest
php: 7.3
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.0 COVERAGE=yes
- stage: Test
php: 7.3
env: DB=mysql.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.1 COVERAGE=yes
- stage: Test
php: 7.3
env: DB=mysqli.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.2 COVERAGE=yes
- stage: Test
php: 7.3
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.3 COVERAGE=yes
- stage: Test
php: 7.3
env: DB=pgsql POSTGRESQL_VERSION=9.4 COVERAGE=yes
addons:
postgresql: "9.4"
- stage: Test
php: 7.3
env: DB=mariadb MARIADB_VERSION=10.3
env: DB=pgsql POSTGRESQL_VERSION=9.5 COVERAGE=yes
addons:
mariadb: 10.3
postgresql: "9.5"
- stage: Test
php: 7.3
env: DB=mariadb.mysqli MARIADB_VERSION=10.3
env: DB=pgsql POSTGRESQL_VERSION=9.6 COVERAGE=yes
addons:
mariadb: 10.3
postgresql: "9.6"
- stage: Test
php: 7.3
env: DB=pgsql POSTGRESQL_VERSION=11.0
env: DB=pgsql POSTGRESQL_VERSION=10.0 COVERAGE=yes
sudo: required
services:
- docker
addons:
postgresql: "10"
before_script:
- bash ./tests/travis/install-postgres-11.sh
- bash ./tests/travis/install-postgres-10.sh
- stage: Test
php: 7.3
env: DB=sqlite
env: DB=pgsql POSTGRESQL_VERSION=11.0 COVERAGE=yes
sudo: required
before_script:
- bash ./tests/travis/install-postgres-11.sh
- stage: Test
php: 7.3
env: DB=sqlsrv
env: DB=sqlsrv COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
- stage: Test
php: 7.3
env: DB=pdo_sqlsrv
env: DB=pdo_sqlsrv COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-pdo_sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
- stage: Test
php: 7.4
env: DB=mysql COVERAGE=yes
services:
- mysql
- stage: Test
php: 7.4
env: DB=mysql.docker MYSQL_VERSION=5.7 COVERAGE=yes
sudo: required
before_script:
- bash ./tests/travis/install-mysql-5.7.sh
- stage: Test
php: 7.4
env: DB=mysql.docker MYSQL_VERSION=8.0 COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
- stage: Test
php: 7.4
env: DB=mysqli COVERAGE=yes
services:
- mysql
- stage: Test
php: 7.4
env: DB=mysqli.docker MYSQL_VERSION=5.7 COVERAGE=yes
sudo: required
before_script:
- bash ./tests/travis/install-mysql-5.7.sh
- stage: Test
php: 7.4
env: DB=mysqli.docker MYSQL_VERSION=8.0 COVERAGE=yes
php: 7.3
env: DB=ibm_db2 COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
- stage: Test
php: 7.4
env: DB=mariadb.docker MARIADB_VERSION=10.1 COVERAGE=yes
services:
- docker
before_script:
- bash ./tests/travis/install-mariadb.sh
- stage: Test
php: 7.4
env: DB=mariadb MARIADB_VERSION=10.2 COVERAGE=yes
addons:
mariadb: 10.2
- bash ./tests/travis/install-db2.sh
- bash ./tests/travis/install-db2-ibm_db2.sh
- stage: Test
php: 7.4
env: DB=mariadb MARIADB_VERSION=10.3 COVERAGE=yes
addons:
mariadb: 10.3
php: 7.3
env: DB=sqlite DEPENDENCIES=low
install:
- travis_retry composer update --prefer-dist --prefer-lowest
- stage: Test
php: 7.4
env: DB=mariadb.mysqli.docker MARIADB_VERSION=10.1 COVERAGE=yes
services:
- docker
before_script:
- bash ./tests/travis/install-mariadb.sh
env: DB=mysql.docker IMAGE=mysql:8.0
- stage: Test
php: 7.4
env: DB=mariadb.mysqli MARIADB_VERSION=10.2 COVERAGE=yes
addons:
mariadb: 10.2
env: DB=mysqli.docker IMAGE=mysql:8.0
- stage: Test
php: 7.4
env: DB=mariadb.mysqli MARIADB_VERSION=10.3 COVERAGE=yes
addons:
mariadb: 10.3
env: DB=mariadb.docker IMAGE=mariadb:10.3
- stage: Test
php: 7.4
env: DB=pgsql POSTGRESQL_VERSION=9.4 COVERAGE=yes
addons:
postgresql: "9.4"
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.3
- stage: Test
php: 7.4
env: DB=pgsql POSTGRESQL_VERSION=9.5 COVERAGE=yes
addons:
postgresql: "9.5"
- stage: Test
php: 7.4
env: DB=pgsql POSTGRESQL_VERSION=9.6 COVERAGE=yes
addons:
postgresql: "9.6"
- stage: Test
php: 7.4
env: DB=pgsql POSTGRESQL_VERSION=10.0 COVERAGE=yes
env: DB=pgsql POSTGRESQL_VERSION=11.0
sudo: required
addons:
postgresql: "10"
before_script:
- bash ./tests/travis/install-postgres-10.sh
- bash ./tests/travis/install-postgres-11.sh
- stage: Test
php: 7.4
env: DB=pgsql POSTGRESQL_VERSION=11.0 COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-postgres-11.sh
env: DB=sqlite
- stage: Test
php: 7.4
env: DB=sqlsrv COVERAGE=yes
env: DB=sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
- stage: Test
php: 7.4
env: DB=pdo_sqlsrv COVERAGE=yes
env: DB=pdo_sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-pdo_sqlsrv.sh
- bash ./tests/travis/install-mssql.sh
- stage: Test
php: 7.4
env: DB=ibm_db2 COVERAGE=yes
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-db2.sh
- bash ./tests/travis/install-db2-ibm_db2.sh
- stage: Test
php: nightly
env: DB=mysql.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
env: DB=mysql.docker IMAGE=mysql:8.0
- stage: Test
php: nightly
env: DB=mysqli.docker MYSQL_VERSION=8.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-mysql-8.0.sh
env: DB=mysqli.docker IMAGE=mysql:8.0
- stage: Test
php: nightly
env: DB=mariadb MARIADB_VERSION=10.3
addons:
mariadb: 10.3
env: DB=mariadb.docker IMAGE=mariadb:10.3
- stage: Test
php: nightly
env: DB=mariadb.mysqli MARIADB_VERSION=10.3
addons:
mariadb: 10.3
env: DB=mariadb.mysqli.docker IMAGE=mariadb:10.3
- stage: Test
php: nightly
env: DB=pgsql POSTGRESQL_VERSION=11.0
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-postgres-11.sh
- stage: Test
......@@ -347,8 +215,6 @@ jobs:
php: nightly
env: DB=sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-sqlsrv.sh
......@@ -357,8 +223,6 @@ jobs:
php: nightly
env: DB=pdo_sqlsrv
sudo: required
services:
- docker
before_script:
- bash ./tests/travis/install-sqlsrv-dependencies.sh
- bash ./tests/travis/install-mssql-pdo_sqlsrv.sh
......@@ -366,7 +230,7 @@ jobs:
- stage: Test
if: type = cron
php: 7.2
php: 7.3
env: DB=sqlite DEPENDENCIES=dev
install:
- composer config minimum-stability dev
......
......@@ -30,14 +30,6 @@ The statement implementations no longer detect whether `$params` is a zero- or o
The `ServerInfoAwareConnection::requiresQueryForServerVersion()` method has been removed as an implementation detail which is the same for almost all supported drivers.
## BC BREAK: PingableConnection and ServerInfoAwareConnection interfaces now extends Connection
All implementations of the `PingableConnection` and `ServerInfoAwareConnection` interfaces have to implement the methods defined in the `Connection` interface as well.
## BC BREAK: VersionAwarePlatformDriver interface now extends Driver
All implementations of the `VersionAwarePlatformDriver` interface have to implement the methods defined in the `Driver` interface as well.
## BC BREAK: Removed support for PostgreSQL 9.3 and older
DBAL now requires PostgeSQL 9.4 or newer, support for unmaintained versions has been dropped.
......@@ -355,6 +347,14 @@ The Drizzle project is abandoned and is therefore not supported by Doctrine DBAL
# Upgrade to 3.0
## BC BREAK: PingableConnection and ServerInfoAwareConnection interfaces now extend Connection
All implementations of the `PingableConnection` and `ServerInfoAwareConnection` interfaces have to implement the methods defined in the `Connection` interface as well.
## BC BREAK: VersionAwarePlatformDriver interface now extends Driver
All implementations of the `VersionAwarePlatformDriver` interface have to implement the methods defined in the `Driver` interface as well.
## BC BREAK: Removed Doctrine\DBAL\Version
The `Doctrine\DBAL\Version` class is no longer available: please refrain from checking the DBAL version at runtime.
......
......@@ -32,7 +32,7 @@
{"name": "Jonathan Wage", "email": "jonwage@gmail.com"}
],
"require": {
"php": "^7.2",
"php": "^7.3",
"doctrine/cache": "^1.0",
"doctrine/event-manager": "^1.0",
"ocramius/package-versions": "^1.4"
......@@ -42,7 +42,7 @@
"jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.11.6",
"phpstan/phpstan-phpunit": "^0.11",
"phpunit/phpunit": "^8.4.1",
"phpunit/phpunit": "^9.0",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0"
},
"suggest": {
......@@ -51,7 +51,7 @@
"bin": ["bin/doctrine-dbal"],
"config": {
"platform": {
"php": "7.2.0"
"php": "7.3.0"
},
"sort-packages": true
},
......
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "1d91a8d87cf22c7dbee3c58f8777ecf5",
"content-hash": "ea6ec5389b21f5bda19d375bad21d81f",
"packages": [
{
"name": "doctrine/cache",
......@@ -379,16 +379,16 @@
},
{
"name": "doctrine/instantiator",
"version": "1.2.0",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "a2c590166b2133a4633738648b6b064edae0814a"
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a",
"reference": "a2c590166b2133a4633738648b6b064edae0814a",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
"shasum": ""
},
"require": {
......@@ -431,7 +431,7 @@
"constructor",
"instantiate"
],
"time": "2019-03-17T17:37:11+00:00"
"time": "2019-10-21T16:45:58+00:00"
},
{
"name": "jean85/pretty-package-versions",
......@@ -525,16 +525,16 @@
},
{
"name": "myclabs/deep-copy",
"version": "1.9.3",
"version": "1.9.5",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
"reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
"shasum": ""
},
"require": {
......@@ -569,7 +569,7 @@
"object",
"object graph"
],
"time": "2019-08-09T12:45:53+00:00"
"time": "2020-01-17T21:11:47+00:00"
},
{
"name": "nette/bootstrap",
......@@ -1301,40 +1301,38 @@
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "4.3.2",
"version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e"
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
"reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
"shasum": ""
},
"require": {
"php": "^7.0",
"phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
"phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
"webmozart/assert": "^1.0"
"ext-filter": "^7.1",
"php": "^7.2",
"phpdocumentor/reflection-common": "^2.0",
"phpdocumentor/type-resolver": "^1.0",
"webmozart/assert": "^1"
},
"require-dev": {
"doctrine/instantiator": "^1.0.5",
"mockery/mockery": "^1.0",
"phpunit/phpunit": "^6.4"
"doctrine/instantiator": "^1",
"mockery/mockery": "^1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.x-dev"
"dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": [
"src/"
]
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
......@@ -1345,33 +1343,36 @@
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
},
{
"name": "Jaap van Otterdijk",
"email": "account@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2019-09-12T14:27:41+00:00"
"time": "2020-02-22T12:28:44+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.0.1",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
"shasum": ""
},
"require": {
"php": "^7.1",
"php": "^7.2",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "^7.1",
"mockery/mockery": "~1",
"phpunit/phpunit": "^7.0"
"ext-tokenizer": "^7.2",
"mockery/mockery": "~1"
},
"type": "library",
"extra": {
......@@ -1395,37 +1396,37 @@
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"time": "2019-08-22T18:11:29+00:00"
"time": "2020-02-18T18:59:58+00:00"
},
{
"name": "phpspec/prophecy",
"version": "1.9.0",
"version": "v1.10.3",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
"reference": "451c3cd1418cf640de218914901e51b064abb093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
"reference": "451c3cd1418cf640de218914901e51b064abb093",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
"sebastian/comparator": "^1.1|^2.0|^3.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
},
"require-dev": {
"phpspec/phpspec": "^2.5|^3.2",
"phpspec/phpspec": "^2.5 || ^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8.x-dev"
"dev-master": "1.10.x-dev"
}
},
"autoload": {
......@@ -1458,7 +1459,7 @@
"spy",
"stub"
],
"time": "2019-10-03T11:07:50+00:00"
"time": "2020-03-05T15:02:03+00:00"
},
{
"name": "phpstan/phpdoc-parser",
......@@ -1641,40 +1642,41 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "7.0.8",
"version": "8.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "aa0d179a13284c7420fc281fc32750e6cc7c9e2f"
"reference": "31e94ccc084025d6abee0585df533eb3a792b96a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa0d179a13284c7420fc281fc32750e6cc7c9e2f",
"reference": "aa0d179a13284c7420fc281fc32750e6cc7c9e2f",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/31e94ccc084025d6abee0585df533eb3a792b96a",
"reference": "31e94ccc084025d6abee0585df533eb3a792b96a",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-xmlwriter": "*",
"php": "^7.2",
"phpunit/php-file-iterator": "^2.0.2",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-token-stream": "^3.1.1",
"sebastian/code-unit-reverse-lookup": "^1.0.1",
"sebastian/environment": "^4.2.2",
"sebastian/version": "^2.0.1",
"php": "^7.3",
"phpunit/php-file-iterator": "^3.0",
"phpunit/php-text-template": "^2.0",
"phpunit/php-token-stream": "^4.0",
"sebastian/code-unit-reverse-lookup": "^2.0",
"sebastian/environment": "^5.0",
"sebastian/version": "^3.0",
"theseer/tokenizer": "^1.1.3"
},
"require-dev": {
"phpunit/phpunit": "^8.2.2"
"phpunit/phpunit": "^9.0"
},
"suggest": {
"ext-xdebug": "^2.7.2"
"ext-pcov": "*",
"ext-xdebug": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "7.0-dev"
"dev-master": "8.0-dev"
}
},
"autoload": {
......@@ -1700,32 +1702,32 @@
"testing",
"xunit"
],
"time": "2019-09-17T06:24:36+00:00"
"time": "2020-02-19T13:41:19+00:00"
},
{
"name": "phpunit/php-file-iterator",
"version": "2.0.2",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "050bedf145a257b1ff02746c31894800e5122946"
"reference": "354d4a5faa7449a377a18b94a2026ca3415e3d7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
"reference": "050bedf145a257b1ff02746c31894800e5122946",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/354d4a5faa7449a377a18b94a2026ca3415e3d7a",
"reference": "354d4a5faa7449a377a18b94a2026ca3415e3d7a",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^7.1"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
"dev-master": "3.0-dev"
}
},
"autoload": {
......@@ -1750,26 +1752,84 @@
"filesystem",
"iterator"
],
"time": "2018-09-13T20:33:42+00:00"
"time": "2020-02-07T06:05:22+00:00"
},
{
"name": "phpunit/php-invoker",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
"reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a",
"reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a",
"shasum": ""
},
"require": {
"php": "^7.3"
},
"require-dev": {
"ext-pcntl": "*",
"phpunit/phpunit": "^9.0"
},
"suggest": {
"ext-pcntl": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Invoke callables with a timeout",
"homepage": "https://github.com/sebastianbergmann/php-invoker/",
"keywords": [
"process"
],
"time": "2020-02-07T06:06:11+00:00"
},
{
"name": "phpunit/php-text-template",
"version": "1.2.1",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
"reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
"reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": "^7.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
......@@ -1791,32 +1851,32 @@
"keywords": [
"template"
],
"time": "2015-06-21T13:50:34+00:00"
"time": "2020-02-01T07:43:44+00:00"
},
{
"name": "phpunit/php-timer",
"version": "2.1.2",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
"reference": "4118013a4d0f97356eae8e7fb2f6c6472575d1df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
"reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/4118013a4d0f97356eae8e7fb2f6c6472575d1df",
"reference": "4118013a4d0f97356eae8e7fb2f6c6472575d1df",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^7.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.1-dev"
"dev-master": "3.0-dev"
}
},
"autoload": {
......@@ -1840,33 +1900,33 @@
"keywords": [
"timer"
],
"time": "2019-06-07T04:22:29+00:00"
"time": "2020-02-07T06:08:11+00:00"
},
{
"name": "phpunit/php-token-stream",
"version": "3.1.1",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
"reference": "b2560a0c33f7710e4d7f8780964193e8e8f8effe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
"reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/b2560a0c33f7710e4d7f8780964193e8e8f8effe",
"reference": "b2560a0c33f7710e4d7f8780964193e8e8f8effe",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^7.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -1889,20 +1949,20 @@
"keywords": [
"tokenizer"
],
"time": "2019-09-17T06:23:10+00:00"
"time": "2020-02-07T06:19:00+00:00"
},
{
"name": "phpunit/phpunit",
"version": "8.4.1",
"version": "9.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869"
"reference": "68d7e5b17a6b9461e17c00446caa409863154f76"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/68d7e5b17a6b9461e17c00446caa409863154f76",
"reference": "68d7e5b17a6b9461e17c00446caa409863154f76",
"shasum": ""
},
"require": {
......@@ -1916,29 +1976,29 @@
"myclabs/deep-copy": "^1.9.1",
"phar-io/manifest": "^1.0.3",
"phar-io/version": "^2.0.1",
"php": "^7.2",
"php": "^7.3",
"phpspec/prophecy": "^1.8.1",
"phpunit/php-code-coverage": "^7.0.7",
"phpunit/php-file-iterator": "^2.0.2",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^2.1.2",
"sebastian/comparator": "^3.0.2",
"sebastian/diff": "^3.0.2",
"sebastian/environment": "^4.2.2",
"sebastian/exporter": "^3.1.1",
"sebastian/global-state": "^3.0.0",
"sebastian/object-enumerator": "^3.0.3",
"sebastian/resource-operations": "^2.0.1",
"sebastian/type": "^1.1.3",
"sebastian/version": "^2.0.1"
"phpunit/php-code-coverage": "^8.0",
"phpunit/php-file-iterator": "^3.0",
"phpunit/php-invoker": "^3.0",
"phpunit/php-text-template": "^2.0",
"phpunit/php-timer": "^3.0",
"sebastian/comparator": "^4.0",
"sebastian/diff": "^4.0",
"sebastian/environment": "^5.0",
"sebastian/exporter": "^4.0",
"sebastian/global-state": "^4.0",
"sebastian/object-enumerator": "^4.0",
"sebastian/resource-operations": "^3.0",
"sebastian/type": "^2.0",
"sebastian/version": "^3.0"
},
"require-dev": {
"ext-pdo": "*"
},
"suggest": {
"ext-soap": "*",
"ext-xdebug": "*",
"phpunit/php-invoker": "^2.0.0"
"ext-xdebug": "*"
},
"bin": [
"phpunit"
......@@ -1946,12 +2006,15 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "8.4-dev"
"dev-master": "9.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
],
"files": [
"src/Framework/Assert/Functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
......@@ -1972,7 +2035,7 @@
"testing",
"xunit"
],
"time": "2019-10-07T12:57:41+00:00"
"time": "2020-02-13T07:30:12+00:00"
},
{
"name": "psr/log",
......@@ -2023,28 +2086,28 @@
},
{
"name": "sebastian/code-unit-reverse-lookup",
"version": "1.0.1",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
"reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e",
"reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^5.7 || ^6.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "2.0-dev"
}
},
"autoload": {
......@@ -2064,34 +2127,34 @@
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"time": "2017-03-04T06:30:41+00:00"
"time": "2020-02-07T06:20:13+00:00"
},
{
"name": "sebastian/comparator",
"version": "3.0.2",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
"reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
"reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8",
"reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8",
"shasum": ""
},
"require": {
"php": "^7.1",
"sebastian/diff": "^3.0",
"sebastian/exporter": "^3.1"
"php": "^7.3",
"sebastian/diff": "^4.0",
"sebastian/exporter": "^4.0"
},
"require-dev": {
"phpunit/phpunit": "^7.1"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2104,6 +2167,10 @@
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
......@@ -2115,10 +2182,6 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
......@@ -2128,33 +2191,33 @@
"compare",
"equality"
],
"time": "2018-07-12T15:12:46+00:00"
"time": "2020-02-07T06:08:51+00:00"
},
{
"name": "sebastian/diff",
"version": "3.0.2",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
"reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
"reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c0c26c9188b538bfa985ae10c9f05d278f12060d",
"reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^7.5 || ^8.0",
"symfony/process": "^2 || ^3.3 || ^4"
"phpunit/phpunit": "^9.0",
"symfony/process": "^4 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2167,13 +2230,13 @@
"BSD-3-Clause"
],
"authors": [
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
}
],
"description": "Diff implementation",
......@@ -2184,27 +2247,27 @@
"unidiff",
"unified diff"
],
"time": "2019-02-04T06:01:07+00:00"
"time": "2020-02-07T06:09:38+00:00"
},
{
"name": "sebastian/environment",
"version": "4.2.2",
"version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404"
"reference": "9bffdefa7810031a165ddd6275da6a2c1f6f2dfb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
"reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9bffdefa7810031a165ddd6275da6a2c1f6f2dfb",
"reference": "9bffdefa7810031a165ddd6275da6a2c1f6f2dfb",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^7.5"
"phpunit/phpunit": "^9.0"
},
"suggest": {
"ext-posix": "*"
......@@ -2212,7 +2275,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
"dev-master": "5.0-dev"
}
},
"autoload": {
......@@ -2237,34 +2300,34 @@
"environment",
"hhvm"
],
"time": "2019-05-05T09:05:15+00:00"
"time": "2020-02-19T13:40:20+00:00"
},
{
"name": "sebastian/exporter",
"version": "3.1.2",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
"reference": "80c26562e964016538f832f305b2286e1ec29566"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
"reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566",
"reference": "80c26562e964016538f832f305b2286e1ec29566",
"shasum": ""
},
"require": {
"php": "^7.0",
"sebastian/recursion-context": "^3.0"
"php": "^7.3",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "^6.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1.x-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2304,30 +2367,30 @@
"export",
"exporter"
],
"time": "2019-09-14T09:02:43+00:00"
"time": "2020-02-07T06:10:52+00:00"
},
{
"name": "sebastian/global-state",
"version": "3.0.0",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
"reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
"reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
"reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
"shasum": ""
},
"require": {
"php": "^7.2",
"sebastian/object-reflector": "^1.1.1",
"sebastian/recursion-context": "^3.0"
"php": "^7.3",
"sebastian/object-reflector": "^2.0",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-dom": "*",
"phpunit/phpunit": "^8.0"
"phpunit/phpunit": "^9.0"
},
"suggest": {
"ext-uopz": "*"
......@@ -2335,7 +2398,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2358,34 +2421,34 @@
"keywords": [
"global state"
],
"time": "2019-02-01T05:30:01+00:00"
"time": "2020-02-07T06:11:37+00:00"
},
{
"name": "sebastian/object-enumerator",
"version": "3.0.3",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
"reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
"reference": "e67516b175550abad905dc952f43285957ef4363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
"reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363",
"reference": "e67516b175550abad905dc952f43285957ef4363",
"shasum": ""
},
"require": {
"php": "^7.0",
"sebastian/object-reflector": "^1.1.1",
"sebastian/recursion-context": "^3.0"
"php": "^7.3",
"sebastian/object-reflector": "^2.0",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2405,32 +2468,32 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"time": "2017-08-03T12:35:26+00:00"
"time": "2020-02-07T06:12:23+00:00"
},
{
"name": "sebastian/object-reflector",
"version": "1.1.1",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
"reference": "773f97c67f28de00d397be301821b06708fca0be"
"reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
"reference": "773f97c67f28de00d397be301821b06708fca0be",
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
"reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
"shasum": ""
},
"require": {
"php": "^7.0"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
"dev-master": "2.0-dev"
}
},
"autoload": {
......@@ -2450,32 +2513,32 @@
],
"description": "Allows reflection of object attributes, including inherited and non-public ones",
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"time": "2017-03-29T09:07:27+00:00"
"time": "2020-02-07T06:19:40+00:00"
},
{
"name": "sebastian/recursion-context",
"version": "3.0.0",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
"reference": "cdd86616411fc3062368b720b0425de10bd3d579"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
"reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579",
"reference": "cdd86616411fc3062368b720b0425de10bd3d579",
"shasum": ""
},
"require": {
"php": "^7.0"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
......@@ -2488,14 +2551,14 @@
"BSD-3-Clause"
],
"authors": [
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
......@@ -2503,29 +2566,32 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"time": "2017-03-03T06:23:57+00:00"
"time": "2020-02-07T06:18:20+00:00"
},
{
"name": "sebastian/resource-operations",
"version": "2.0.1",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
"reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
"reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
"reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
"reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
"dev-master": "3.0-dev"
}
},
"autoload": {
......@@ -2545,32 +2611,32 @@
],
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"time": "2018-10-04T04:07:39+00:00"
"time": "2020-02-07T06:13:02+00:00"
},
{
"name": "sebastian/type",
"version": "1.1.3",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
"reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
"reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
"reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/9e8f42f740afdea51f5f4e8cec2035580e797ee1",
"reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1",
"shasum": ""
},
"require": {
"php": "^7.2"
"php": "^7.3"
},
"require-dev": {
"phpunit/phpunit": "^8.2"
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
"dev-master": "2.0-dev"
}
},
"autoload": {
......@@ -2585,35 +2651,35 @@
"authors": [
{
"name": "Sebastian Bergmann",
"role": "lead",
"email": "sebastian@phpunit.de"
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type",
"time": "2019-07-02T08:10:15+00:00"
"time": "2020-02-07T06:13:43+00:00"
},
{
"name": "sebastian/version",
"version": "2.0.1",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
"reference": "0411bde656dce64202b39c2f4473993a9081d39e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e",
"reference": "0411bde656dce64202b39c2f4473993a9081d39e",
"shasum": ""
},
"require": {
"php": ">=5.6"
"php": "^7.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
"dev-master": "3.0-dev"
}
},
"autoload": {
......@@ -2634,7 +2700,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
"time": "2016-10-03T07:35:21+00:00"
"time": "2020-01-21T06:36:37+00:00"
},
{
"name": "slevomat/coding-standard",
......@@ -2975,16 +3041,16 @@
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.12.0",
"version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4"
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
"shasum": ""
},
"require": {
......@@ -2996,7 +3062,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-master": "1.14-dev"
}
},
"autoload": {
......@@ -3029,7 +3095,7 @@
"polyfill",
"portable"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/polyfill-mbstring",
......@@ -3132,31 +3198,29 @@
},
{
"name": "webmozart/assert",
"version": "1.5.0",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
"reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
"reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
"url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"vimeo/psalm": "<3.6.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
}
},
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
......@@ -3178,7 +3242,7 @@
"check",
"validate"
],
"time": "2019-08-24T08:43:50+00:00"
"time": "2020-02-14T12:15:55+00:00"
}
],
"aliases": [],
......@@ -3187,10 +3251,10 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^7.2"
"php": "^7.3"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.2.0"
"php": "7.3.0"
}
}
......@@ -91,18 +91,7 @@ final class DriverManager
*
* $params must contain at least one of the following.
*
* Either 'driver' with one of the following values:
*
* pdo_mysql
* pdo_sqlite
* pdo_pgsql
* pdo_oci (unstable)
* pdo_sqlsrv
* mysqli
* sqlanywhere
* sqlsrv
* ibm_db2 (unstable)
*
* Either 'driver' with one of the array keys of {@link $_driverMap},
* OR 'driverClass' that contains the full class name (with namespace) of the
* driver class to instantiate.
*
......
......@@ -14,7 +14,7 @@ final class DebugStack implements SQLLogger
/**
* Executed SQL queries.
*
* @var mixed[][]
* @var array<int, array<string, mixed>>
*/
public $queries = [];
......
......@@ -281,7 +281,7 @@ SQL
[$schema, $table] = explode('.', $table);
$schema = $this->quoteStringLiteral($schema);
} else {
$schema = "ANY(string_to_array((select replace(replace(setting,'\"\$user\"',user),' ','') from pg_catalog.pg_settings where name = 'search_path'),','))";
$schema = 'ANY(current_schemas(false))';
}
$table = new Identifier($table);
......
......@@ -5,7 +5,7 @@ declare(strict_types=1);
namespace Doctrine\DBAL\Query;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\Statement;
use Doctrine\DBAL\Driver\ResultStatement;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Query\Exception\NonUniqueAlias;
use Doctrine\DBAL\Query\Exception\UnknownAlias;
......@@ -247,7 +247,7 @@ class QueryBuilder
* Uses {@see Connection::executeQuery} for select statements and {@see Connection::executeUpdate}
* for insert, update and delete statements.
*
* @return Statement|int
* @return ResultStatement|int
*/
public function execute()
{
......@@ -1326,9 +1326,12 @@ class QueryBuilder
throw NonUniqueAlias::new($join->alias, array_keys($knownAliases));
}
$sql .= ' ' . $join->type
. ' JOIN ' . $join->table . ' ' . $join->alias
. ' ON ' . ((string) $join->condition);
$sql .= ' ' . $join->type . ' JOIN ' . $join->table . ' ' . $join->alias;
if ($join->condition !== null) {
$sql .= ' ON ' . $join->condition;
}
$knownAliases[$join->alias] = true;
}
......
......@@ -7,7 +7,9 @@ namespace Doctrine\DBAL;
use Doctrine\DBAL\Exception\MissingArrayParameter;
use Doctrine\DBAL\Exception\MissingArrayParameterType;
use function array_fill;
use function array_fill_keys;
use function array_key_exists;
use function array_keys;
use function array_merge;
use function array_slice;
use function array_values;
......@@ -113,6 +115,10 @@ class SQLParserUtils
$bindIndex = -1;
if ($isPositional) {
// make sure that $types has the same keys as $params
// to allow omitting parameters with unspecified types
$types += array_fill_keys(array_keys($params), null);
ksort($params);
ksort($types);
}
......
......@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Doctrine\DBAL\Types\Exception;
use Doctrine\DBAL\Types\ConversionException;
use Throwable;
use function get_class;
use function gettype;
use function implode;
......@@ -24,29 +25,27 @@ final class InvalidType extends ConversionException implements TypesException
* @todo split into two methods
* @todo sanitize value
*/
public static function new($value, string $toType, array $possibleTypes) : self
public static function new($value, string $toType, array $possibleTypes, ?Throwable $previous = null) : self
{
$actualType = is_object($value) ? get_class($value) : gettype($value);
if (is_scalar($value)) {
return new self(
sprintf(
'Could not convert PHP value "%s" of type "%s" to type "%s". Expected one of the following types: %s.',
$value,
$actualType,
$toType,
implode(', ', $possibleTypes)
)
$message = sprintf(
'Could not convert PHP value "%s" of type "%s" to type "%s". Expected one of the following types: %s.',
$value,
$actualType,
$toType,
implode(', ', $possibleTypes)
);
}
return new self(
sprintf(
} else {
$message = sprintf(
'Could not convert PHP value of type "%s" to type "%s". Expected one of the following types: %s.',
$actualType,
$toType,
implode(', ', $possibleTypes)
)
);
);
}
return new self($message, 0, $previous);
}
}
......@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Doctrine\DBAL\Types\Exception;
use Doctrine\DBAL\Types\ConversionException;
use Throwable;
use function get_class;
use function gettype;
use function is_object;
......@@ -15,7 +16,7 @@ final class SerializationFailed extends ConversionException implements TypesExce
/**
* @param mixed $value
*/
public static function new($value, string $format, string $error) : self
public static function new($value, string $format, string $error, ?Throwable $previous = null) : self
{
$actualType = is_object($value) ? get_class($value) : gettype($value);
......@@ -25,7 +26,9 @@ final class SerializationFailed extends ConversionException implements TypesExce
$actualType,
$format,
$error
)
),
0,
$previous
);
}
}
......@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Doctrine\DBAL\Types\Exception;
use Doctrine\DBAL\Types\ConversionException;
use Throwable;
use function is_string;
use function sprintf;
use function strlen;
......@@ -18,24 +19,22 @@ final class ValueNotConvertible extends ConversionException implements TypesExce
/**
* @param mixed $value
*/
public static function new($value, string $toType, ?string $message = null) : self
public static function new($value, string $toType, ?string $message = null, ?Throwable $previous = null) : self
{
if ($message !== null) {
return new self(
sprintf(
'Could not convert database value to "%s" as an error was triggered by the unserialization: %s',
$toType,
$message
)
$message = sprintf(
'Could not convert database value to "%s" as an error was triggered by the unserialization: %s',
$toType,
$message
);
}
return new self(
sprintf(
} else {
$message = sprintf(
'Could not convert database value "%s" to Doctrine Type "%s".',
is_string($value) && strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value,
$toType
)
);
);
}
return new self($message, 0, $previous);
}
}
......@@ -10,9 +10,6 @@ parameters:
# extension not available
- '~^(Used )?(Function|Constant) sasql_\S+ not found\.\z~i'
# changing these would be a BC break, to be done in next major
- '~^Method Doctrine\\DBAL\\Query\\QueryBuilder::execute\(\) should return Doctrine\\DBAL\\Driver\\Statement\|int but returns Doctrine\\DBAL\\Driver\\ResultStatement\.\z~'
# https://bugs.php.net/bug.php?id=78126
- '~^Call to an undefined method PDO::sqliteCreateFunction\(\)\.\z~'
......
......@@ -7,7 +7,6 @@ namespace Doctrine\Tests\DBAL\Functional\Driver\IBMDB2;
use Doctrine\DBAL\Driver\IBMDB2\DB2Driver;
use Doctrine\DBAL\Statement;
use Doctrine\Tests\DbalFunctionalTestCase;
use PHPUnit\Framework\Error\Notice;
use function assert;
use function extension_loaded;
......@@ -36,7 +35,7 @@ class DB2StatementTest extends DbalFunctionalTestCase
// unwrap the statement to prevent the wrapper from handling the PHPUnit-originated exception
$wrappedStmt = $stmt->getWrappedStatement();
$this->expectException(Notice::class);
$this->expectNotice();
$wrappedStmt->execute([[]]);
}
}
......@@ -142,7 +142,11 @@ class PortabilityTest extends DbalFunctionalTestCase
*/
public function assertFetchResultRow(array $row) : void
{
self::assertContains($row['test_int'], [1, 2], 'Primary key test_int should either be 1 or 2.');
self::assertThat($row['test_int'], self::logicalOr(
self::equalTo(1),
self::equalTo(2)
));
self::assertArrayHasKey('test_string', $row, 'Case should be lowered.');
self::assertEquals(3, strlen($row['test_string']), 'test_string should be rtrimed to length of three for CHAR(32) column.');
self::assertNull($row['test_null']);
......
......@@ -354,6 +354,18 @@ class PostgreSqlSchemaManagerTest extends SchemaManagerFunctionalTestCase
self::assertNull($comparator->diffTable($offlineTable, $onlineTable));
}
public function testListTableDetailsWhenCurrentSchemaNameQuoted() : void
{
$this->connection->exec('CREATE SCHEMA "001_test"');
$this->connection->exec('SET search_path TO "001_test"');
try {
$this->testListQuotedTable();
} finally {
$this->connection->close();
}
}
public function testListTablesExcludesViews() : void
{
$this->createTestTable('list_tables_excludes_views');
......
......@@ -94,11 +94,22 @@ class QueryBuilderTest extends DbalTestCase
$qb->select('u.*', 'p.*')
->from('users', 'u')
->Join('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id'));
->join('u', 'phones', 'p', $expr->eq('p.user_id', 'u.id'));
self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p ON p.user_id = u.id', (string) $qb);
}
public function testSelectWithJoinNoCondition() : void
{
$qb = new QueryBuilder($this->conn);
$qb->select('u.*', 'p.*')
->from('users', 'u')
->join('u', 'phones', 'p');
self::assertEquals('SELECT u.*, p.* FROM users u INNER JOIN phones p', (string) $qb);
}
public function testSelectWithInnerJoin() : void
{
$qb = new QueryBuilder($this->conn);
......
......@@ -102,7 +102,7 @@ SQLDATA
['SELECT data.age AS age, data.id AS id, data.name AS name, data.id AS id FROM test_data data WHERE (data.description LIKE :condition_0 ESCAPE "\\\\") AND (data.description LIKE :condition_1 ESCAPE \'\\\\\') ORDER BY id ASC', [121 => 'condition_0', 174 => 'condition_1']],
['SELECT data.age AS age, data.id AS id, data.name AS name, data.id AS id FROM test_data data WHERE (data.description LIKE :condition_0 ESCAPE `\\\\`) AND (data.description LIKE :condition_1 ESCAPE `\\\\`) ORDER BY id ASC', [121 => 'condition_0', 174 => 'condition_1']],
['SELECT data.age AS age, data.id AS id, data.name AS name, data.id AS id FROM test_data data WHERE (data.description LIKE :condition_0 ESCAPE \'\\\\\') AND (data.description LIKE :condition_1 ESCAPE `\\\\`) ORDER BY id ASC', [121 => 'condition_0', 174 => 'condition_1']],
["SELECT * FROM Foo WHERE (foo.bar LIKE :condition_0 ESCAPE '\') AND (foo.baz = :condition_1) AND (foo.bak LIKE :condition_2 ESCAPE '\')", [38 => 'condition_0', 78 => 'condition_1', 110 => 'condition_2']], // Ticket GH-3640
["SELECT * FROM Foo WHERE (foo.bar LIKE :condition_0 ESCAPE '\') AND (foo.baz = :condition_1) AND (foo.bak LIKE :condition_2 ESCAPE '\')", [38 => 'condition_0', 78 => 'condition_1', 110 => 'condition_2']],
];
}
......@@ -138,8 +138,7 @@ SQLDATA
public static function dataExpandListParameters() : iterable
{
return [
// Positional: Very simple with one needle
[
'Positional: Very simple with one needle' => [
'SELECT * FROM Foo WHERE foo IN (?)',
[[1, 2, 3]],
[Connection::PARAM_INT_ARRAY],
......@@ -147,8 +146,7 @@ SQLDATA
[1, 2, 3],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
],
// Positional: One non-list before d one after list-needle
[
'Positional: One non-list before d one after list-needle' => [
'SELECT * FROM Foo WHERE foo = ? AND bar IN (?)',
['string', [1, 2, 3]],
[ParameterType::STRING, Connection::PARAM_INT_ARRAY],
......@@ -156,8 +154,7 @@ SQLDATA
['string', 1, 2, 3],
[ParameterType::STRING, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
],
// Positional: One non-list after list-needle
[
'Positional: One non-list after list-needle' => [
'SELECT * FROM Foo WHERE bar IN (?) AND baz = ?',
[[1, 2, 3], 'foo'],
[Connection::PARAM_INT_ARRAY, ParameterType::STRING],
......@@ -165,8 +162,7 @@ SQLDATA
[1, 2, 3, 'foo'],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::STRING],
],
// Positional: One non-list before and one after list-needle
[
'Positional: One non-list before and one after list-needle' => [
'SELECT * FROM Foo WHERE foo = ? AND bar IN (?) AND baz = ?',
[1, [1, 2, 3], 4],
[ParameterType::INTEGER, Connection::PARAM_INT_ARRAY, ParameterType::INTEGER],
......@@ -180,8 +176,7 @@ SQLDATA
ParameterType::INTEGER,
],
],
// Positional: Two lists
[
'Positional: Two lists' => [
'SELECT * FROM Foo WHERE foo IN (?, ?)',
[[1, 2, 3], [4, 5]],
[Connection::PARAM_INT_ARRAY, Connection::PARAM_INT_ARRAY],
......@@ -195,8 +190,7 @@ SQLDATA
ParameterType::INTEGER,
],
],
// Positional: Empty "integer" array DDC-1978
[
'Positional: Empty "integer" array (DDC-1978)' => [
'SELECT * FROM Foo WHERE foo IN (?)',
[[]],
[Connection::PARAM_INT_ARRAY],
......@@ -204,8 +198,7 @@ SQLDATA
[],
[],
],
// Positional: Empty "str" array DDC-1978
[
'Positional: Empty "str" array (DDC-1978)' => [
'SELECT * FROM Foo WHERE foo IN (?)',
[[]],
[Connection::PARAM_STR_ARRAY],
......@@ -213,17 +206,15 @@ SQLDATA
[],
[],
],
// Positional: explicit keys for params and types
[
'Positional: explicit keys for params and types' => [
'SELECT * FROM Foo WHERE foo = ? AND bar = ? AND baz = ?',
[1 => 'bar', 2 => 'baz', 0 => 1],
[2 => ParameterType::STRING, 1 => ParameterType::STRING],
'SELECT * FROM Foo WHERE foo = ? AND bar = ? AND baz = ?',
[1 => 'bar', 0 => 1, 2 => 'baz'],
[1 => ParameterType::STRING, 2 => ParameterType::STRING],
[1 => ParameterType::STRING, 2 => ParameterType::STRING, 0 => null],
],
// Positional: explicit keys for array params and array types
[
'Positional: explicit keys for array params and array types' => [
'SELECT * FROM Foo WHERE foo IN (?) AND bar IN (?) AND baz = ?',
[1 => ['bar1', 'bar2'], 2 => true, 0 => [1, 2, 3]],
[2 => ParameterType::BOOLEAN, 1 => Connection::PARAM_STR_ARRAY, 0 => Connection::PARAM_INT_ARRAY],
......@@ -238,8 +229,7 @@ SQLDATA
ParameterType::BOOLEAN,
],
],
// Positional starts from 1: One non-list before and one after list-needle
[
'Positional starts from 1: One non-list before and one after list-needle' => [
'SELECT * FROM Foo WHERE foo = ? AND bar IN (?) AND baz = ? AND foo IN (?)',
[1 => 1, 2 => [1, 2, 3], 3 => 4, 4 => [5, 6]],
[
......@@ -260,8 +250,7 @@ SQLDATA
ParameterType::INTEGER,
],
],
// Named parameters : Very simple with param int
[
'Named: Very simple with param int' => [
'SELECT * FROM Foo WHERE foo = :foo',
['foo' => 1],
['foo' => ParameterType::INTEGER],
......@@ -269,9 +258,7 @@ SQLDATA
[1],
[ParameterType::INTEGER],
],
// Named parameters : Very simple with param int and string
[
'Named: Very simple with param int and string' => [
'SELECT * FROM Foo WHERE foo = :foo AND bar = :bar',
['bar' => 'Some String','foo' => 1],
['foo' => ParameterType::INTEGER, 'bar' => ParameterType::STRING],
......@@ -279,8 +266,7 @@ SQLDATA
[1,'Some String'],
[ParameterType::INTEGER, ParameterType::STRING],
],
// Named parameters : Very simple with one needle
[
'Named: Very simple with one needle' => [
'SELECT * FROM Foo WHERE foo IN (:foo)',
['foo' => [1, 2, 3]],
['foo' => Connection::PARAM_INT_ARRAY],
......@@ -288,8 +274,7 @@ SQLDATA
[1, 2, 3],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
],
// Named parameters: One non-list before d one after list-needle
[
'Named: One non-list before d one after list-needle' => [
'SELECT * FROM Foo WHERE foo = :foo AND bar IN (:bar)',
['foo' => 'string', 'bar' => [1, 2, 3]],
['foo' => ParameterType::STRING, 'bar' => Connection::PARAM_INT_ARRAY],
......@@ -297,8 +282,7 @@ SQLDATA
['string', 1, 2, 3],
[ParameterType::STRING, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
],
// Named parameters: One non-list after list-needle
[
'Named: One non-list after list-needle' => [
'SELECT * FROM Foo WHERE bar IN (:bar) AND baz = :baz',
['bar' => [1, 2, 3], 'baz' => 'foo'],
['bar' => Connection::PARAM_INT_ARRAY, 'baz' => ParameterType::STRING],
......@@ -306,26 +290,39 @@ SQLDATA
[1, 2, 3, 'foo'],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::STRING],
],
// Named parameters: One non-list before and one after list-needle
[
'Named: One non-list before and one after list-needle' => [
'SELECT * FROM Foo WHERE foo = :foo AND bar IN (:bar) AND baz = :baz',
['bar' => [1, 2, 3],'foo' => 1, 'baz' => 4],
['bar' => Connection::PARAM_INT_ARRAY, 'foo' => ParameterType::INTEGER, 'baz' => ParameterType::INTEGER],
[
'bar' => Connection::PARAM_INT_ARRAY,
'foo' => ParameterType::INTEGER,
'baz' => ParameterType::INTEGER,
],
'SELECT * FROM Foo WHERE foo = ? AND bar IN (?, ?, ?) AND baz = ?',
[1, 1, 2, 3, 4],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
[
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
],
],
// Named parameters: Two lists
[
'Named: Two lists' => [
'SELECT * FROM Foo WHERE foo IN (:a, :b)',
['b' => [4, 5],'a' => [1, 2, 3]],
['a' => Connection::PARAM_INT_ARRAY, 'b' => Connection::PARAM_INT_ARRAY],
'SELECT * FROM Foo WHERE foo IN (?, ?, ?, ?, ?)',
[1, 2, 3, 4, 5],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
[
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
],
],
// Named parameters : With the same name arg type string
[
'Named: With the same name arg type string' => [
'SELECT * FROM Foo WHERE foo <> :arg AND bar = :arg',
['arg' => 'Some String'],
['arg' => ParameterType::STRING],
......@@ -333,18 +330,22 @@ SQLDATA
['Some String','Some String'],
[ParameterType::STRING,ParameterType::STRING],
],
// Named parameters : With the same name arg
[
'Named: With the same name arg' => [
'SELECT * FROM Foo WHERE foo IN (:arg) AND NOT bar IN (:arg)',
['arg' => [1, 2, 3]],
['arg' => Connection::PARAM_INT_ARRAY],
'SELECT * FROM Foo WHERE foo IN (?, ?, ?) AND NOT bar IN (?, ?, ?)',
[1, 2, 3, 1, 2, 3],
[ParameterType::INTEGER,ParameterType::INTEGER, ParameterType::INTEGER,ParameterType::INTEGER,ParameterType::INTEGER, ParameterType::INTEGER],
[
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
ParameterType::INTEGER,
],
],
// Named parameters : Same name, other name in between DBAL-299
[
'Named: Same name, other name in between (DBAL-299)' => [
'SELECT * FROM Foo WHERE (:foo = 2) AND (:bar = 3) AND (:foo = 2)',
['foo' => 2,'bar' => 3],
['foo' => ParameterType::INTEGER,'bar' => ParameterType::INTEGER],
......@@ -352,8 +353,7 @@ SQLDATA
[2, 3, 2],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::INTEGER],
],
// Named parameters : Empty "integer" array DDC-1978
[
'Named: Empty "integer" array (DDC-1978)' => [
'SELECT * FROM Foo WHERE foo IN (:foo)',
['foo' => []],
['foo' => Connection::PARAM_INT_ARRAY],
......@@ -361,8 +361,7 @@ SQLDATA
[],
[],
],
// Named parameters : Two empty "str" array DDC-1978
[
'Named: Two empty "str" array (DDC-1978)' => [
'SELECT * FROM Foo WHERE foo IN (:foo) OR bar IN (:bar)',
['foo' => [], 'bar' => []],
['foo' => Connection::PARAM_STR_ARRAY, 'bar' => Connection::PARAM_STR_ARRAY],
......@@ -386,8 +385,7 @@ SQLDATA
[1, 2, 'bar'],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::STRING],
],
// Params/types with colons
[
'Params/types with colons' => [
'SELECT * FROM Foo WHERE foo = :foo OR bar = :bar',
[':foo' => 'foo', ':bar' => 'bar'],
[':foo' => ParameterType::INTEGER],
......@@ -419,8 +417,7 @@ SQLDATA
[1, 2, 'bar'],
[ParameterType::INTEGER, ParameterType::INTEGER, ParameterType::STRING],
],
// DBAL-522 - null valued parameters are not considered
[
'Null valued parameters (DBAL-522)' => [
'INSERT INTO Foo (foo, bar) values (:foo, :bar)',
['foo' => 1, 'bar' => null],
[':foo' => ParameterType::INTEGER, ':bar' => ParameterType::NULL],
......@@ -436,8 +433,7 @@ SQLDATA
[1, null],
[ParameterType::INTEGER, ParameterType::NULL],
],
// DBAL-1205 - Escaped single quotes SQL- and C-Style
[
'Escaped single quotes SQL- and C-Style (DBAL-1205)' => [
"SELECT * FROM Foo WHERE foo = :foo||''':not_a_param''\\'' OR bar = ''':not_a_param''\\'':bar",
[':foo' => 1, ':bar' => 2],
[':foo' => ParameterType::INTEGER, 'bar' => ParameterType::INTEGER],
......@@ -445,6 +441,14 @@ SQLDATA
[1, 2],
[ParameterType::INTEGER, ParameterType::INTEGER],
],
[
'SELECT NULL FROM dummy WHERE ? IN (?)',
['foo', ['bar', 'baz']],
[1 => Connection::PARAM_STR_ARRAY],
'SELECT NULL FROM dummy WHERE ? IN (?, ?)',
['foo', 'bar', 'baz'],
[null, ParameterType::STRING, ParameterType::STRING],
],
];
}
......
......@@ -7,9 +7,10 @@ namespace Doctrine\Tests\DBAL\Types;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\Exception\InvalidFormat;
use Doctrine\DBAL\Types\Exception\InvalidType;
use Exception;
use Doctrine\DBAL\Types\Exception\ValueNotConvertible;
use PHPUnit\Framework\TestCase;
use stdClass;
use Throwable;
use function get_class;
use function gettype;
use function is_object;
......@@ -18,6 +19,16 @@ use function tmpfile;
class ConversionExceptionTest extends TestCase
{
public function testConversionFailedPreviousException() : void
{
$previous = $this->createMock(Throwable::class);
$exception = ValueNotConvertible::new('foo', 'foo', null, $previous);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertSame($previous, $exception->getPrevious());
}
/**
* @param mixed $scalarValue
*
......@@ -58,9 +69,19 @@ class ConversionExceptionTest extends TestCase
);
}
public function testConversionFailedInvalidTypePreviousException() : void
{
$previous = $this->createMock(Throwable::class);
$exception = InvalidType::new('foo', 'foo', ['bar', 'baz'], $previous);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertSame($previous, $exception->getPrevious());
}
public function testConversionFailedFormatPreservesPreviousException() : void
{
$previous = new Exception();
$previous = $this->createMock(Throwable::class);
$exception = InvalidFormat::new('foo', 'bar', 'baz', $previous);
......
DROP USER IF EXISTS 'travis'@'%';
CREATE USER 'travis'@'%';
CREATE SCHEMA doctrine_tests;
CREATE SCHEMA test_create_database;
CREATE SCHEMA test_drop_database;
GRANT ALL PRIVILEGES ON doctrine_tests.* to travis@'%';
GRANT ALL PRIVILEGES ON test_create_database.* to travis@'%';
GRANT ALL PRIVILEGES ON test_drop_database.* to travis@'%';
#!/usr/bin/env bash
set -ex
echo "Starting RDBMS…">&2
if [[ "$IMAGE" == "mysql:8.0" ]]
then
CMD_OPTIONS="--default-authentication-plugin=mysql_native_password"
else
CMD_OPTIONS=""
fi
docker run \
--health-cmd='mysqladmin ping --silent' \
--detach \
--env MYSQL_ALLOW_EMPTY_PASSWORD=yes \
--env MYSQL_DATABASE=doctrine_tests \
--publish 33306:3306 \
--name rdbms \
"$IMAGE" $CMD_OPTIONS
while true; do
healthStatus=$(docker inspect --format "{{json .State.Health.Status }}" rdbms)
case $healthStatus in
'"starting"')
echo "Waiting for RDBMS to become ready…">&2
sleep 1
;;
'"healthy"')
echo "Container is healthy">&2
break
;;
'"unhealthy"')
echo "Container is unhealthy">&2
exit 1
;;
*)
echo "Unexpected health status $healthStatus">&2
;;
esac
done
#!/usr/bin/env bash
set -ex
echo "Starting MySQL 5.7..."
sudo docker run \
-d \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
-e MYSQL_DATABASE=doctrine_tests \
-p 33306:3306 \
--name mysql57 \
mysql:5.7
sudo docker exec -i mysql57 bash <<< 'until echo \\q | mysql doctrine_tests > /dev/null 2>&1 ; do sleep 1; done'
#!/usr/bin/env bash
set -ex
echo "Starting MySQL 8.0..."
sudo docker pull mysql:8.0
sudo docker run \
-d \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
-e MYSQL_DATABASE=doctrine_tests \
-p 33306:3306 \
--name mysql80 \
mysql:8.0 \
--default-authentication-plugin=mysql_native_password
sudo docker exec -i mysql80 bash <<< 'until echo \\q | mysql doctrine_tests > /dev/null 2>&1 ; do sleep 1; done'
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_type" value="mysqli"/>
<var name="db_host" value="localhost" />
<var name="db_username" value="travis" />
<var name="db_password" value="" />
<var name="db_name" value="doctrine_tests" />
<var name="db_port" value="3306"/>
<var name="tmpdb_type" value="mysqli"/>
<var name="tmpdb_host" value="localhost" />
<var name="tmpdb_username" value="travis" />
<var name="tmpdb_password" value="" />
<var name="tmpdb_port" value="3306"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../Doctrine/Tests/DBAL</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">../../lib/Doctrine</directory>
</whitelist>
</filter>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_type" value="pdo_mysql"/>
<var name="db_host" value="localhost" />
<var name="db_username" value="travis" />
<var name="db_password" value="" />
<var name="db_name" value="doctrine_tests" />
<var name="db_port" value="3306"/>
<var name="tmpdb_type" value="pdo_mysql"/>
<var name="tmpdb_host" value="localhost" />
<var name="tmpdb_username" value="travis" />
<var name="tmpdb_password" value="" />
<var name="tmpdb_port" value="3306"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../Doctrine/Tests/DBAL</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">../../lib/Doctrine</directory>
</whitelist>
</filter>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_type" value="pdo_mysql"/>
<var name="db_host" value="localhost" />
<var name="db_username" value="travis" />
<var name="db_password" value="" />
<var name="db_name" value="doctrine_tests" />
<var name="db_port" value="3306"/>
<var name="tmpdb_type" value="pdo_mysql"/>
<var name="tmpdb_host" value="localhost" />
<var name="tmpdb_username" value="travis" />
<var name="tmpdb_password" value="" />
<var name="tmpdb_port" value="3306"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../Doctrine/Tests/DBAL</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">../../lib/Doctrine</directory>
</whitelist>
</filter>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_type" value="mysqli"/>
<var name="db_host" value="localhost" />
<var name="db_username" value="travis" />
<var name="db_password" value="" />
<var name="db_name" value="doctrine_tests" />
<var name="db_port" value="3306"/>
<var name="tmpdb_type" value="mysqli"/>
<var name="tmpdb_host" value="localhost" />
<var name="tmpdb_username" value="travis" />
<var name="tmpdb_password" value="" />
<var name="tmpdb_port" value="3306"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../Doctrine/Tests/DBAL</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">../../lib/Doctrine</directory>
</whitelist>
</filter>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment