Unverified Commit ac0e13a1 authored by Sergei Morozov's avatar Sergei Morozov

Merge branch '3.0.x'

parents d3a3e01d 8be6d163
/.appveyor.yml export-ignore /.appveyor.yml export-ignore
/composer.lock export-ignore
/docs export-ignore
/.doctrine-project.json export-ignore /.doctrine-project.json export-ignore
/.gitattributes export-ignore /.gitattributes export-ignore
/.github export-ignore /.github export-ignore
/.gitignore export-ignore /.gitignore export-ignore
/.scrutinizer.yml export-ignore
/.travis.yml export-ignore
/build.properties export-ignore
/build.xml export-ignore
/composer.lock export-ignore
/docs export-ignore
/phpcs.xml.dist export-ignore /phpcs.xml.dist export-ignore
/phpstan.neon.dist export-ignore /phpstan.neon.dist export-ignore
/phpunit.xml.dist export-ignore /phpunit.xml.dist export-ignore
/run-all.sh export-ignore /run-all.sh export-ignore
/.scrutinizer.yml export-ignore
/SECURITY.md export-ignore
/tests export-ignore /tests export-ignore
/.travis.yml export-ignore
/UPGRADE.md export-ignore
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "ea6ec5389b21f5bda19d375bad21d81f", "content-hash": "d06c0dac6585d3779056ae835b684c93",
"packages": [ "packages": [
{ {
"name": "doctrine/cache", "name": "doctrine/cache",
...@@ -206,50 +206,6 @@ ...@@ -206,50 +206,6 @@
} }
], ],
"packages-dev": [ "packages-dev": [
{
"name": "composer/xdebug-handler",
"version": "1.3.3",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "46867cbf8ca9fb8d60c506895449eb799db1184f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f",
"reference": "46867cbf8ca9fb8d60c506895449eb799db1184f",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Composer\\XdebugHandler\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "John Stevenson",
"email": "john-stevenson@blueyonder.co.uk"
}
],
"description": "Restarts a process without xdebug.",
"keywords": [
"Xdebug",
"performance"
],
"time": "2019-05-27T17:52:04+00:00"
},
{ {
"name": "dealerdirect/phpcodesniffer-composer-installer", "name": "dealerdirect/phpcodesniffer-composer-installer",
"version": "v0.5.0", "version": "v0.5.0",
...@@ -433,57 +389,6 @@ ...@@ -433,57 +389,6 @@
], ],
"time": "2019-10-21T16:45:58+00:00" "time": "2019-10-21T16:45:58+00:00"
}, },
{
"name": "jean85/pretty-package-versions",
"version": "1.2",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/75c7effcf3f77501d0e0caa75111aff4daa0dd48",
"reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48",
"shasum": ""
},
"require": {
"ocramius/package-versions": "^1.2.0",
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Jean85\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Alessandro Lai",
"email": "alessandro.lai85@gmail.com"
}
],
"description": "A wrapper for ocramius/package-versions to get pretty versions strings",
"keywords": [
"composer",
"package",
"release",
"versions"
],
"time": "2018-06-13T13:22:40+00:00"
},
{ {
"name": "jetbrains/phpstorm-stubs", "name": "jetbrains/phpstorm-stubs",
"version": "v2019.1", "version": "v2019.1",
...@@ -571,580 +476,6 @@ ...@@ -571,580 +476,6 @@
], ],
"time": "2020-01-17T21:11:47+00:00" "time": "2020-01-17T21:11:47+00:00"
}, },
{
"name": "nette/bootstrap",
"version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/nette/bootstrap.git",
"reference": "e1075af05c211915e03e0c86542f3ba5433df4a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/bootstrap/zipball/e1075af05c211915e03e0c86542f3ba5433df4a3",
"reference": "e1075af05c211915e03e0c86542f3ba5433df4a3",
"shasum": ""
},
"require": {
"nette/di": "^3.0",
"nette/utils": "^3.0",
"php": ">=7.1"
},
"require-dev": {
"latte/latte": "^2.2",
"nette/application": "^3.0",
"nette/caching": "^3.0",
"nette/database": "^3.0",
"nette/forms": "^3.0",
"nette/http": "^3.0",
"nette/mail": "^3.0",
"nette/robot-loader": "^3.0",
"nette/safe-stream": "^2.2",
"nette/security": "^3.0",
"nette/tester": "^2.0",
"tracy/tracy": "^2.6"
},
"suggest": {
"nette/robot-loader": "to use Configurator::createRobotLoader()",
"tracy/tracy": "to use Configurator::enableTracy()"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "🅱 Nette Bootstrap: the simple way to configure and bootstrap your Nette application.",
"homepage": "https://nette.org",
"keywords": [
"bootstrapping",
"configurator",
"nette"
],
"time": "2019-03-26T12:59:07+00:00"
},
{
"name": "nette/di",
"version": "v3.0.1",
"source": {
"type": "git",
"url": "https://github.com/nette/di.git",
"reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/di/zipball/4aff517a1c6bb5c36fa09733d4cea089f529de6d",
"reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"nette/neon": "^3.0",
"nette/php-generator": "^3.2.2",
"nette/robot-loader": "^3.2",
"nette/schema": "^1.0",
"nette/utils": "^3.0",
"php": ">=7.1"
},
"conflict": {
"nette/bootstrap": "<3.0"
},
"require-dev": {
"nette/tester": "^2.2",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
],
"files": [
"src/compatibility.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "💎 Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP 7.1 features.",
"homepage": "https://nette.org",
"keywords": [
"compiled",
"di",
"dic",
"factory",
"ioc",
"nette",
"static"
],
"time": "2019-08-07T12:11:33+00:00"
},
{
"name": "nette/finder",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/nette/finder.git",
"reference": "6be1b83ea68ac558aff189d640abe242e0306fe2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2",
"reference": "6be1b83ea68ac558aff189d640abe242e0306fe2",
"shasum": ""
},
"require": {
"nette/utils": "^2.4 || ~3.0.0",
"php": ">=7.1"
},
"conflict": {
"nette/nette": "<2.2"
},
"require-dev": {
"nette/tester": "^2.0",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.5-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "🔍 Nette Finder: find files and directories with an intuitive API.",
"homepage": "https://nette.org",
"keywords": [
"filesystem",
"glob",
"iterator",
"nette"
],
"time": "2019-02-28T18:13:25+00:00"
},
{
"name": "nette/neon",
"version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/nette/neon.git",
"reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/neon/zipball/cbff32059cbdd8720deccf9e9eace6ee516f02eb",
"reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"ext-json": "*",
"php": ">=7.0"
},
"require-dev": {
"nette/tester": "^2.0",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "🍸 Nette NEON: encodes and decodes NEON file format.",
"homepage": "http://ne-on.org",
"keywords": [
"export",
"import",
"neon",
"nette",
"yaml"
],
"time": "2019-02-05T21:30:40+00:00"
},
{
"name": "nette/php-generator",
"version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/nette/php-generator.git",
"reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/php-generator/zipball/aea6e81437bb238e5f0e5b5ce06337433908e63b",
"reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b",
"shasum": ""
},
"require": {
"nette/utils": "^2.4.2 || ~3.0.0",
"php": ">=7.1"
},
"require-dev": {
"nette/tester": "^2.0",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 7.3 features.",
"homepage": "https://nette.org",
"keywords": [
"code",
"nette",
"php",
"scaffolding"
],
"time": "2019-07-05T13:01:56+00:00"
},
{
"name": "nette/robot-loader",
"version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/nette/robot-loader.git",
"reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/robot-loader/zipball/0712a0e39ae7956d6a94c0ab6ad41aa842544b5c",
"reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"nette/finder": "^2.5",
"nette/utils": "^3.0",
"php": ">=7.1"
},
"require-dev": {
"nette/tester": "^2.0",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "? Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.",
"homepage": "https://nette.org",
"keywords": [
"autoload",
"class",
"interface",
"nette",
"trait"
],
"time": "2019-03-08T21:57:24+00:00"
},
{
"name": "nette/schema",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
"reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d",
"reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d",
"shasum": ""
},
"require": {
"nette/utils": "^3.0.1",
"php": ">=7.1"
},
"require-dev": {
"nette/tester": "^2.2",
"tracy/tracy": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "📐 Nette Schema: validating data structures against a given Schema.",
"homepage": "https://nette.org",
"keywords": [
"config",
"nette"
],
"time": "2019-04-03T15:53:25+00:00"
},
{
"name": "nette/utils",
"version": "v3.0.1",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
"reference": "bd961f49b211997202bda1d0fbc410905be370d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4",
"reference": "bd961f49b211997202bda1d0fbc410905be370d4",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"nette/tester": "~2.0",
"tracy/tracy": "^2.3"
},
"suggest": {
"ext-gd": "to use Image",
"ext-iconv": "to use Strings::webalize() and toAscii()",
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
"ext-json": "to use Nette\\Utils\\Json",
"ext-mbstring": "to use Strings::lower() etc...",
"ext-xml": "to use Strings::length() etc. when mbstring is not available"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause",
"GPL-2.0",
"GPL-3.0"
],
"authors": [
{
"name": "David Grudl",
"homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/contributors"
}
],
"description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
"homepage": "https://nette.org",
"keywords": [
"array",
"core",
"datetime",
"images",
"json",
"nette",
"paginator",
"password",
"slugify",
"string",
"unicode",
"utf-8",
"utility",
"validation"
],
"time": "2019-03-22T01:00:30+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.2.3",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "e612609022e935f3d0337c1295176505b41188c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/e612609022e935f3d0337c1295176505b41188c8",
"reference": "e612609022e935f3d0337c1295176505b41188c8",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"time": "2019-08-12T20:17:41+00:00"
},
{ {
"name": "phar-io/manifest", "name": "phar-io/manifest",
"version": "1.0.3", "version": "1.0.3",
...@@ -1463,16 +794,16 @@ ...@@ -1463,16 +794,16 @@
}, },
{ {
"name": "phpstan/phpdoc-parser", "name": "phpstan/phpdoc-parser",
"version": "0.3.5", "version": "0.4.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git", "url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4" "reference": "a6d13524641bb780efc821d9e0a1e1bfb23cbd0e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8c4ef2aefd9788238897b678a985e1d5c8df6db4", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a6d13524641bb780efc821d9e0a1e1bfb23cbd0e",
"reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4", "reference": "a6d13524641bb780efc821d9e0a1e1bfb23cbd0e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1482,16 +813,17 @@ ...@@ -1482,16 +813,17 @@
"consistence/coding-standard": "^3.5", "consistence/coding-standard": "^3.5",
"jakub-onderka/php-parallel-lint": "^0.9.2", "jakub-onderka/php-parallel-lint": "^0.9.2",
"phing/phing": "^2.16.0", "phing/phing": "^2.16.0",
"phpstan/phpstan": "^0.10", "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-strict-rules": "^0.12",
"phpunit/phpunit": "^6.3", "phpunit/phpunit": "^6.3",
"slevomat/coding-standard": "^4.7.2", "slevomat/coding-standard": "^4.7.2",
"squizlabs/php_codesniffer": "^3.3.2", "symfony/process": "^4.0"
"symfony/process": "^3.4 || ^4.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "0.3-dev" "dev-master": "0.4-dev"
} }
}, },
"autoload": { "autoload": {
...@@ -1506,120 +838,83 @@ ...@@ -1506,120 +838,83 @@
"MIT" "MIT"
], ],
"description": "PHPDoc parser with support for nullable, intersection and generic types", "description": "PHPDoc parser with support for nullable, intersection and generic types",
"time": "2019-06-07T19:13:52+00:00" "time": "2019-12-13T12:03:22+00:00"
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
"version": "0.11.15", "version": "0.12.18",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d" "reference": "1ce27fe29c8660a27926127d350d53d80c4d4286"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/1be5b3a706db16ac472a4c40ec03cf4c810b118d", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1ce27fe29c8660a27926127d350d53d80c4d4286",
"reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d", "reference": "1ce27fe29c8660a27926127d350d53d80c4d4286",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer/xdebug-handler": "^1.3.0", "php": "^7.1"
"jean85/pretty-package-versions": "^1.0.3",
"nette/bootstrap": "^2.4 || ^3.0",
"nette/di": "^2.4.7 || ^3.0",
"nette/robot-loader": "^3.0.1",
"nette/schema": "^1.0",
"nette/utils": "^2.4.5 || ^3.0",
"nikic/php-parser": "^4.2.3",
"php": "~7.1",
"phpstan/phpdoc-parser": "^0.3.5",
"symfony/console": "~3.2 || ~4.0",
"symfony/finder": "~3.2 || ~4.0"
},
"conflict": {
"symfony/console": "3.4.16 || 4.1.5"
},
"require-dev": {
"brianium/paratest": "^2.0 || ^3.0",
"consistence/coding-standard": "^3.5",
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.4",
"ext-intl": "*",
"ext-mysqli": "*",
"ext-simplexml": "*",
"ext-soap": "*",
"ext-zip": "*",
"jakub-onderka/php-parallel-lint": "^1.0",
"localheinz/composer-normalize": "^1.1.0",
"phing/phing": "^2.16.0",
"phpstan/phpstan-deprecation-rules": "^0.11",
"phpstan/phpstan-php-parser": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.5.14 || ^8.0",
"slevomat/coding-standard": "^4.7.2",
"squizlabs/php_codesniffer": "^3.3.2"
}, },
"bin": [ "bin": [
"bin/phpstan" "phpstan",
"phpstan.phar"
], ],
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "0.11-dev" "dev-master": "0.12-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "files": [
"PHPStan\\": [ "bootstrap.php"
"src/",
"build/PHPStan"
] ]
}
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"description": "PHPStan - PHP Static Analysis Tool", "description": "PHPStan - PHP Static Analysis Tool",
"time": "2019-08-18T20:51:53+00:00" "time": "2020-03-22T16:51:47+00:00"
}, },
{ {
"name": "phpstan/phpstan-phpunit", "name": "phpstan/phpstan-phpunit",
"version": "0.11.2", "version": "0.12.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan-phpunit.git", "url": "https://github.com/phpstan/phpstan-phpunit.git",
"reference": "fbf2ad56c3b13189d29655e226c9b1da47c2fad9" "reference": "26394996368b6d033d012547d3197f4e07e23021"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/fbf2ad56c3b13189d29655e226c9b1da47c2fad9", "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/26394996368b6d033d012547d3197f4e07e23021",
"reference": "fbf2ad56c3b13189d29655e226c9b1da47c2fad9", "reference": "26394996368b6d033d012547d3197f4e07e23021",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"nikic/php-parser": "^4.0",
"php": "~7.1", "php": "~7.1",
"phpstan/phpdoc-parser": "^0.3", "phpstan/phpstan": "^0.12.4"
"phpstan/phpstan": "^0.11.4"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<7.0" "phpunit/phpunit": "<7.0"
}, },
"require-dev": { "require-dev": {
"consistence/coding-standard": "^3.0.1", "consistence/coding-standard": "^3.5",
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4",
"ergebnis/composer-normalize": "^2.0.2",
"jakub-onderka/php-parallel-lint": "^1.0", "jakub-onderka/php-parallel-lint": "^1.0",
"phing/phing": "^2.16.0", "phing/phing": "^2.16.0",
"phpstan/phpstan-strict-rules": "^0.11", "phpstan/phpstan-strict-rules": "^0.12",
"phpunit/phpunit": "^7.0", "phpunit/phpunit": "^7.0",
"satooshi/php-coveralls": "^1.0", "satooshi/php-coveralls": "^1.0",
"slevomat/coding-standard": "^4.5.2" "slevomat/coding-standard": "^4.7.2"
}, },
"type": "phpstan-extension", "type": "phpstan-extension",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "0.11-dev" "dev-master": "0.12-dev"
}, },
"phpstan": { "phpstan": {
"includes": [ "includes": [
...@@ -1638,7 +933,7 @@ ...@@ -1638,7 +933,7 @@
"MIT" "MIT"
], ],
"description": "PHPUnit extensions and rules for PHPStan", "description": "PHPUnit extensions and rules for PHPStan",
"time": "2019-05-17T17:50:16+00:00" "time": "2020-01-10T12:07:21+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
...@@ -2039,16 +1334,16 @@ ...@@ -2039,16 +1334,16 @@
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "1.1.0", "version": "1.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -2057,7 +1352,7 @@ ...@@ -2057,7 +1352,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev" "dev-master": "1.1.x-dev"
} }
}, },
"autoload": { "autoload": {
...@@ -2082,7 +1377,7 @@ ...@@ -2082,7 +1377,7 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"time": "2018-11-20T15:27:04+00:00" "time": "2020-03-23T09:12:05+00:00"
}, },
{ {
"name": "sebastian/code-unit-reverse-lookup", "name": "sebastian/code-unit-reverse-lookup",
...@@ -2990,55 +2285,6 @@ ...@@ -2990,55 +2285,6 @@
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-28T21:50:02+00:00" "time": "2018-02-28T21:50:02+00:00"
}, },
{
"name": "symfony/finder",
"version": "v4.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "9638d41e3729459860bb96f6247ccb61faaa45f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/9638d41e3729459860bb96f6247ccb61faaa45f2",
"reference": "9638d41e3729459860bb96f6247ccb61faaa45f2",
"shasum": ""
},
"require": {
"php": "^7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2019-06-28T13:16:30+00:00"
},
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
"version": "v1.14.0", "version": "v1.14.0",
......
...@@ -6,6 +6,8 @@ parameters: ...@@ -6,6 +6,8 @@ parameters:
autoload_files: autoload_files:
- %currentWorkingDirectory%/tests/phpstan-polyfill.php - %currentWorkingDirectory%/tests/phpstan-polyfill.php
reportUnmatchedIgnoredErrors: false reportUnmatchedIgnoredErrors: false
checkMissingIterableValueType: false
checkGenericClassInNonGenericObjectType: false
ignoreErrors: ignoreErrors:
# extension not available # extension not available
- '~^(Used )?(Function|Constant) sasql_\S+ not found\.\z~i' - '~^(Used )?(Function|Constant) sasql_\S+ not found\.\z~i'
...@@ -27,6 +29,36 @@ parameters: ...@@ -27,6 +29,36 @@ parameters:
- -
message: '~Parameter #3 \$type of method Doctrine\\DBAL\\Driver\\Statement::bindValue\(\) expects int, string given\.~' message: '~Parameter #3 \$type of method Doctrine\\DBAL\\Driver\\Statement::bindValue\(\) expects int, string given\.~'
path: %currentWorkingDirectory%/tests/Functional/DataAccessTest.php path: %currentWorkingDirectory%/tests/Functional/DataAccessTest.php
# https://github.com/JetBrains/phpstorm-stubs/pull/766
- '~^Method Doctrine\\DBAL\\Driver\\Mysqli\\MysqliStatement::_fetch\(\) never returns null so it can be removed from the return typehint\.$~'
# The ReflectionException in the case when the class does not exist is acceptable and does not need to be handled
- '~^Parameter #1 \$argument of class ReflectionClass constructor expects class-string<T of object>\|T of object, string given\.$~'
# https://github.com/phpstan/phpstan/issues/3132
-
message: '~^Call to function in_array\(\) with arguments Doctrine\\DBAL\\Schema\\Column, array<string> and true will always evaluate to false\.$~'
path: %currentWorkingDirectory%/src/Schema/Table.php
# https://github.com/phpstan/phpstan/issues/3133
-
message: '~^Cannot cast array<string>\|bool\|string\|null to int\.$~'
path: %currentWorkingDirectory%/src/Tools/Console/Command/RunSqlCommand.php
# Temporaily suppressed during up-merging an upgrade PHPStan 0.12
- '~^Unable to resolve the template type ExpectedType in call to method static method PHPUnit\\Framework\\Assert::assertInstanceOf\(\)$~'
- '~^Unable to resolve the template type RealInstanceType in call to method PHPUnit\\Framework\\TestCase::getMockClass\(\)$~'
# Temporaily suppressed during up-merging an upgrade PHPStan 0.12
-
message: '~^Parameter #1 \$expected of static method PHPUnit\\Framework\\Assert::assertInstanceOf\(\) expects class-string<object>, string given\.$~'
path: %currentWorkingDirectory%/tests/Driver/AbstractDriverTest.php
# Temporaily suppressed during up-merging an upgrade PHPStan 0.12
-
message: '~^Call to an undefined method Doctrine\\DBAL\\Driver::createDatabasePlatformForVersion\(\)\.$~'
path: %currentWorkingDirectory%/tests/Driver/AbstractDriverTest.php
includes: includes:
- vendor/phpstan/phpstan-phpunit/extension.neon - vendor/phpstan/phpstan-phpunit/extension.neon
- vendor/phpstan/phpstan-phpunit/rules.neon - vendor/phpstan/phpstan-phpunit/rules.neon
...@@ -44,11 +44,7 @@ ...@@ -44,11 +44,7 @@
<testsuites> <testsuites>
<testsuite name="Doctrine DBAL Test Suite"> <testsuite name="Doctrine DBAL Test Suite">
<directory>./tests</directory> <directory>tests</directory>
<exclude>./tests/Performance</exclude>
</testsuite>
<testsuite name="Doctrine DBAL Performance Test Suite">
<directory>./tests/Performance</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
...@@ -57,14 +53,4 @@ ...@@ -57,14 +53,4 @@
<directory suffix=".php">src</directory> <directory suffix=".php">src</directory>
</whitelist> </whitelist>
</filter> </filter>
<listeners>
<listener class="Doctrine\DBAL\Tests\PerformanceTestListener"/>
</listeners>
<groups>
<exclude>
<group>performance</group>
</exclude>
</groups>
</phpunit> </phpunit>
...@@ -236,6 +236,7 @@ final class MysqliStatement implements IteratorAggregate, Statement ...@@ -236,6 +236,7 @@ final class MysqliStatement implements IteratorAggregate, Statement
$types = $this->types; $types = $this->types;
foreach ($this->boundValues as $parameter => $value) { foreach ($this->boundValues as $parameter => $value) {
assert(is_int($parameter));
if (! isset($types[$parameter - 1])) { if (! isset($types[$parameter - 1])) {
$types[$parameter - 1] = self::$paramTypeMap[ParameterType::STRING]; $types[$parameter - 1] = self::$paramTypeMap[ParameterType::STRING];
} }
...@@ -267,7 +268,7 @@ final class MysqliStatement implements IteratorAggregate, Statement ...@@ -267,7 +268,7 @@ final class MysqliStatement implements IteratorAggregate, Statement
/** /**
* Handle $this->_longData after regular query parameters have been bound * Handle $this->_longData after regular query parameters have been bound
* *
* @param resource[] $streams * @param array<int, resource> $streams
* *
* @throws MysqliException * @throws MysqliException
*/ */
......
...@@ -78,7 +78,9 @@ class PDOStatement implements IteratorAggregate, Statement ...@@ -78,7 +78,9 @@ class PDOStatement implements IteratorAggregate, Statement
} }
/** /**
* {@inheritdoc} * @param mixed $param
* @param mixed $variable
* @param mixed $driverOptions
*/ */
public function bindParam($param, &$variable, int $type = ParameterType::STRING, ?int $length = null, $driverOptions = null) : void public function bindParam($param, &$variable, int $type = ParameterType::STRING, ?int $length = null, $driverOptions = null) : void
{ {
......
...@@ -48,9 +48,8 @@ class OracleSessionInit implements EventSubscriber ...@@ -48,9 +48,8 @@ class OracleSessionInit implements EventSubscriber
return; return;
} }
array_change_key_case($this->_defaultSessionVars, CASE_UPPER);
$vars = []; $vars = [];
foreach ($this->_defaultSessionVars as $option => $value) { foreach (array_change_key_case($this->_defaultSessionVars, CASE_UPPER) as $option => $value) {
if ($option === 'CURRENT_SCHEMA') { if ($option === 'CURRENT_SCHEMA') {
$vars[] = $option . ' = ' . $value; $vars[] = $option . ' = ' . $value;
} else { } else {
......
...@@ -11,6 +11,8 @@ use Doctrine\DBAL\FetchMode; ...@@ -11,6 +11,8 @@ use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\LockMode; use Doctrine\DBAL\LockMode;
use Throwable; use Throwable;
use function array_change_key_case; use function array_change_key_case;
use function assert;
use function is_int;
use function sprintf; use function sprintf;
use const CASE_LOWER; use const CASE_LOWER;
...@@ -109,6 +111,8 @@ class TableGenerator ...@@ -109,6 +111,8 @@ class TableGenerator
$value = $row['sequence_value']; $value = $row['sequence_value'];
$value++; $value++;
assert(is_int($value));
if ($row['sequence_increment_by'] > 1) { if ($row['sequence_increment_by'] > 1) {
$this->sequences[$sequenceName] = [ $this->sequences[$sequenceName] = [
'value' => $value, 'value' => $value,
......
...@@ -201,7 +201,7 @@ class SqlitePlatform extends AbstractPlatform ...@@ -201,7 +201,7 @@ class SqlitePlatform extends AbstractPlatform
} }
/** /**
* {@inheritDoc} * @param array<string, mixed> $field
*/ */
public function getTinyIntTypeDeclarationSql(array $field) : string public function getTinyIntTypeDeclarationSql(array $field) : string
{ {
...@@ -227,7 +227,7 @@ class SqlitePlatform extends AbstractPlatform ...@@ -227,7 +227,7 @@ class SqlitePlatform extends AbstractPlatform
} }
/** /**
* {@inheritDoc} * @param array<string, mixed> $field
*/ */
public function getMediumIntTypeDeclarationSql(array $field) : string public function getMediumIntTypeDeclarationSql(array $field) : string
{ {
...@@ -510,7 +510,7 @@ class SqlitePlatform extends AbstractPlatform ...@@ -510,7 +510,7 @@ class SqlitePlatform extends AbstractPlatform
return 0; return 0;
} }
public function getForUpdateSql() : string public function getForUpdateSQL() : string
{ {
return ''; return '';
} }
......
...@@ -199,7 +199,10 @@ class DB2SchemaManager extends AbstractSchemaManager ...@@ -199,7 +199,10 @@ class DB2SchemaManager extends AbstractSchemaManager
$sql = $platform->getListTableCommentsSQL($tableName); $sql = $platform->getListTableCommentsSQL($tableName);
$tableOptions = $this->_conn->fetchAssoc($sql); $tableOptions = $this->_conn->fetchAssoc($sql);
if ($tableOptions !== false) {
$table->addOption('comment', $tableOptions['REMARKS']); $table->addOption('comment', $tableOptions['REMARKS']);
}
return $table; return $table;
} }
......
...@@ -367,7 +367,10 @@ SQL; ...@@ -367,7 +367,10 @@ SQL;
$sql = $platform->getListTableCommentsSQL($tableName); $sql = $platform->getListTableCommentsSQL($tableName);
$tableOptions = $this->_conn->fetchAssoc($sql); $tableOptions = $this->_conn->fetchAssoc($sql);
if ($tableOptions !== false) {
$table->addOption('comment', $tableOptions['COMMENTS']); $table->addOption('comment', $tableOptions['COMMENTS']);
}
return $table; return $table;
} }
......
...@@ -499,7 +499,9 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager ...@@ -499,7 +499,9 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager
$tableOptions = $this->_conn->fetchAssoc($sql); $tableOptions = $this->_conn->fetchAssoc($sql);
if ($tableOptions !== false) {
$table->addOption('comment', $tableOptions['table_comment']); $table->addOption('comment', $tableOptions['table_comment']);
}
return $table; return $table;
} }
......
...@@ -19,7 +19,6 @@ use function explode; ...@@ -19,7 +19,6 @@ use function explode;
use function extension_loaded; use function extension_loaded;
use function get_class; use function get_class;
use function html_entity_decode; use function html_entity_decode;
use function ini_get;
use function ini_set; use function ini_set;
use function is_array; use function is_array;
use function is_object; use function is_object;
...@@ -57,11 +56,8 @@ final class Dumper ...@@ -57,11 +56,8 @@ final class Dumper
*/ */
public static function dump($var, int $maxDepth = 2) : string public static function dump($var, int $maxDepth = 2) : string
{ {
$html = ini_get('html_errors'); $html = ini_set('html_errors', '1');
assert(is_string($html));
if ($html !== '1') {
ini_set('html_errors', '1');
}
if (extension_loaded('xdebug')) { if (extension_loaded('xdebug')) {
ini_set('xdebug.var_display_max_depth', (string) $maxDepth); ini_set('xdebug.var_display_max_depth', (string) $maxDepth);
......
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests\Performance;
use DateTime;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Tests\PerformanceTestCase;
use Doctrine\DBAL\Types\Type;
/**
* @group performance
*/
class TypeConversionPerformanceTest extends PerformanceTestCase
{
/**
* @throws DBALException
*
* @dataProvider itemCountProvider
*/
public function testDateTimeTypeConversionPerformance(int $count) : void
{
$value = new DateTime();
$type = Type::getType('datetime');
$platform = $this->connection->getDatabasePlatform();
$this->startTiming();
for ($i = 0; $i < $count; $i++) {
$type->convertToDatabaseValue($value, $platform);
}
$this->stopTiming();
}
/**
* @return mixed[][]
*/
public static function itemCountProvider() : iterable
{
return [
'100 items' => [100],
'1000 items' => [1000],
'10000 items' => [10000],
'100000 items' => [100000],
];
}
}
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests;
use function microtime;
/**
* Base class for all DBAL performance tests.
*
* Tests implemented in this class must call startTiming at the beginning
* and stopTiming at the end of all tests. Tests that do not start or stop
* timing will fail.
*/
abstract class PerformanceTestCase extends FunctionalTestCase
{
/**
* time the test started
*
* @var float
*/
private $startTime;
/**
* elapsed run time of the last test
*
* @var float
*/
private $runTime;
protected function assertPostConditions() : void
{
// If a perf test doesn't start or stop, it fails.
self::assertNotNull($this->startTime, 'Test timing was started');
self::assertNotNull($this->runTime, 'Test timing was stopped');
}
/**
* begin timing
*/
protected function startTiming() : void
{
$this->startTime = microtime(true);
}
/**
* end timing
*/
protected function stopTiming() : void
{
$this->runTime = microtime(true) - $this->startTime;
}
/**
* @return float elapsed test execution time
*/
public function getTime() : float
{
return $this->runTime;
}
}
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestListener;
use PHPUnit\Framework\TestListenerDefaultImplementation;
use function get_class;
use function printf;
use function str_replace;
/**
* Listener for collecting and reporting results of performance tests
*/
class PerformanceTestListener implements TestListener
{
use TestListenerDefaultImplementation;
/** @var string[][] */
private $timings = [];
public function endTest(Test $test, float $time) : void
{
// This listener only applies to performance tests.
if (! ($test instanceof PerformanceTestCase)) {
return;
}
// we identify perf tests by class, method, and dataset
$class = str_replace('\\Doctrine\\Tests\\DBAL\\Performance\\', '', get_class($test));
if (! isset($this->timings[$class])) {
$this->timings[$class] = [];
}
// Store timing data for each test in the order they were run.
$this->timings[$class][$test->getName(true)] = $test->getTime();
}
/**
* Report performance test timings.
*
* Note: __destruct is used here because PHPUnit doesn't have a
* 'All tests over' hook.
*/
public function __destruct()
{
if (empty($this->timings)) {
return;
}
// Report timings.
print "\nPerformance test results:\n\n";
foreach ($this->timings as $class => $tests) {
printf("%s:\n", $class);
foreach ($tests as $test => $time) {
printf("\t%s: %.3f seconds\n", $test, $time);
}
}
}
}
...@@ -10,6 +10,7 @@ use Doctrine\DBAL\DBALException; ...@@ -10,6 +10,7 @@ use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Driver; use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Driver\Connection as DriverConnection; use Doctrine\DBAL\Driver\Connection as DriverConnection;
use Doctrine\DBAL\Driver\Statement as DriverStatement; use Doctrine\DBAL\Driver\Statement as DriverStatement;
use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\Logging\SQLLogger; use Doctrine\DBAL\Logging\SQLLogger;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Statement; use Doctrine\DBAL\Statement;
...@@ -150,4 +151,15 @@ class StatementTest extends TestCase ...@@ -150,4 +151,15 @@ class StatementTest extends TestCase
$statement->execute(); $statement->execute();
} }
public function testPDOCustomClassConstructorArgs() : void
{
$statement = new Statement('', $this->conn);
$this->driverStatement->expects($this->once())
->method('fetchAll')
->with(self::equalTo(FetchMode::CUSTOM_OBJECT), self::equalTo('Example'), self::equalTo(['arg1']));
$statement->fetchAll(FetchMode::CUSTOM_OBJECT, 'Example', ['arg1']);
}
} }
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