mirror of
https://github.com/doctrine/orm.git
synced 2026-04-01 03:42:27 +02:00
Compare commits
93 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
445796af0e | ||
|
|
ab93285284 | ||
|
|
a692670469 | ||
|
|
58677c29b4 | ||
|
|
9a0fcb5a86 | ||
|
|
8104c65d6c | ||
|
|
a64d254d07 | ||
|
|
fdad48278b | ||
|
|
fc94127d7f | ||
|
|
dea3e5df44 | ||
|
|
5d7d3e99a0 | ||
|
|
3bc1096fd0 | ||
|
|
a2f01f7ccc | ||
|
|
401db453a2 | ||
|
|
6e59ec8f16 | ||
|
|
87e491465a | ||
|
|
8b588eceb2 | ||
|
|
edce36598f | ||
|
|
20c46035d1 | ||
|
|
324aacfb54 | ||
|
|
1edfcabead | ||
|
|
2785cde792 | ||
|
|
d67e3e8b1b | ||
|
|
d629c4e487 | ||
|
|
4a4226213f | ||
|
|
0ce1440884 | ||
|
|
9aa28b4e33 | ||
|
|
5c2b6870bf | ||
|
|
4389b2c188 | ||
|
|
e481d9880b | ||
|
|
85528f28e2 | ||
|
|
5873242fb5 | ||
|
|
c9e41d0aa7 | ||
|
|
f37c12834d | ||
|
|
041404e8b3 | ||
|
|
bfc68b3aba | ||
|
|
1e628370c4 | ||
|
|
ae2b9b1921 | ||
|
|
419df77a09 | ||
|
|
d6f6b2e97c | ||
|
|
75d5adf599 | ||
|
|
cfd6fadf9c | ||
|
|
2bf7916c52 | ||
|
|
253fd10cc0 | ||
|
|
2c956d55f2 | ||
|
|
3db992e953 | ||
|
|
6fc9b3ab16 | ||
|
|
2d833a5e86 | ||
|
|
a416a9a8b2 | ||
|
|
4d763ca4c9 | ||
|
|
398d74deaa | ||
|
|
3314322929 | ||
|
|
ce93817bf7 | ||
|
|
50992eafa2 | ||
|
|
9ccb8837e7 | ||
|
|
d959744c0a | ||
|
|
0264ba1759 | ||
|
|
8332fa1855 | ||
|
|
4fae126459 | ||
|
|
8420d24f90 | ||
|
|
f576e6c41f | ||
|
|
c79d2e0dc2 | ||
|
|
33b8d020a7 | ||
|
|
1b2daac25d | ||
|
|
977985f756 | ||
|
|
0c36f87935 | ||
|
|
e8f265d480 | ||
|
|
7bcbad076d | ||
|
|
57496e32fd | ||
|
|
797bfc53c4 | ||
|
|
8c47dcb6fc | ||
|
|
6347190886 | ||
|
|
9162f3519d | ||
|
|
fc9314d9f5 | ||
|
|
26806d08eb | ||
|
|
f7c04ae537 | ||
|
|
f9a4258ded | ||
|
|
eb9f11bf96 | ||
|
|
2b8cb9de79 | ||
|
|
570abb5bad | ||
|
|
3a32c00dcf | ||
|
|
2d643e6b7b | ||
|
|
4d6b1f3e63 | ||
|
|
d9c30e34c4 | ||
|
|
90c1ee0bd0 | ||
|
|
cfcca3a63c | ||
|
|
af0949adab | ||
|
|
cdb652ad87 | ||
|
|
4fb1ebfc10 | ||
|
|
46c1b57560 | ||
|
|
fdbbf7edd1 | ||
|
|
2fed8204c1 | ||
|
|
76f03b5db0 |
11
.travis.yml
11
.travis.yml
@@ -6,8 +6,7 @@ php:
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4snapshot
|
||||
- nightly
|
||||
- 7.4
|
||||
|
||||
env:
|
||||
- DB=sqlite
|
||||
@@ -18,7 +17,7 @@ before_install:
|
||||
- mv ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini{,.disabled} || echo "xdebug not available"
|
||||
- composer self-update
|
||||
|
||||
install: travis_retry composer update --prefer-dist
|
||||
install: travis_retry composer validate --strict && composer update --prefer-dist
|
||||
|
||||
script:
|
||||
- if [[ "$DB" == "mysql" || "$DB" == "mariadb" ]]; then mysql -e "CREATE SCHEMA doctrine_tests; GRANT ALL PRIVILEGES ON doctrine_tests.* to travis@'%'"; fi
|
||||
@@ -55,7 +54,7 @@ jobs:
|
||||
- stage: Test
|
||||
dist: xenial
|
||||
env: DB=mysql MYSQL_VERSION=5.7
|
||||
php: nightly
|
||||
php: 7.4
|
||||
services:
|
||||
- mysql
|
||||
before_script:
|
||||
@@ -87,6 +86,7 @@ jobs:
|
||||
|
||||
- stage: Code Quality
|
||||
env: DB=none STATIC_ANALYSIS
|
||||
php: 7.4
|
||||
install: travis_retry composer install --prefer-dist
|
||||
before_script:
|
||||
- echo "extension=memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
|
||||
@@ -102,7 +102,7 @@ jobs:
|
||||
- stage: Code Quality
|
||||
if: NOT type = pull_request
|
||||
env: DB=none CODING_STANDARDS
|
||||
php: 7.1
|
||||
php: 7.4
|
||||
install: travis_retry composer install --prefer-dist
|
||||
script:
|
||||
- ./vendor/bin/phpcs
|
||||
@@ -123,7 +123,6 @@ jobs:
|
||||
- php git-phpcs.phar origin/$TRAVIS_BRANCH...$TRAVIS_PULL_REQUEST_SHA
|
||||
|
||||
allow_failures:
|
||||
- php: nightly
|
||||
- stage: Code Quality
|
||||
env: DB=none CODING_STANDARDS
|
||||
|
||||
|
||||
142
UPGRADE.md
142
UPGRADE.md
@@ -1,3 +1,145 @@
|
||||
# Upgrade to 2.7
|
||||
|
||||
## Added `Doctrine\ORM\AbstractQuery#enableResultCache()` and `Doctrine\ORM\AbstractQuery#disableResultCache()` methods
|
||||
|
||||
Method `Doctrine\ORM\AbstractQuery#useResultCache()` which could be used for both enabling and disabling the cache
|
||||
(depending on passed flag) was split into two.
|
||||
|
||||
## Minor BC BREAK: paginator output walkers aren't be called anymore on sub-queries for queries without max results
|
||||
|
||||
To optimize DB interaction, `Doctrine\ORM\Tools\Pagination\Paginator` no longer fetches identifiers to be able to
|
||||
perform the pagination with join collections when max results isn't set in the query.
|
||||
|
||||
## Minor BC BREAK: tables filtered with `schema_filter` are no longer created
|
||||
|
||||
When generating schema diffs, if a source table is filtered out by a `schema_filter` expression, then a `CREATE TABLE` was
|
||||
always generated, even if the table already existed. This has been changed in this release and the table will no longer
|
||||
be created.
|
||||
|
||||
## Deprecated number unaware `Doctrine\ORM\Mapping\UnderscoreNamingStrategy`
|
||||
|
||||
In the last patch of the `v2.6.x` series, we fixed a bug that was not converting names properly when they had numbers
|
||||
(e.g.: `base64Encoded` was wrongly converted to `base64encoded` instead of `base64_encoded`).
|
||||
|
||||
In order to not break BC we've introduced a way to enable the fixed behavior using a boolean constructor argument. This
|
||||
argument will be removed in 3.0 and the default behavior will be the fixed one.
|
||||
|
||||
## Deprecated: `Doctrine\ORM\AbstractQuery#useResultCache()`
|
||||
|
||||
Method `Doctrine\ORM\AbstractQuery#useResultCache()` is deprecated because it is split into `enableResultCache()`
|
||||
and `disableResultCache()`. It will be removed in 3.0.
|
||||
|
||||
## Deprecated code generators and related console commands
|
||||
|
||||
These console commands have been deprecated:
|
||||
|
||||
* `orm:convert-mapping`
|
||||
* `orm:generate:entities`
|
||||
* `orm:generate-repositories`
|
||||
|
||||
These classes have been deprecated:
|
||||
|
||||
* `Doctrine\ORM\Tools\EntityGenerator`
|
||||
* `Doctrine\ORM\Tools\EntityRepositoryGenerator`
|
||||
|
||||
Whole Doctrine\ORM\Tools\Export namespace with all its members have been deprecated as well.
|
||||
|
||||
## Deprecated `Doctrine\ORM\Proxy\Proxy` marker interface
|
||||
|
||||
Proxy objects in Doctrine ORM 3.0 will no longer implement `Doctrine\ORM\Proxy\Proxy` nor
|
||||
`Doctrine\Common\Persistence\Proxy`: instead, they implement
|
||||
`ProxyManager\Proxy\GhostObjectInterface`.
|
||||
|
||||
These related classes have been deprecated:
|
||||
|
||||
* `Doctrine\ORM\Proxy\ProxyFactory`
|
||||
* `Doctrine\ORM\Proxy\Autoloader` - we suggest using the composer autoloader instead
|
||||
|
||||
These methods have been deprecated:
|
||||
|
||||
* `Doctrine\ORM\Configuration#getAutoGenerateProxyClasses()`
|
||||
* `Doctrine\ORM\Configuration#getProxyDir()`
|
||||
* `Doctrine\ORM\Configuration#getProxyNamespace()`
|
||||
|
||||
## Deprecated `Doctrine\ORM\Version`
|
||||
|
||||
The `Doctrine\ORM\Version` class is now deprecated and will be removed in Doctrine ORM 3.0:
|
||||
please refrain from checking the ORM version at runtime or use
|
||||
[ocramius/package-versions](https://github.com/Ocramius/PackageVersions/).
|
||||
|
||||
## Deprecated `EntityManager#merge()` and `EntityManager#detach()` methods
|
||||
|
||||
Merge and detach semantics were a poor fit for the PHP "share-nothing" architecture.
|
||||
In addition to that, merging/detaching caused multiple issues with data integrity
|
||||
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.
|
||||
|
||||
The following API methods were therefore deprecated:
|
||||
|
||||
* `EntityManager#merge()`
|
||||
* `EntityManager#detach()`
|
||||
* `UnitOfWork#merge()`
|
||||
* `UnitOfWork#detach()`
|
||||
|
||||
Users are encouraged to migrate `EntityManager#detach()` calls to `EntityManager#clear()`.
|
||||
|
||||
In order to maintain performance on batch processing jobs, it is endorsed to enable
|
||||
the second level cache (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/second-level-cache.html)
|
||||
on entities that are frequently reused across multiple `EntityManager#clear()` calls.
|
||||
|
||||
An alternative to `EntityManager#merge()` will not be provided by ORM 3.0, since the merging
|
||||
semantics should be part of the business domain rather than the persistence domain of an
|
||||
application. If your application relies heavily on CRUD-alike interactions and/or `PATCH`
|
||||
restful operations, you should look at alternatives such as [JMSSerializer](https://github.com/schmittjoh/serializer).
|
||||
|
||||
## Extending `EntityManager` is deprecated
|
||||
|
||||
Final keyword will be added to the `EntityManager::class` in Doctrine ORM 3.0 in order to ensure that EntityManager
|
||||
is not used as valid extension point. Valid extension point should be EntityManagerInterface.
|
||||
|
||||
## Deprecated `EntityManager#clear($entityName)`
|
||||
|
||||
If your code relies on clearing a single entity type via `EntityManager#clear($entityName)`,
|
||||
the signature has been changed to `EntityManager#clear()`.
|
||||
|
||||
The main reason is that partial clears caused multiple issues with data integrity
|
||||
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.
|
||||
|
||||
## Deprecated `EntityManager#flush($entity)` and `EntityManager#flush($entities)`
|
||||
|
||||
If your code relies on single entity flushing optimisations via
|
||||
`EntityManager#flush($entity)`, the signature has been changed to
|
||||
`EntityManager#flush()`.
|
||||
|
||||
Said API was affected by multiple data integrity bugs due to the fact
|
||||
that change tracking was being restricted upon a subset of the managed
|
||||
entities. The ORM cannot support committing subsets of the managed
|
||||
entities while also guaranteeing data integrity, therefore this
|
||||
utility was removed.
|
||||
|
||||
The `flush()` semantics will remain the same, but the change tracking will be performed
|
||||
on all entities managed by the unit of work, and not just on the provided
|
||||
`$entity` or `$entities`, as the parameter is now completely ignored.
|
||||
|
||||
The same applies to `UnitOfWork#commit($entity)`, which will simply be
|
||||
`UnitOfWork#commit()`.
|
||||
|
||||
If you would still like to perform batching operations over small `UnitOfWork`
|
||||
instances, it is suggested to follow these paths instead:
|
||||
|
||||
* eagerly use `EntityManager#clear()` in conjunction with a specific second level
|
||||
cache configuration (see http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/second-level-cache.html)
|
||||
* use an explicit change tracking policy (see http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/change-tracking-policies.html)
|
||||
|
||||
## Deprecated `YAML` mapping drivers.
|
||||
|
||||
If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** change to
|
||||
annotation or XML drivers instead.
|
||||
|
||||
## Deprecated: `Doctrine\ORM\EntityManagerInterface#copy()`
|
||||
|
||||
Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is deprecated.
|
||||
It will be removed in 3.0.
|
||||
|
||||
# Upgrade to 2.6
|
||||
|
||||
## Added `Doctrine\ORM\EntityRepository::count()` method
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# Version class and file
|
||||
project.version_class = Doctrine\\ORM\\Version
|
||||
project.version_file = lib/Doctrine/ORM/Version.php
|
||||
@@ -1,16 +0,0 @@
|
||||
version=2.0.0BETA2
|
||||
dependencies.common=2.0.0BETA4
|
||||
dependencies.dbal=2.0.0BETA4
|
||||
stability=beta
|
||||
build.dir=build
|
||||
dist.dir=dist
|
||||
report.dir=reports
|
||||
log.archive.dir=logs
|
||||
project.pirum_dir=
|
||||
project.download_dir=
|
||||
project.xsd_dir=
|
||||
test.phpunit_configuration_file=
|
||||
test.phpunit_generate_coverage=0
|
||||
test.pmd_reports=0
|
||||
test.pdepend_exec=
|
||||
test.phpmd_exec=
|
||||
101
build.xml
101
build.xml
@@ -1,101 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="DoctrineORM" default="build" basedir=".">
|
||||
<property file="build.properties" />
|
||||
|
||||
<target name="php">
|
||||
<exec executable="which" outputproperty="php_executable">
|
||||
<arg value="php" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="prepare">
|
||||
<mkdir dir="build" />
|
||||
</target>
|
||||
|
||||
<target name="build" depends="check-git-checkout-clean,prepare,php,composer">
|
||||
<exec executable="${php_executable}">
|
||||
<arg value="build/composer.phar" />
|
||||
<arg value="archive" />
|
||||
<arg value="--dir=build" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="composer" depends="php,composer-check,composer-download">
|
||||
<exec executable="${php_executable}">
|
||||
<arg value="build/composer.phar" />
|
||||
<arg value="install" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="composer-check" depends="prepare">
|
||||
<available file="build/composer.phar" property="composer.present"/>
|
||||
</target>
|
||||
|
||||
<target name="composer-download" unless="composer.present">
|
||||
<exec executable="wget">
|
||||
<arg value="-Obuild/composer.phar" />
|
||||
<arg value="http://getcomposer.org/composer.phar" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="make-release" depends="check-git-checkout-clean,prepare,php">
|
||||
<replace file="${project.version_file}" token="-DEV" value="" failOnNoReplacements="true" />
|
||||
<exec executable="${php_executable}" outputproperty="doctrine.current_version" failonerror="true">
|
||||
<arg value="-r" />
|
||||
<arg value="require_once '${project.version_file}';echo ${project.version_class}::VERSION;" />
|
||||
</exec>
|
||||
<exec executable="${php_executable}" outputproperty="doctrine.next_version" failonerror="true">
|
||||
<arg value="-r" />
|
||||
<arg value="$parts = explode('.', str_ireplace(array('-DEV', '-ALPHA', '-BETA'), '', '${doctrine.current_version}'));
|
||||
if (count($parts) != 3) {
|
||||
throw new \InvalidArgumentException('Version is assumed in format x.y.z, ${doctrine.current_version} given');
|
||||
}
|
||||
$parts[2]++;
|
||||
echo implode('.', $parts);
|
||||
" />
|
||||
</exec>
|
||||
|
||||
<git-commit file="${project.version_file}" message="Release ${doctrine.current_version}" />
|
||||
<git-tag version="${doctrine.current_version}" />
|
||||
<replace file="${project.version_file}" token="${doctrine.current_version}" value="${doctrine.next_version}-DEV" />
|
||||
<git-commit file="${project.version_file}" message="Bump version to ${doctrine.next_version}" />
|
||||
</target>
|
||||
|
||||
<target name="check-git-checkout-clean">
|
||||
<exec executable="git" failonerror="true">
|
||||
<arg value="diff-index" />
|
||||
<arg value="--quiet" />
|
||||
<arg value="HEAD" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<macrodef name="git-commit">
|
||||
<attribute name="file" default="NOT SET"/>
|
||||
<attribute name="message" default="NOT SET"/>
|
||||
|
||||
<sequential>
|
||||
<exec executable="git">
|
||||
<arg value="add" />
|
||||
<arg value="@{file}" />
|
||||
</exec>
|
||||
<exec executable="git">
|
||||
<arg value="commit" />
|
||||
<arg value="-m" />
|
||||
<arg value="@{message}" />
|
||||
</exec>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
|
||||
<macrodef name="git-tag">
|
||||
<attribute name="version" default="NOT SET" />
|
||||
|
||||
<sequential>
|
||||
<exec executable="git">
|
||||
<arg value="tag" />
|
||||
<arg value="-m" />
|
||||
<arg value="v@{version}" />
|
||||
<arg value="v@{version}" />
|
||||
</exec>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</project>
|
||||
@@ -3,7 +3,7 @@
|
||||
"type": "library",
|
||||
"description": "Object-Relational-Mapper for PHP",
|
||||
"keywords": ["orm", "database"],
|
||||
"homepage": "http://www.doctrine-project.org",
|
||||
"homepage": "https://www.doctrine-project.org/projects/orm.html",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"},
|
||||
@@ -18,18 +18,21 @@
|
||||
"require": {
|
||||
"php": "^7.1",
|
||||
"ext-pdo": "*",
|
||||
"doctrine/annotations": "~1.5",
|
||||
"doctrine/cache": "~1.6",
|
||||
"doctrine/collections": "^1.4",
|
||||
"doctrine/common": "^2.7.1",
|
||||
"doctrine/dbal": "^2.6",
|
||||
"doctrine/instantiator": "~1.1",
|
||||
"symfony/console": "~3.0|~4.0"
|
||||
"doctrine/annotations": "^1.8",
|
||||
"doctrine/cache": "^1.9.1",
|
||||
"doctrine/collections": "^1.5",
|
||||
"doctrine/common": "^2.11",
|
||||
"doctrine/dbal": "^2.9.3",
|
||||
"doctrine/event-manager": "^1.1",
|
||||
"doctrine/instantiator": "^1.3",
|
||||
"doctrine/persistence": "^1.2",
|
||||
"ocramius/package-versions": "^1.2",
|
||||
"symfony/console": "^3.0|^4.0|^5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^5.0",
|
||||
"phpunit/phpunit": "^7.5",
|
||||
"symfony/yaml": "~3.4|~4.0"
|
||||
"symfony/yaml": "^3.4|^4.0|^5.0"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
|
||||
@@ -46,7 +49,7 @@
|
||||
"bin": ["bin/doctrine"],
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.6.x-dev"
|
||||
"dev-master": "2.7.x-dev"
|
||||
}
|
||||
},
|
||||
"archive": {
|
||||
|
||||
583
composer.lock
generated
583
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -99,7 +99,7 @@ Optional attributes:
|
||||
|
||||
- **length**: Used by the "string" type to determine its maximum
|
||||
length in the database. Doctrine does not validate the length of a
|
||||
string values for you.
|
||||
string value for you.
|
||||
|
||||
- **precision**: The precision for a decimal (exact numeric) column
|
||||
(applies only for decimal column), which is the maximum number of
|
||||
|
||||
@@ -45,41 +45,29 @@ This documentation does not cover every single cache driver included
|
||||
with Doctrine. For an up-to-date-list, see the
|
||||
`cache directory on GitHub <https://github.com/doctrine/cache/tree/master/lib/Doctrine/Common/Cache>`_.
|
||||
|
||||
APC
|
||||
~~~
|
||||
PhpFileCache
|
||||
~~~~~~~~~~~~
|
||||
|
||||
In order to use the APC cache driver you must have it compiled and
|
||||
enabled in your php.ini. You can read about APC
|
||||
`in the PHP Documentation <http://us2.php.net/apc>`_. It will give
|
||||
you a little background information about what it is and how you
|
||||
can use it as well as how to install it.
|
||||
The preferred cache driver for metadata and query caches is ``PhpFileCache``.
|
||||
This driver serializes cache items and writes them to a file. This allows for
|
||||
opcode caching to be used and provides high performance in most scenarios.
|
||||
|
||||
Below is a simple example of how you could use the APC cache driver
|
||||
by itself.
|
||||
In order to use the ``PhpFileCache`` driver it must be able to write to
|
||||
a directory.
|
||||
|
||||
Below is an example of how to use the ``PhpFileCache`` driver by itself.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$cacheDriver = new \Doctrine\Common\Cache\ApcCache();
|
||||
$cacheDriver = new \Doctrine\Common\Cache\PhpFileCache(
|
||||
'/path/to/writable/directory'
|
||||
);
|
||||
$cacheDriver->save('cache_id', 'my_data');
|
||||
|
||||
APCu
|
||||
~~~~
|
||||
|
||||
In order to use the APCu cache driver you must have it compiled and
|
||||
enabled in your php.ini. You can read about APCu
|
||||
`in the PHP Documentation <http://us2.php.net/apcu>`_. It will give
|
||||
you a little background information about what it is and how you
|
||||
can use it as well as how to install it.
|
||||
|
||||
Below is a simple example of how you could use the APCu cache driver
|
||||
by itself.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$cacheDriver = new \Doctrine\Common\Cache\ApcuCache();
|
||||
$cacheDriver->save('cache_id', 'my_data');
|
||||
The PhpFileCache is not distributed across multiple machines if you are running
|
||||
your application in a distributed setup. This is ok for the metadata and query
|
||||
cache but is not a good approach for the result cache.
|
||||
|
||||
Memcache
|
||||
~~~~~~~~
|
||||
@@ -128,24 +116,6 @@ driver by itself.
|
||||
$cacheDriver->setMemcached($memcached);
|
||||
$cacheDriver->save('cache_id', 'my_data');
|
||||
|
||||
Xcache
|
||||
~~~~~~
|
||||
|
||||
In order to use the Xcache cache driver you must have it compiled
|
||||
and enabled in your php.ini. You can read about Xcache
|
||||
`here <http://xcache.lighttpd.net/>`_. It will give you a little
|
||||
background information about what it is and how you can use it as
|
||||
well as how to install it.
|
||||
|
||||
Below is a simple example of how you could use the Xcache cache
|
||||
driver by itself.
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$cacheDriver = new \Doctrine\Common\Cache\XcacheCache();
|
||||
$cacheDriver->save('cache_id', 'my_data');
|
||||
|
||||
Redis
|
||||
~~~~~
|
||||
|
||||
@@ -306,8 +276,11 @@ use on your ORM configuration.
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$cacheDriver = new \Doctrine\Common\Cache\PhpFileCache(
|
||||
'/path/to/writable/directory'
|
||||
);
|
||||
$config = new \Doctrine\ORM\Configuration();
|
||||
$config->setQueryCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
|
||||
$config->setQueryCacheImpl($cacheDriver);
|
||||
|
||||
Result Cache
|
||||
~~~~~~~~~~~~
|
||||
@@ -320,7 +293,11 @@ cache implementation.
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$config->setResultCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
|
||||
$cacheDriver = new \Doctrine\Common\Cache\PhpFileCache(
|
||||
'/path/to/writable/directory'
|
||||
);
|
||||
$config = new \Doctrine\ORM\Configuration();
|
||||
$config->setResultCacheImpl($cacheDriver);
|
||||
|
||||
Now when you're executing DQL queries you can configure them to use
|
||||
the result cache.
|
||||
@@ -337,7 +314,11 @@ result cache driver.
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$query->setResultCacheDriver(new \Doctrine\Common\Cache\ApcuCache());
|
||||
$cacheDriver = new \Doctrine\Common\Cache\PhpFileCache(
|
||||
'/path/to/writable/directory'
|
||||
);
|
||||
$config = new \Doctrine\ORM\Configuration();
|
||||
$query->setResultCacheDriver($cacheDriver);
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -389,7 +370,11 @@ first.
|
||||
.. code-block:: php
|
||||
|
||||
<?php
|
||||
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
|
||||
$cacheDriver = new \Doctrine\Common\Cache\PhpFileCache(
|
||||
'/path/to/writable/directory'
|
||||
);
|
||||
$config = new \Doctrine\ORM\Configuration();
|
||||
$config->setMetadataCacheImpl($cacheDriver);
|
||||
|
||||
Now the metadata information will only be parsed once and stored in
|
||||
the cache driver.
|
||||
@@ -425,6 +410,12 @@ To clear the result cache use the ``orm:clear-cache:result`` task.
|
||||
All these tasks accept a ``--flush`` option to flush the entire
|
||||
contents of the cache instead of invalidating the entries.
|
||||
|
||||
.. note::
|
||||
|
||||
None of these tasks will work with APC, APCu, or XCache drivers
|
||||
because the memory that the cache is stored in is only accessible
|
||||
to the webserver.
|
||||
|
||||
Cache Chaining
|
||||
--------------
|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@ With extra lazy collections you can now not only add entities to large collectio
|
||||
easily using a combination of ``count`` and ``slice``.
|
||||
|
||||
|
||||
.. warning::
|
||||
|
||||
``removeElement`` directly issued DELETE queries to the database from
|
||||
version 2.4.0 to 2.7.0. This circumvents the flush operation and might run
|
||||
outside a transactional boundary if you don't create one yourself. We
|
||||
consider this a critical bug in the assumptio of how the ORM works and
|
||||
reverted ``removeElement`` EXTRA_LAZY behavior in 2.7.1.
|
||||
|
||||
|
||||
Enabling Extra-Lazy Associations
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -583,21 +583,45 @@ abstract class AbstractQuery
|
||||
* Set whether or not to cache the results of this query and if so, for
|
||||
* how long and which ID to use for the cache entry.
|
||||
*
|
||||
* @param boolean $bool
|
||||
* @param integer $lifetime
|
||||
* @param string $resultCacheId
|
||||
* @deprecated 2.7 Use {@see enableResultCache} and {@see disableResultCache} instead.
|
||||
*
|
||||
* @param bool $useCache
|
||||
* @param int $lifetime
|
||||
* @param string $resultCacheId
|
||||
*
|
||||
* @return static This query instance.
|
||||
*/
|
||||
public function useResultCache($bool, $lifetime = null, $resultCacheId = null)
|
||||
public function useResultCache($useCache, $lifetime = null, $resultCacheId = null)
|
||||
{
|
||||
if ($bool) {
|
||||
$this->setResultCacheLifetime($lifetime);
|
||||
$this->setResultCacheId($resultCacheId);
|
||||
return $useCache
|
||||
? $this->enableResultCache($lifetime, $resultCacheId)
|
||||
: $this->disableResultCache();
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Enables caching of the results of this query, for given or default amount of seconds
|
||||
* and optionally specifies which ID to use for the cache entry.
|
||||
*
|
||||
* @param int|null $lifetime How long the cache entry is valid, in seconds.
|
||||
* @param string|null $resultCacheId ID to use for the cache entry.
|
||||
*
|
||||
* @return static This query instance.
|
||||
*/
|
||||
public function enableResultCache(?int $lifetime = null, ?string $resultCacheId = null) : self
|
||||
{
|
||||
$this->setResultCacheLifetime($lifetime);
|
||||
$this->setResultCacheId($resultCacheId);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables caching of the results of this query.
|
||||
*
|
||||
* @return static This query instance.
|
||||
*/
|
||||
public function disableResultCache() : self
|
||||
{
|
||||
$this->_queryCacheProfile = null;
|
||||
|
||||
return $this;
|
||||
|
||||
@@ -243,20 +243,6 @@ abstract class AbstractCollectionPersister implements CachedCollectionPersister
|
||||
return $this->persister->get($collection, $index);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function removeElement(PersistentCollection $collection, $element)
|
||||
{
|
||||
if ($persisterResult = $this->persister->removeElement($collection, $element)) {
|
||||
$this->evictCollectionCache($collection);
|
||||
$this->evictElementCache($this->sourceEntity->rootEntityName, $collection->getOwner());
|
||||
$this->evictElementCache($this->targetEntity->rootEntityName, $element);
|
||||
}
|
||||
|
||||
return $persisterResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
||||
@@ -70,6 +70,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
* Gets the directory where Doctrine generates any necessary proxy class files.
|
||||
*
|
||||
* @return string|null
|
||||
*
|
||||
* @deprecated 2.7 We're switch to `ocramius/proxy-manager` and this method isn't applicable any longer
|
||||
* @see https://github.com/Ocramius/ProxyManager
|
||||
*/
|
||||
public function getProxyDir()
|
||||
{
|
||||
@@ -82,6 +85,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
* Gets the strategy for automatically generating proxy classes.
|
||||
*
|
||||
* @return int Possible values are constants of Doctrine\Common\Proxy\AbstractProxyFactory.
|
||||
*
|
||||
* @deprecated 2.7 We're switch to `ocramius/proxy-manager` and this method isn't applicable any longer
|
||||
* @see https://github.com/Ocramius/ProxyManager
|
||||
*/
|
||||
public function getAutoGenerateProxyClasses()
|
||||
{
|
||||
@@ -107,6 +113,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
|
||||
* Gets the namespace where proxy classes reside.
|
||||
*
|
||||
* @return string|null
|
||||
*
|
||||
* @deprecated 2.7 We're switch to `ocramius/proxy-manager` and this method isn't applicable any longer
|
||||
* @see https://github.com/Ocramius/ProxyManager
|
||||
*/
|
||||
public function getProxyNamespace()
|
||||
{
|
||||
|
||||
@@ -29,6 +29,8 @@ use Doctrine\ORM\Proxy\ProxyFactory;
|
||||
use Doctrine\ORM\Query\FilterCollection;
|
||||
use Doctrine\Common\Util\ClassUtils;
|
||||
use Throwable;
|
||||
use const E_USER_DEPRECATED;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* The EntityManager is the central access point to ORM functionality.
|
||||
@@ -354,6 +356,13 @@ use Throwable;
|
||||
*/
|
||||
public function flush($entity = null)
|
||||
{
|
||||
if ($entity !== null) {
|
||||
@trigger_error(
|
||||
'Calling ' . __METHOD__ . '() with any arguments to flush specific entities is deprecated and will not be supported in Doctrine ORM 3.0.',
|
||||
E_USER_DEPRECATED
|
||||
);
|
||||
}
|
||||
|
||||
$this->errorIfClosed();
|
||||
|
||||
$this->unitOfWork->commit($entity);
|
||||
@@ -547,6 +556,13 @@ use Throwable;
|
||||
throw ORMInvalidArgumentException::invalidEntityName($entityName);
|
||||
}
|
||||
|
||||
if ($entityName !== null) {
|
||||
@trigger_error(
|
||||
'Calling ' . __METHOD__ . '() with any arguments to clear specific entities is deprecated and will not be supported in Doctrine ORM 3.0.',
|
||||
E_USER_DEPRECATED
|
||||
);
|
||||
}
|
||||
|
||||
$this->unitOfWork->clear(
|
||||
null === $entityName
|
||||
? null
|
||||
@@ -649,9 +665,13 @@ use Throwable;
|
||||
* @return void
|
||||
*
|
||||
* @throws ORMInvalidArgumentException
|
||||
*
|
||||
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
public function detach($entity)
|
||||
{
|
||||
@trigger_error('Method ' . __METHOD__ . '() is deprecated and will be removed in Doctrine ORM 3.0.', E_USER_DEPRECATED);
|
||||
|
||||
if ( ! is_object($entity)) {
|
||||
throw ORMInvalidArgumentException::invalidObject('EntityManager#detach()', $entity);
|
||||
}
|
||||
@@ -670,9 +690,13 @@ use Throwable;
|
||||
*
|
||||
* @throws ORMInvalidArgumentException
|
||||
* @throws ORMException
|
||||
*
|
||||
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
public function merge($entity)
|
||||
{
|
||||
@trigger_error('Method ' . __METHOD__ . '() is deprecated and will be removed in Doctrine ORM 3.0.', E_USER_DEPRECATED);
|
||||
|
||||
if ( ! is_object($entity)) {
|
||||
throw ORMInvalidArgumentException::invalidObject('EntityManager#merge()', $entity);
|
||||
}
|
||||
@@ -684,12 +708,11 @@ use Throwable;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @todo Implementation need. This is necessary since $e2 = clone $e1; throws an E_FATAL when access anything on $e:
|
||||
* Fatal error: Maximum function nesting level of '100' reached, aborting!
|
||||
*/
|
||||
public function copy($entity, $deep = false)
|
||||
{
|
||||
@trigger_error('Method ' . __METHOD__ . '() is deprecated and will be removed in Doctrine ORM 3.0.', E_USER_DEPRECATED);
|
||||
|
||||
throw new \BadMethodCallException("Not implemented.");
|
||||
}
|
||||
|
||||
|
||||
@@ -190,6 +190,8 @@ interface EntityManagerInterface extends ObjectManager
|
||||
/**
|
||||
* Creates a copy of the given entity. Can create a shallow or a deep copy.
|
||||
*
|
||||
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
|
||||
*
|
||||
* @param object $entity The entity to copy.
|
||||
* @param boolean $deep FALSE for a shallow copy, TRUE for a deep copy.
|
||||
*
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Doctrine\ORM\Internal\Hydration;
|
||||
use PDO;
|
||||
use Doctrine\ORM\Mapping\ClassMetadata;
|
||||
use Doctrine\ORM\Query;
|
||||
use function in_array;
|
||||
|
||||
class SimpleObjectHydrator extends AbstractHydrator
|
||||
{
|
||||
@@ -78,8 +79,9 @@ class SimpleObjectHydrator extends AbstractHydrator
|
||||
*/
|
||||
protected function hydrateRowData(array $sqlResult, array &$result)
|
||||
{
|
||||
$entityName = $this->class->name;
|
||||
$data = [];
|
||||
$entityName = $this->class->name;
|
||||
$data = [];
|
||||
$discrColumnValue = null;
|
||||
|
||||
// We need to find the correct entity class name if we have inheritance in resultset
|
||||
if ($this->class->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) {
|
||||
@@ -104,7 +106,8 @@ class SimpleObjectHydrator extends AbstractHydrator
|
||||
throw HydrationException::invalidDiscriminatorValue($sqlResult[$discrColumnName], array_keys($discrMap));
|
||||
}
|
||||
|
||||
$entityName = $discrMap[$sqlResult[$discrColumnName]];
|
||||
$entityName = $discrMap[$sqlResult[$discrColumnName]];
|
||||
$discrColumnValue = $sqlResult[$discrColumnName];
|
||||
|
||||
unset($sqlResult[$discrColumnName]);
|
||||
}
|
||||
@@ -134,6 +137,11 @@ class SimpleObjectHydrator extends AbstractHydrator
|
||||
|
||||
// Prevent overwrite in case of inherit classes using same property name (See AbstractHydrator)
|
||||
if ( ! isset($data[$fieldName]) || ! $valueIsNull) {
|
||||
// If we have inheritance in resultset, make sure the field belongs to the correct class
|
||||
if (isset($cacheKeyInfo['discriminatorValues']) && ! in_array($discrColumnValue, $cacheKeyInfo['discriminatorValues'], true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$data[$fieldName] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,8 @@ class DefaultQuoteStrategy implements QuoteStrategy
|
||||
$schema = '';
|
||||
|
||||
if (isset($association['joinTable']['schema'])) {
|
||||
$schema = $association['joinTable']['schema'] . '.';
|
||||
$schema = $association['joinTable']['schema'];
|
||||
$schema .= ! $platform->supportsSchemas() && $platform->canEmulateSchemas() ? '__' : '.';
|
||||
}
|
||||
|
||||
$tableName = $association['joinTable']['name'];
|
||||
|
||||
@@ -44,6 +44,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
|
||||
protected $entityAnnotationClasses = [
|
||||
Mapping\Entity::class => 1,
|
||||
Mapping\MappedSuperclass::class => 2,
|
||||
Mapping\Embeddable::class => 3,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,6 +25,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver;
|
||||
use Doctrine\ORM\Mapping\ClassMetadata as Metadata;
|
||||
use Doctrine\ORM\Mapping\MappingException;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* The YamlDriver reads the mapping metadata from yaml schema files.
|
||||
@@ -34,6 +35,8 @@ use Symfony\Component\Yaml\Yaml;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class YamlDriver extends FileDriver
|
||||
{
|
||||
@@ -44,6 +47,11 @@ class YamlDriver extends FileDriver
|
||||
*/
|
||||
public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENSION)
|
||||
{
|
||||
@trigger_error(
|
||||
'YAML mapping driver is deprecated and will be removed in Doctrine ORM 3.0, please migrate to annotation or XML driver.',
|
||||
E_USER_DEPRECATED
|
||||
);
|
||||
|
||||
parent::__construct($locator, $fileExtension);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,12 +22,14 @@ namespace Doctrine\ORM\Mapping;
|
||||
|
||||
use const CASE_LOWER;
|
||||
use const CASE_UPPER;
|
||||
use const E_USER_DEPRECATED;
|
||||
use function preg_replace;
|
||||
use function strpos;
|
||||
use function strrpos;
|
||||
use function strtolower;
|
||||
use function strtoupper;
|
||||
use function substr;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* Naming strategy implementing the underscore naming convention.
|
||||
@@ -58,6 +60,13 @@ class UnderscoreNamingStrategy implements NamingStrategy
|
||||
*/
|
||||
public function __construct($case = CASE_LOWER, bool $numberAware = false)
|
||||
{
|
||||
if (! $numberAware) {
|
||||
@trigger_error(
|
||||
'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
|
||||
E_USER_DEPRECATED
|
||||
);
|
||||
}
|
||||
|
||||
$this->case = $case;
|
||||
$this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
|
||||
}
|
||||
|
||||
@@ -367,16 +367,6 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec
|
||||
*/
|
||||
public function removeElement($element)
|
||||
{
|
||||
if ( ! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) {
|
||||
if ($this->collection->contains($element)) {
|
||||
return $this->collection->removeElement($element);
|
||||
}
|
||||
|
||||
$persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association);
|
||||
|
||||
return $persister->removeElement($this, $element);
|
||||
}
|
||||
|
||||
$removed = parent::removeElement($element);
|
||||
|
||||
if ( ! $removed) {
|
||||
|
||||
@@ -90,16 +90,6 @@ interface CollectionPersister
|
||||
*/
|
||||
public function containsKey(PersistentCollection $collection, $key);
|
||||
|
||||
/**
|
||||
* Removes an element.
|
||||
*
|
||||
* @param \Doctrine\ORM\PersistentCollection $collection
|
||||
* @param object $element
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function removeElement(PersistentCollection $collection, $element);
|
||||
|
||||
/**
|
||||
* Gets an element by key.
|
||||
*
|
||||
|
||||
@@ -211,22 +211,6 @@ class ManyToManyPersister extends AbstractCollectionPersister
|
||||
return (bool) $this->conn->fetchColumn($sql, $params, 0, $types);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function removeElement(PersistentCollection $collection, $element)
|
||||
{
|
||||
if ( ! $this->isValidEntityState($element)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
list($quotedJoinTable, $whereClauses, $params, $types) = $this->getJoinTableRestrictions($collection, $element, false);
|
||||
|
||||
$sql = 'DELETE FROM ' . $quotedJoinTable . ' WHERE ' . implode(' AND ', $whereClauses);
|
||||
|
||||
return (bool) $this->conn->executeUpdate($sql, $params, $types);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
||||
@@ -166,28 +166,6 @@ class OneToManyPersister extends AbstractCollectionPersister
|
||||
return $persister->exists($element, $criteria);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function removeElement(PersistentCollection $collection, $element)
|
||||
{
|
||||
$mapping = $collection->getMapping();
|
||||
|
||||
if ( ! $mapping['orphanRemoval']) {
|
||||
// no-op: this is not the owning side, therefore no operations should be applied
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! $this->isValidEntityState($element)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this
|
||||
->uow
|
||||
->getEntityPersister($mapping['targetEntity'])
|
||||
->delete($element);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
||||
@@ -26,6 +26,8 @@ use Doctrine\Common\Proxy\Proxy as BaseProxy;
|
||||
*
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @since 2.0
|
||||
*
|
||||
* @deprecated 2.7 This interface is being removed from the ORM and won't have any replacement, proxies will no longer implement it.
|
||||
*/
|
||||
interface Proxy extends BaseProxy
|
||||
{
|
||||
|
||||
@@ -37,6 +37,8 @@ use Doctrine\ORM\Utility\IdentifierFlattener;
|
||||
* @author Giorgio Sironi <piccoloprincipeazzurro@gmail.com>
|
||||
* @author Marco Pivetta <ocramius@gmail.com>
|
||||
* @since 2.0
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class ProxyFactory extends AbstractProxyFactory
|
||||
{
|
||||
|
||||
@@ -133,7 +133,7 @@ final class Query extends AbstractQuery
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
private $_state = self::STATE_CLEAN;
|
||||
private $_state = self::STATE_DIRTY;
|
||||
|
||||
/**
|
||||
* A snapshot of the parameter types the query was parsed with.
|
||||
|
||||
@@ -189,7 +189,7 @@ class Parser
|
||||
{
|
||||
$this->query = $query;
|
||||
$this->em = $query->getEntityManager();
|
||||
$this->lexer = new Lexer($query->getDQL());
|
||||
$this->lexer = new Lexer((string) $query->getDQL());
|
||||
$this->parserResult = new ParserResult();
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ class Parser
|
||||
*/
|
||||
public function match($token)
|
||||
{
|
||||
$lookaheadType = $this->lexer->lookahead['type'];
|
||||
$lookaheadType = $this->lexer->lookahead['type'] ?? null;
|
||||
|
||||
// Short-circuit on first condition, usually types match
|
||||
if ($lookaheadType === $token) {
|
||||
|
||||
@@ -116,7 +116,7 @@ EOT
|
||||
)
|
||||
);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($input->getOption('all')) {
|
||||
@@ -124,7 +124,7 @@ EOT
|
||||
|
||||
$cache->evictEntityRegions();
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($ownerId) {
|
||||
@@ -138,10 +138,12 @@ EOT
|
||||
);
|
||||
$cache->evictCollection($ownerClass, $assoc, $ownerId);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$ui->comment(sprintf('Clearing second-level cache for collection <info>"%s#%s"</info>', $ownerClass, $assoc));
|
||||
$cache->evictCollectionRegion($ownerClass, $assoc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ EOT
|
||||
|
||||
$ui->comment(sprintf('Flushing cache provider configured for entity named <info>"%s"</info>', $entityClass));
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($input->getOption('all')) {
|
||||
@@ -116,7 +116,7 @@ EOT
|
||||
|
||||
$cache->evictEntityRegions();
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($entityId) {
|
||||
@@ -129,10 +129,12 @@ EOT
|
||||
);
|
||||
$cache->evictEntity($entityClass, $entityId);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$ui->comment(sprintf('Clearing second-level cache for entity <info>"%s"</info>', $entityClass));
|
||||
$cache->evictEntityRegion($entityClass);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ EOT
|
||||
)
|
||||
);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($input->getOption('all')) {
|
||||
@@ -120,10 +120,12 @@ EOT
|
||||
|
||||
$cache->evictQueryRegions();
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$ui->comment(sprintf('Clearing second-level cache query region named <info>"%s"</info>', $name));
|
||||
$cache->evictQueryRegion($name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
/**
|
||||
* Command to convert a Doctrine 1 schema to a Doctrine 2 mapping file.
|
||||
@@ -37,6 +38,8 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class ConvertDoctrine1SchemaCommand extends Command
|
||||
{
|
||||
@@ -116,6 +119,9 @@ class ConvertDoctrine1SchemaCommand extends Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$ui = new SymfonyStyle($input, $output);
|
||||
$ui->warning('Command ' . $this->getName() . ' is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
|
||||
// Process source directories
|
||||
$fromPaths = array_merge([$input->getArgument('from-path')], $input->getOption('from'));
|
||||
|
||||
@@ -127,6 +133,8 @@ class ConvertDoctrine1SchemaCommand extends Command
|
||||
$numSpaces = $input->getOption('num-spaces');
|
||||
|
||||
$this->convertDoctrine1Schema($fromPaths, $destPath, $toType, $numSpaces, $extend, $output);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -167,6 +167,8 @@ EOT
|
||||
$destPath
|
||||
)
|
||||
);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -38,6 +38,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class GenerateEntitiesCommand extends Command
|
||||
{
|
||||
@@ -87,6 +89,7 @@ EOT
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$ui = new SymfonyStyle($input, $output);
|
||||
$ui->warning('Command ' . $this->getName() . ' is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
|
||||
$em = $this->getHelper('em')->getEntityManager();
|
||||
|
||||
@@ -112,7 +115,7 @@ EOT
|
||||
|
||||
if (empty($metadatas)) {
|
||||
$ui->success('No Metadata Classes to process.');
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$entityGenerator = new EntityGenerator();
|
||||
@@ -138,5 +141,7 @@ EOT
|
||||
// Outputting information message
|
||||
$ui->newLine();
|
||||
$ui->success(sprintf('Entity classes generated to "%s"', $destPath));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class GenerateProxiesCommand extends Command
|
||||
|
||||
if (empty($metadatas)) {
|
||||
$ui->success('No Metadata Classes to process.');
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($metadatas as $metadata) {
|
||||
@@ -104,5 +104,7 @@ class GenerateProxiesCommand extends Command
|
||||
// Outputting information message
|
||||
$ui->newLine();
|
||||
$ui->text(sprintf('Proxy classes generated to "<info>%s</info>"', $destPath));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class GenerateRepositoriesCommand extends Command
|
||||
{
|
||||
@@ -59,6 +61,7 @@ class GenerateRepositoriesCommand extends Command
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$ui = new SymfonyStyle($input, $output);
|
||||
$ui->warning('Command ' . $this->getName() . ' is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
|
||||
$em = $this->getHelper('em')->getEntityManager();
|
||||
|
||||
@@ -84,7 +87,7 @@ class GenerateRepositoriesCommand extends Command
|
||||
|
||||
if (empty($metadatas)) {
|
||||
$ui->success('No Metadata Classes to process.');
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$numRepositories = 0;
|
||||
@@ -104,11 +107,13 @@ class GenerateRepositoriesCommand extends Command
|
||||
|
||||
if ($numRepositories === 0) {
|
||||
$ui->text('No Repository classes were found to be processed.');
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Outputting information message
|
||||
$ui->newLine();
|
||||
$ui->text(sprintf('Repository classes generated to "<info>%s</info>"', $destPath));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,10 @@ use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use const JSON_PRETTY_PRINT;
|
||||
use const JSON_UNESCAPED_SLASHES;
|
||||
use const JSON_UNESCAPED_UNICODE;
|
||||
use function json_encode;
|
||||
|
||||
/**
|
||||
* Show information about mapped entities.
|
||||
@@ -213,7 +217,7 @@ EOT
|
||||
}
|
||||
|
||||
if (is_array($value)) {
|
||||
return json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
return json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
if (is_object($value)) {
|
||||
|
||||
@@ -104,11 +104,13 @@ class RunDqlCommand extends Command
|
||||
|
||||
if ($input->getOption('show-sql')) {
|
||||
$ui->text($query->getSQL());
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$resultSet = $query->execute([], constant($hydrationMode));
|
||||
|
||||
$ui->text(Debug::dump($resultSet, $input->getOption('depth'), true, false));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,8 @@ namespace Doctrine\ORM\Tools\Console;
|
||||
use Doctrine\DBAL\Tools\Console as DBALConsole;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
|
||||
use Doctrine\ORM\Version;
|
||||
use OutOfBoundsException;
|
||||
use PackageVersions\Versions;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
|
||||
@@ -70,10 +71,11 @@ final class ConsoleRunner
|
||||
* @param array $commands
|
||||
*
|
||||
* @return \Symfony\Component\Console\Application
|
||||
* @throws OutOfBoundsException
|
||||
*/
|
||||
public static function createApplication(HelperSet $helperSet, array $commands = []) : Application
|
||||
{
|
||||
$cli = new Application('Doctrine Command Line Interface', Version::VERSION);
|
||||
$cli = new Application('Doctrine Command Line Interface', Versions::getVersion('doctrine/orm'));
|
||||
$cli->setCatchExceptions(true);
|
||||
$cli->setHelperSet($helperSet);
|
||||
self::addCommands($cli);
|
||||
|
||||
@@ -23,7 +23,10 @@ use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\Common\Inflector\Inflector;
|
||||
use Doctrine\DBAL\Types\Type;
|
||||
use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
||||
use const E_USER_DEPRECATED;
|
||||
use function str_replace;
|
||||
use function trigger_error;
|
||||
use function var_export;
|
||||
|
||||
/**
|
||||
* Generic class used to generate PHP5 entity classes from ClassMetadataInfo instances.
|
||||
@@ -45,6 +48,8 @@ use function str_replace;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class EntityGenerator
|
||||
{
|
||||
@@ -335,6 +340,8 @@ public function __construct(<params>)
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
|
||||
|
||||
if (version_compare(\Doctrine\Common\Version::VERSION, '2.2.0-DEV', '>=')) {
|
||||
$this->annotationsPrefix = 'ORM\\';
|
||||
}
|
||||
@@ -1322,9 +1329,17 @@ public function __construct(<params>)
|
||||
continue;
|
||||
}
|
||||
|
||||
$defaultValue = '';
|
||||
if (isset($fieldMapping['options']['default'])) {
|
||||
if ($fieldMapping['type'] === 'boolean' && $fieldMapping['options']['default'] === '1') {
|
||||
$defaultValue = ' = true';
|
||||
} else {
|
||||
$defaultValue = ' = ' . var_export($fieldMapping['options']['default'], true);
|
||||
}
|
||||
}
|
||||
|
||||
$lines[] = $this->generateFieldMappingPropertyDocBlock($fieldMapping, $metadata);
|
||||
$lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldMapping['fieldName']
|
||||
. (isset($fieldMapping['options']['default']) ? ' = ' . var_export($fieldMapping['options']['default'], true) : null) . ";\n";
|
||||
$lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldMapping['fieldName'] . $defaultValue . ";\n";
|
||||
}
|
||||
|
||||
return implode("\n", $lines);
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
namespace Doctrine\ORM\Tools;
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use const E_USER_DEPRECATED;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* Class to generate entity repository classes
|
||||
@@ -31,6 +33,8 @@ use Doctrine\ORM\EntityRepository;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class EntityRepositoryGenerator
|
||||
{
|
||||
@@ -52,6 +56,11 @@ class <className> extends <repositoryName>
|
||||
}
|
||||
';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $fullClassName
|
||||
*
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
|
||||
namespace Doctrine\ORM\Tools\Export;
|
||||
|
||||
use const E_USER_DEPRECATED;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* Class used for converting your mapping information between the
|
||||
* supported formats: yaml, xml, and php/annotation.
|
||||
@@ -26,6 +29,8 @@ namespace Doctrine\ORM\Tools\Export;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class ClassMetadataExporter
|
||||
{
|
||||
@@ -40,6 +45,11 @@ class ClassMetadataExporter
|
||||
'annotation' => Driver\AnnotationExporter::class
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a new exporter driver class under a specified name.
|
||||
*
|
||||
|
||||
@@ -21,6 +21,8 @@ namespace Doctrine\ORM\Tools\Export\Driver;
|
||||
|
||||
use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
||||
use Doctrine\ORM\Tools\Export\ExportException;
|
||||
use const E_USER_DEPRECATED;
|
||||
use function trigger_error;
|
||||
|
||||
/**
|
||||
* Abstract base class which is to be used for the Exporter drivers
|
||||
@@ -29,6 +31,8 @@ use Doctrine\ORM\Tools\Export\ExportException;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
abstract class AbstractExporter
|
||||
{
|
||||
@@ -57,6 +61,8 @@ abstract class AbstractExporter
|
||||
*/
|
||||
public function __construct($dir = null)
|
||||
{
|
||||
@trigger_error(static::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
|
||||
|
||||
$this->_outputDir = $dir;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ use Doctrine\ORM\Tools\EntityGenerator;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class AnnotationExporter extends AbstractExporter
|
||||
{
|
||||
|
||||
@@ -27,6 +27,8 @@ use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class PhpExporter extends AbstractExporter
|
||||
{
|
||||
|
||||
@@ -28,6 +28,8 @@ use SimpleXMLElement;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class XmlExporter extends AbstractExporter
|
||||
{
|
||||
|
||||
@@ -28,6 +28,8 @@ use Doctrine\ORM\Mapping\ClassMetadataInfo;
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class YamlExporter extends AbstractExporter
|
||||
{
|
||||
|
||||
@@ -21,6 +21,9 @@ namespace Doctrine\ORM\Tools\Export;
|
||||
|
||||
use Doctrine\ORM\ORMException;
|
||||
|
||||
/**
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class ExportException extends ORMException
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -139,7 +139,7 @@ class Paginator implements \Countable, \IteratorAggregate
|
||||
$offset = $this->query->getFirstResult();
|
||||
$length = $this->query->getMaxResults();
|
||||
|
||||
if ($this->fetchJoinCollection) {
|
||||
if ($this->fetchJoinCollection && $length !== null) {
|
||||
$subQuery = $this->cloneQuery($this->query);
|
||||
|
||||
if ($this->useOutputWalker($subQuery)) {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
namespace Doctrine\ORM\Tools;
|
||||
|
||||
use Doctrine\ORM\ORMException;
|
||||
use Doctrine\DBAL\Schema\AbstractAsset;
|
||||
use Doctrine\DBAL\Schema\Comparator;
|
||||
use Doctrine\DBAL\Schema\Index;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
@@ -28,6 +28,7 @@ use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector;
|
||||
use Doctrine\DBAL\Schema\Visitor\RemoveNamespacedAssets;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Mapping\ClassMetadata;
|
||||
use Doctrine\ORM\ORMException;
|
||||
use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs;
|
||||
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
|
||||
|
||||
@@ -709,11 +710,6 @@ class SchemaTool
|
||||
}
|
||||
|
||||
$compositeName = $theJoinTable->getName().'.'.implode('', $localColumns);
|
||||
|
||||
if (! $this->platform->supportsForeignKeyConstraints()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($addedFks[$compositeName])
|
||||
&& ($foreignTableName != $addedFks[$compositeName]['foreignTableName']
|
||||
|| 0 < count(array_diff($foreignColumns, $addedFks[$compositeName]['foreignColumns'])))
|
||||
@@ -896,10 +892,8 @@ class SchemaTool
|
||||
*/
|
||||
public function getUpdateSchemaSql(array $classes, $saveMode = false)
|
||||
{
|
||||
$sm = $this->em->getConnection()->getSchemaManager();
|
||||
|
||||
$fromSchema = $sm->createSchema();
|
||||
$toSchema = $this->getSchemaFromMetadata($classes);
|
||||
$fromSchema = $this->createSchemaForComparison($toSchema);
|
||||
|
||||
$comparator = new Comparator();
|
||||
$schemaDiff = $comparator->compare($fromSchema, $toSchema);
|
||||
@@ -910,4 +904,35 @@ class SchemaTool
|
||||
|
||||
return $schemaDiff->toSql($this->platform);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the schema from the database, ensuring tables from the target schema are whitelisted for comparison.
|
||||
*/
|
||||
private function createSchemaForComparison(Schema $toSchema) : Schema
|
||||
{
|
||||
$connection = $this->em->getConnection();
|
||||
$schemaManager = $connection->getSchemaManager();
|
||||
|
||||
// backup schema assets filter
|
||||
$config = $connection->getConfiguration();
|
||||
$previousFilter = $config->getSchemaAssetsFilter();
|
||||
|
||||
if ($previousFilter === null) {
|
||||
return $schemaManager->createSchema();
|
||||
}
|
||||
|
||||
// whitelist assets we already know about in $toSchema, use the existing filter otherwise
|
||||
$config->setSchemaAssetsFilter(static function ($asset) use ($previousFilter, $toSchema) : bool {
|
||||
$assetName = $asset instanceof AbstractAsset ? $asset->getName() : $asset;
|
||||
|
||||
return $toSchema->hasTable($assetName) || $toSchema->hasSequence($assetName) || $previousFilter($asset);
|
||||
});
|
||||
|
||||
try {
|
||||
return $schemaManager->createSchema();
|
||||
} finally {
|
||||
// restore schema assets filter
|
||||
$config->setSchemaAssetsFilter($previousFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1878,7 +1878,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
* @throws OptimisticLockException If the entity uses optimistic locking through a version
|
||||
* attribute and the version check against the managed copy fails.
|
||||
*
|
||||
* @todo Require active transaction!? OptimisticLockException may result in undefined state!?
|
||||
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
public function merge($entity)
|
||||
{
|
||||
@@ -2068,6 +2068,8 @@ class UnitOfWork implements PropertyChangedListener
|
||||
* @param object $entity The entity to detach.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
public function detach($entity)
|
||||
{
|
||||
|
||||
@@ -29,13 +29,15 @@ namespace Doctrine\ORM;
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
*
|
||||
* @deprecated 2.7 This class is being removed from the ORM and won't have any replacement
|
||||
*/
|
||||
class Version
|
||||
{
|
||||
/**
|
||||
* Current Doctrine Version
|
||||
*/
|
||||
const VERSION = '2.6.6';
|
||||
const VERSION = '2.7.1-DEV';
|
||||
|
||||
/**
|
||||
* Compares a Doctrine version with the current one.
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\Mapping;
|
||||
|
||||
use Doctrine\ORM\Mapping\UnderscoreNamingStrategy;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use const CASE_LOWER;
|
||||
|
||||
final class UnderscoreNamingStrategyTest extends TestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/** @test */
|
||||
public function checkDeprecationMessage() : void
|
||||
{
|
||||
$this->expectDeprecationMessage('Creating Doctrine\ORM\Mapping\UnderscoreNamingStrategy without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
new UnderscoreNamingStrategy(CASE_LOWER, false);
|
||||
}
|
||||
}
|
||||
@@ -227,23 +227,6 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase
|
||||
$this->assertFalse($persister->containsKey($collection, 0));
|
||||
}
|
||||
|
||||
public function testInvokeRemoveElement()
|
||||
{
|
||||
$entity = new State("Foo");
|
||||
$element = new State("Bar");
|
||||
$persister = $this->createPersisterDefault();
|
||||
$collection = $this->createCollection($entity);
|
||||
|
||||
$this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']);
|
||||
|
||||
$this->collectionPersister->expects($this->once())
|
||||
->method('removeElement')
|
||||
->with($this->equalTo($collection), $this->equalTo($element))
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$this->assertFalse($persister->removeElement($collection, $element));
|
||||
}
|
||||
|
||||
public function testInvokeGet()
|
||||
{
|
||||
$entity = new State("Foo");
|
||||
|
||||
@@ -5,10 +5,14 @@ namespace Doctrine\Tests\ORM\Decorator;
|
||||
use Doctrine\ORM\Decorator\EntityManagerDecorator;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query\ResultSetMapping;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use function in_array;
|
||||
|
||||
class EntityManagerDecoratorTest extends TestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
const VOID_METHODS = [
|
||||
'persist',
|
||||
'remove',
|
||||
@@ -24,6 +28,12 @@ class EntityManagerDecoratorTest extends TestCase
|
||||
*/
|
||||
private $wrapped;
|
||||
|
||||
/** @before */
|
||||
public function ignoreDeprecationMessagesFromDoctrinePersistence() : void
|
||||
{
|
||||
$this->ignoreDeprecationMessage('The Doctrine\Common\Persistence\ObjectManagerDecorator class is deprecated since doctrine/persistence 1.3 and will be removed in 2.0. Use \Doctrine\Persistence\ObjectManagerDecorator instead.');
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->wrapped = $this->createMock(EntityManagerInterface::class);
|
||||
@@ -83,5 +93,12 @@ class EntityManagerDecoratorTest extends TestCase
|
||||
};
|
||||
|
||||
$this->assertSame($return, $decorator->$method(...$parameters));
|
||||
|
||||
if (in_array($method, ['copy', 'merge', 'detach', 'getHydrator'], true)) {
|
||||
$this->assertHasDeprecationMessages();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->assertNotHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,12 @@ use Doctrine\ORM\UnitOfWork;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\GeoNames\Country;
|
||||
use Doctrine\Tests\OrmTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class EntityManagerTest extends OrmTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @var EntityManager
|
||||
*/
|
||||
@@ -305,4 +308,53 @@ class EntityManagerTest extends OrmTestCase
|
||||
|
||||
$this->assertFalse($this->_em->contains($entity));
|
||||
}
|
||||
|
||||
public function testDeprecatedClearWithArguments() : void
|
||||
{
|
||||
$entity = new Country(456, 'United Kingdom');
|
||||
$this->_em->persist($entity);
|
||||
|
||||
$this->expectDeprecationMessage('Calling Doctrine\ORM\EntityManager::clear() with any arguments to clear specific entities is deprecated and will not be supported in Doctrine ORM 3.0.');
|
||||
$this->_em->clear(Country::class);
|
||||
}
|
||||
|
||||
public function testDeprecatedFlushWithArguments() : void
|
||||
{
|
||||
$entity = new Country(456, 'United Kingdom');
|
||||
$this->_em->persist($entity);
|
||||
|
||||
$this->expectDeprecationMessage('Calling Doctrine\ORM\EntityManager::flush() with any arguments to flush specific entities is deprecated and will not be supported in Doctrine ORM 3.0.');
|
||||
$this->_em->flush($entity);
|
||||
}
|
||||
|
||||
public function testDeprecatedMerge() : void
|
||||
{
|
||||
$entity = new Country(456, 'United Kingdom');
|
||||
$this->_em->persist($entity);
|
||||
|
||||
$this->expectDeprecationMessage('Method Doctrine\ORM\EntityManager::merge() is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
$this->_em->merge($entity);
|
||||
}
|
||||
|
||||
public function testDeprecatedDetach() : void
|
||||
{
|
||||
$entity = new Country(456, 'United Kingdom');
|
||||
$this->_em->persist($entity);
|
||||
|
||||
$this->expectDeprecationMessage('Method Doctrine\ORM\EntityManager::detach() is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
$this->_em->detach($entity);
|
||||
}
|
||||
|
||||
public function testDeprecatedCopy() : void
|
||||
{
|
||||
$entity = new Country(456, 'United Kingdom');
|
||||
$this->_em->persist($entity);
|
||||
|
||||
try {
|
||||
$this->expectDeprecationMessage('Method Doctrine\ORM\EntityManager::copy() is deprecated and will be removed in Doctrine ORM 3.0.');
|
||||
$this->_em->copy($entity);
|
||||
} catch (\BadMethodCallException $e) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,12 @@ use Doctrine\Tests\Models\CMS\CmsComment;
|
||||
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -499,7 +502,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
$this->_em->persist($address);
|
||||
|
||||
$this->_em->flush();
|
||||
$this->_em->detach($address);
|
||||
$this->_em->clear(CmsAddress::class);
|
||||
|
||||
$this->assertFalse($this->_em->contains($address));
|
||||
$this->assertTrue($this->_em->contains($user));
|
||||
@@ -894,6 +897,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$user2 = $this->_em->find(get_class($managedUser), $userId);
|
||||
$this->assertInstanceOf(CmsUser::class, $user2);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testMergeNonPersistedProperties()
|
||||
@@ -921,6 +925,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
$this->assertNull($user2->nonPersistedProperty);
|
||||
$this->assertNull($user2->nonPersistedPropertyObject);
|
||||
$this->assertEquals('active', $user2->status);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testMergeThrowsExceptionIfEntityWithGeneratedIdentifierDoesNotExist()
|
||||
@@ -933,6 +938,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->expectException(EntityNotFoundException::class);
|
||||
$this->_em->merge($user);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -962,6 +968,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
$this->_em->clear();
|
||||
|
||||
$this->assertNull($this->_em->find(get_class($ph), $ph->phonenumber)->getUser());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1073,6 +1080,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
$this->assertTrue($userB->id > 0, 'user b has an id');
|
||||
$this->assertTrue($userC->id > 0, 'user c has an id');
|
||||
$this->assertEquals('UserC', $userC->name, 'name has not changed because we did not flush it');
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1094,6 +1102,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$user = $this->_em->find(get_class($user), $user->id);
|
||||
$this->assertEquals('administrator', $user->status);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1137,6 +1146,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager");
|
||||
$this->assertTrue($otherUser->id > 0, "other user has an id");
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1164,6 +1174,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertTrue($this->_em->contains($address), "Other user is contained in EntityManager");
|
||||
$this->assertTrue($address->id > 0, "other user has an id");
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1213,6 +1224,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
$this->_em->clear();
|
||||
|
||||
$this->assertNull($this->_em->find(get_class($user), $userId));
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1241,6 +1253,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager");
|
||||
$this->assertTrue($otherUser->id > 0, "other user has an id");
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1270,6 +1283,7 @@ class BasicFunctionalTest extends OrmFunctionalTestCase
|
||||
|
||||
$user2 = $this->_em->find(get_class($user2), $user2->id);
|
||||
$this->assertEquals('developer', $user2->status);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,6 +10,7 @@ use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
||||
use Doctrine\Tests\Models\CMS\CmsAddress;
|
||||
use Doctrine\Tests\Models\CMS\CmsArticle;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* Description of DetachedEntityTest
|
||||
@@ -18,6 +19,8 @@ use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
*/
|
||||
class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -44,6 +47,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
$this->assertFalse($user === $user2);
|
||||
$this->assertTrue($this->_em->contains($user2));
|
||||
$this->assertEquals('Roman B.', $user2->name);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testSerializeUnserializeModifyMerge()
|
||||
@@ -105,6 +109,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
$this->assertInstanceOf(CmsPhonenumber::class, $phonenumbers[0]);
|
||||
$this->assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($phonenumbers[0]));
|
||||
$this->assertTrue($this->_em->contains($phonenumbers[0]), "Failed to assert that first phonenumber in collection is contained inside EntityManager persistence context.");
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,6 +161,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
$this->assertInstanceOf(Proxy::class, $managedAddress2->user);
|
||||
$this->assertFalse($managedAddress2->user === $detachedAddress2->user);
|
||||
$this->assertFalse($managedAddress2->user->__isInitialized__);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -181,6 +187,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertInstanceOf(CmsUser::class, $newUser);
|
||||
$this->assertEquals('gblanco', $newUser->username);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,6 +207,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertFalse($this->_em->contains($user));
|
||||
$this->assertFalse($this->_em->getUnitOfWork()->isInIdentityMap($user));
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -223,6 +231,7 @@ class DetachedEntityTest extends OrmFunctionalTestCase
|
||||
$this->expectExceptionMessage('The optimistic lock failed, version 1 was expected, but is actually 2');
|
||||
|
||||
$this->_em->merge($article);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,12 +20,15 @@ use Doctrine\Tests\Models\DDC753\DDC753EntityWithCustomRepository;
|
||||
use Doctrine\Tests\Models\DDC753\DDC753EntityWithDefaultCustomRepository;
|
||||
use Doctrine\Tests\Models\DDC753\DDC753InvalidRepository;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @author robo
|
||||
*/
|
||||
class EntityRepositoryTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -969,6 +972,7 @@ class EntityRepositoryTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertNull($usersIsNull[0]->getEmail());
|
||||
$this->assertNull($usersEqNull[0]->getEmail());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,9 +5,12 @@ namespace Doctrine\Tests\ORM\Functional;
|
||||
use Doctrine\Tests\Models\MixedToOneIdentity\CompositeToOneKeyState;
|
||||
use Doctrine\Tests\Models\MixedToOneIdentity\Country;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class MergeCompositeToOneKeyTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -43,5 +46,6 @@ class MergeCompositeToOneKeyTest extends OrmFunctionalTestCase
|
||||
$this->assertNotSame($state, $merged);
|
||||
$this->assertInstanceOf(Country::class, $merged->country);
|
||||
$this->assertNotSame($country, $merged->country);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,9 +11,12 @@ use Doctrine\ORM\Proxy\Proxy;
|
||||
use Doctrine\ORM\Tools\SchemaTool;
|
||||
use Doctrine\Tests\Models\Generic\DateTimeModel;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class MergeProxiesTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -24,6 +27,12 @@ class MergeProxiesTest extends OrmFunctionalTestCase
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-1392
|
||||
* @group DDC-1734
|
||||
|
||||
@@ -4,9 +4,12 @@ namespace Doctrine\Tests\ORM\Functional;
|
||||
|
||||
use Doctrine\ORM\Tools\ToolsException;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class MergeSharedEntitiesTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -25,6 +28,12 @@ class MergeSharedEntitiesTest extends OrmFunctionalTestCase
|
||||
}
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testMergeSharedNewEntities()
|
||||
{
|
||||
$file = new MSEFile;
|
||||
|
||||
@@ -5,12 +5,15 @@ namespace Doctrine\Tests\ORM\Functional;
|
||||
use Doctrine\Tests\Models\VersionedManyToOne\Article;
|
||||
use Doctrine\Tests\Models\VersionedManyToOne\Category;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group MergeVersionedOneToMany
|
||||
*/
|
||||
class MergeVersionedManyToOneTest extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('versioned_many_to_one');
|
||||
@@ -40,5 +43,6 @@ class MergeVersionedManyToOneTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->_em->flush();
|
||||
$this->assertEquals(2, $articleMerged->version);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class ProxiesLikeEntitiesTest extends OrmFunctionalTestCase
|
||||
$this->assertInstanceOf(CmsUserProxy::class, $uninitializedProxy);
|
||||
|
||||
$this->_em->persist($uninitializedProxy);
|
||||
$this->_em->flush($uninitializedProxy);
|
||||
$this->_em->flush();
|
||||
$this->assertFalse($uninitializedProxy->__isInitialized(), 'Proxy didn\'t get initialized during flush operations');
|
||||
$this->assertEquals($userId, $uninitializedProxy->getId());
|
||||
$this->_em->remove($uninitializedProxy);
|
||||
|
||||
@@ -8,6 +8,7 @@ use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\CMS\CmsArticle;
|
||||
use Doctrine\Common\Cache\ArrayCache;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use function count;
|
||||
|
||||
/**
|
||||
* ResultCacheTest
|
||||
@@ -89,7 +90,7 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$this->assertTrue($cache->contains('testing_result_cache_id'));
|
||||
}
|
||||
|
||||
public function testUseResultCache()
|
||||
public function testUseResultCacheTrue()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
@@ -104,6 +105,22 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
}
|
||||
|
||||
public function testUseResultCacheFalse()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->setResultCacheId('testing_result_cache_id');
|
||||
$query->useResultCache(false);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertFalse($cache->contains('testing_result_cache_id'));
|
||||
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @group DDC-1026
|
||||
*/
|
||||
@@ -113,24 +130,99 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$sqlCount = count($this->_sqlLoggerStack->queries);
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux WHERE ux.id = ?1');
|
||||
|
||||
$query->setParameter(1, 1);
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->useResultCache(true);
|
||||
$query->getResult();
|
||||
|
||||
$query->setParameter(1, 2);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "Two non-cached queries.");
|
||||
|
||||
// these queries should result in cache miss:
|
||||
$query->setParameter(1, 1);
|
||||
$query->useResultCache(true);
|
||||
$query->getResult();
|
||||
|
||||
$query->setParameter(1, 2);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "The next two sql should have been cached, but were not.");
|
||||
$this->assertCount(
|
||||
$sqlCount + 2,
|
||||
$this->_sqlLoggerStack->queries,
|
||||
'Two non-cached queries.'
|
||||
);
|
||||
|
||||
// these two queries should actually be cached, as they repeat previous ones:
|
||||
$query->setParameter(1, 1);
|
||||
$query->getResult();
|
||||
$query->setParameter(1, 2);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertCount(
|
||||
$sqlCount + 2,
|
||||
$this->_sqlLoggerStack->queries,
|
||||
'The next two sql queries should have been cached, but were not.'
|
||||
);
|
||||
}
|
||||
|
||||
public function testEnableResultCache() : void
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
|
||||
$query->enableResultCache();
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->setResultCacheId('testing_result_cache_id');
|
||||
$query->getResult();
|
||||
|
||||
$this->assertTrue($cache->contains('testing_result_cache_id'));
|
||||
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-1026
|
||||
*/
|
||||
public function testEnableResultCacheParams() : void
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$sqlCount = count($this->_sqlLoggerStack->queries);
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux WHERE ux.id = ?1');
|
||||
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->enableResultCache();
|
||||
|
||||
// these queries should result in cache miss:
|
||||
$query->setParameter(1, 1);
|
||||
$query->getResult();
|
||||
$query->setParameter(1, 2);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertCount(
|
||||
$sqlCount + 2,
|
||||
$this->_sqlLoggerStack->queries,
|
||||
'Two non-cached queries.'
|
||||
);
|
||||
|
||||
// these two queries should actually be cached, as they repeat previous ones:
|
||||
$query->setParameter(1, 1);
|
||||
$query->getResult();
|
||||
$query->setParameter(1, 2);
|
||||
$query->getResult();
|
||||
|
||||
$this->assertCount(
|
||||
$sqlCount + 2,
|
||||
$this->_sqlLoggerStack->queries,
|
||||
'The next two sql queries should have been cached, but were not.'
|
||||
);
|
||||
}
|
||||
|
||||
public function testDisableResultCache() : void
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->setResultCacheId('testing_result_cache_id');
|
||||
$query->disableResultCache();
|
||||
$query->getResult();
|
||||
|
||||
$this->assertFalse($cache->contains('testing_result_cache_id'));
|
||||
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
}
|
||||
|
||||
public function testNativeQueryResultCaching()
|
||||
@@ -143,7 +235,7 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm);
|
||||
|
||||
$query->setParameter(1, 10);
|
||||
$query->setResultCacheDriver($cache)->useResultCache(true);
|
||||
$query->setResultCacheDriver($cache)->enableResultCache();
|
||||
|
||||
$this->assertEquals(0, $this->getCacheSize($cache));
|
||||
|
||||
@@ -229,7 +321,7 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
|
||||
$cache = new ArrayCache();
|
||||
|
||||
$query->setResultCacheDriver($cache)->useResultCache(true);
|
||||
$query->setResultCacheDriver($cache)->enableResultCache();
|
||||
|
||||
$articles = $query->getResult();
|
||||
|
||||
@@ -241,7 +333,7 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$query2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1');
|
||||
$query2->setParameter(1, $user1);
|
||||
|
||||
$query2->setResultCacheDriver($cache)->useResultCache(true);
|
||||
$query2->setResultCacheDriver($cache)->enableResultCache();
|
||||
|
||||
$articles = $query2->getResult();
|
||||
|
||||
@@ -251,7 +343,7 @@ class ResultCacheTest extends OrmFunctionalTestCase
|
||||
$query3 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1');
|
||||
$query3->setParameter(1, $user2);
|
||||
|
||||
$query3->setResultCacheDriver($cache)->useResultCache(true);
|
||||
$query3->setResultCacheDriver($cache)->enableResultCache();
|
||||
|
||||
$articles = $query3->getResult();
|
||||
|
||||
|
||||
@@ -9,12 +9,15 @@ use Doctrine\Tests\Models\DDC117\DDC117Translation;
|
||||
use Doctrine\Tests\Models\DDC117\DDC117ApproveChanges;
|
||||
use Doctrine\Tests\Models\DDC117\DDC117Editor;
|
||||
use Doctrine\Tests\Models\DDC117\DDC117Link;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-117
|
||||
*/
|
||||
class DDC117Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
private $article1;
|
||||
private $article2;
|
||||
private $reference;
|
||||
@@ -435,11 +438,12 @@ class DDC117Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$refRep = $this->_em->find(DDC117Reference::class, $idCriteria);
|
||||
|
||||
$this->_em->detach($refRep);
|
||||
$this->_em->clear(DDC117Reference::class);
|
||||
$refRep = $this->_em->merge($refRep);
|
||||
|
||||
$this->assertEquals($this->article1->id(), $refRep->source()->id());
|
||||
$this->assertEquals($this->article2->id(), $refRep->target()->id());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,12 +4,15 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\Models\CMS\CmsGroup;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1276
|
||||
*/
|
||||
class DDC1276Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -43,5 +46,6 @@ class DDC1276Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->assertEquals(2, count($user->groups));
|
||||
|
||||
$this->_em->flush();
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,15 @@
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1383
|
||||
*/
|
||||
class DDC1383Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
@@ -47,6 +51,7 @@ class DDC1383Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
// Parent is NOT instance of entity
|
||||
self::assertTrue($parent instanceof DDC1383Entity,
|
||||
"Entity class is " . get_class($parent) . ', "DDC1383Entity" was expected');
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\ORM\UnitOfWork;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1392
|
||||
*/
|
||||
class DDC1392Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
@@ -61,6 +64,7 @@ class DDC1392Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$result = $q->getSingleScalarResult();
|
||||
|
||||
self::assertEquals(1, $result);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1509
|
||||
*/
|
||||
class DDC1509Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
@@ -48,6 +51,7 @@ class DDC1509Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$this->assertNotNull($pic->getThumbnail());
|
||||
$this->assertNotNull($pic->getFile());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1594
|
||||
*/
|
||||
class DDC1594Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -37,5 +40,6 @@ class DDC1594Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->assertNotSame($mergedUser, $detachedUser);
|
||||
$this->assertEquals('bar', $detachedUser->getName());
|
||||
$this->assertEquals('bar', $mergedUser->getName());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ class DDC1685Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$dql = "SELECT ad FROM Doctrine\Tests\Models\DDC117\DDC117ArticleDetails ad";
|
||||
$query = $this->_em->createQuery($dql);
|
||||
$query->setMaxResults(1);
|
||||
|
||||
$this->paginator = new Paginator($query);
|
||||
}
|
||||
|
||||
@@ -4,9 +4,12 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\ORM\Proxy\Proxy;
|
||||
use Doctrine\Tests\Models\CMS\CmsGroup;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class DDC1734Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -16,6 +19,12 @@ class DDC1734Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* This test is DDC-1734 minus the serialization, i.e. it works
|
||||
*
|
||||
|
||||
@@ -26,7 +26,7 @@ class DDC2106Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$entity = new DDC2106Entity();
|
||||
$this->_em->persist($entity);
|
||||
$this->_em->flush();
|
||||
$this->_em->detach($entity);
|
||||
$this->_em->clear(DDC2106Entity::class);
|
||||
$entity = $this->_em->getRepository(DDC2106Entity::class)->findOneBy([]);
|
||||
|
||||
// ... and a managed entity without id
|
||||
|
||||
@@ -14,9 +14,6 @@ class DDC2138Test extends OrmFunctionalTestCase
|
||||
public function testForeignKeyOnSTIWithMultipleMapping()
|
||||
{
|
||||
$em = $this->_em;
|
||||
if (! $em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
|
||||
$this->markTestSkipped('Platform does not support foreign keys.');
|
||||
}
|
||||
$schemaTool = new SchemaTool($em);
|
||||
|
||||
$classes = [
|
||||
|
||||
@@ -7,12 +7,15 @@ use Doctrine\Common\PropertyChangedListener;
|
||||
use Doctrine\Common\Proxy\Proxy;
|
||||
use Doctrine\ORM\Tools\ToolsException;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-2230
|
||||
*/
|
||||
class DDC2230Test extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
@@ -48,6 +51,7 @@ class DDC2230Test extends OrmFunctionalTestCase
|
||||
|
||||
$this->assertInstanceOf(Proxy::class, $address);
|
||||
$this->assertFalse($address->__isInitialized());
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testNotifyTrackingCalledOnProxyInitialization()
|
||||
@@ -67,6 +71,7 @@ class DDC2230Test extends OrmFunctionalTestCase
|
||||
$addressProxy->__load();
|
||||
|
||||
$this->assertSame($this->_em->getUnitOfWork(), $addressProxy->listener);
|
||||
$this->assertNotHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,12 +5,15 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
use Doctrine\ORM\UnitOfWork;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\CMS\CmsArticle;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-2409
|
||||
*/
|
||||
class DDC2409Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -53,8 +56,8 @@ class DDC2409Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($article));
|
||||
$this->assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user));
|
||||
|
||||
$em->detach($user);
|
||||
$em->detach($article);
|
||||
$em->clear(CmsUser::class);
|
||||
$em->clear(CmsArticle::class);
|
||||
|
||||
$userMerged = $em->merge($user);
|
||||
$articleMerged = $em->merge($article);
|
||||
@@ -68,5 +71,6 @@ class DDC2409Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->assertNotSame($article, $articleMerged);
|
||||
$this->assertNotSame($userMerged, $articleMerged->user);
|
||||
$this->assertSame($user, $articleMerged->user);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,15 @@
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-2645
|
||||
*/
|
||||
class DDC2645Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function testIssue()
|
||||
{
|
||||
$bar = new DDC2645Bar;
|
||||
@@ -22,6 +26,7 @@ class DDC2645Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$this->assertSame($foo, $foo3);
|
||||
$this->assertEquals('Bar', $foo->name);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class DDC2790Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
// (and consequently also triggers preUpdate/postUpdate for the entity in question)
|
||||
$entity->name = 'Robin';
|
||||
|
||||
$this->_em->flush($entity);
|
||||
$this->_em->flush();
|
||||
|
||||
$qb = $this->_em->createQueryBuilder();
|
||||
$qb->from(get_class($entity), 'c');
|
||||
|
||||
@@ -40,7 +40,7 @@ class DDC2984Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$user->applyName('Alex');
|
||||
|
||||
$this->_em->persist($user);
|
||||
$this->_em->flush($user);
|
||||
$this->_em->flush();
|
||||
|
||||
$repository = $this->_em->getRepository(__NAMESPACE__ . "\DDC2984User");
|
||||
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
use Doctrine\Tests\Models\DDC3699\DDC3699RelationOne;
|
||||
use Doctrine\Tests\Models\DDC3699\DDC3699RelationMany;
|
||||
use Doctrine\Tests\Models\DDC3699\DDC3699Child;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-3699
|
||||
*/
|
||||
class DDC3597Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('ddc3699');
|
||||
@@ -16,6 +19,12 @@ class DDC3597Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-3699
|
||||
*/
|
||||
|
||||
@@ -6,12 +6,15 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
use Doctrine\ORM\Mapping\ClassMetadata;
|
||||
use Doctrine\Tests\Models\DDC3711\DDC3711EntityA;
|
||||
use Doctrine\Tests\ORM\Mapping\YamlMappingDriverTest;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @author Marc Pantel <pantel.m@gmail.com>
|
||||
*/
|
||||
class DDC3711Test extends YamlMappingDriverTest
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function testCompositeKeyForJoinTableInManyToManyCreation()
|
||||
{
|
||||
$yamlDriver = $this->_loadDriver();
|
||||
@@ -26,5 +29,6 @@ class DDC3711Test extends YamlMappingDriverTest
|
||||
|
||||
$this->assertEquals(['link_a_id1' => "id1", 'link_a_id2' => "id2"], $entityA->associationMappings['entityB']['relationToSourceKeyColumns']);
|
||||
$this->assertEquals(['link_b_id1' => "id1", 'link_b_id2' => "id2"], $entityA->associationMappings['entityB']['relationToTargetKeyColumns']);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\CMS\CmsGroup;
|
||||
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* ----------------- !! NOTE !! --------------------
|
||||
@@ -19,6 +20,8 @@ use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
||||
*/
|
||||
class DDC501Test extends OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -80,6 +83,7 @@ class DDC501Test extends OrmFunctionalTestCase
|
||||
// This works fine as long as cmUser::groups doesn't cascade "merge"
|
||||
// Otherwise group memberships are physically deleted now!
|
||||
$this->assertEquals(2, count($userClone->getGroups()));
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
protected function createAndPersistUser()
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class DDC518Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
@@ -31,5 +35,6 @@ class DDC518Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$managedArticle = $this->_em->merge($article);
|
||||
|
||||
$this->assertSame($article->user, $managedArticle->user);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,12 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\ORM\PersistentCollection;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class DDC729Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
@@ -24,6 +27,12 @@ class DDC729Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
}
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testMergeManyToMany()
|
||||
{
|
||||
$a = new DDC729A();
|
||||
|
||||
@@ -5,9 +5,11 @@ namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Tests\Models\CMS\CmsUser;
|
||||
use Doctrine\Tests\Models\CMS\CmsGroup;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
class DDC758Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
@@ -17,6 +19,12 @@ class DDC758Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to set cascade to merge only
|
||||
*/
|
||||
|
||||
123
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7079Test.php
Normal file
123
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7079Test.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService;
|
||||
use Doctrine\DBAL\Platforms\AbstractPlatform;
|
||||
use Doctrine\ORM\Mapping\ClassMetadata;
|
||||
use Doctrine\ORM\Mapping\DefaultQuoteStrategy;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
|
||||
/**
|
||||
* @group GH7079
|
||||
*/
|
||||
final class GH7079Test extends OrmFunctionalTestCase
|
||||
{
|
||||
/** @var DefaultQuoteStrategy */
|
||||
private $strategy;
|
||||
|
||||
/** @var AbstractPlatform */
|
||||
private $platform;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
protected function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->platform = $this->_em->getConnection()->getDatabasePlatform();
|
||||
$this->strategy = new DefaultQuoteStrategy();
|
||||
}
|
||||
|
||||
public function testGetTableName() : void
|
||||
{
|
||||
$table = [
|
||||
'name' => 'cms_user',
|
||||
'schema' => 'cms',
|
||||
];
|
||||
|
||||
$cm = $this->createClassMetadata(GH7079CmsUser::class);
|
||||
$cm->setPrimaryTable($table);
|
||||
|
||||
self::assertEquals($this->getTableFullName($table), $this->strategy->getTableName($cm, $this->platform));
|
||||
}
|
||||
|
||||
public function testJoinTableName() : void
|
||||
{
|
||||
$table = [
|
||||
'name' => 'cmsaddress_cmsuser',
|
||||
'schema' => 'cms',
|
||||
];
|
||||
|
||||
$cm = $this->createClassMetadata(GH7079CmsAddress::class);
|
||||
$cm->mapManyToMany(
|
||||
[
|
||||
'fieldName' => 'user',
|
||||
'targetEntity' => 'DDC7079CmsUser',
|
||||
'inversedBy' => 'users',
|
||||
'joinTable' => $table,
|
||||
]
|
||||
);
|
||||
|
||||
self::assertEquals(
|
||||
$this->getTableFullName($table),
|
||||
$this->strategy->getJoinTableName($cm->associationMappings['user'], $cm, $this->platform)
|
||||
);
|
||||
}
|
||||
|
||||
private function getTableFullName(array $table) : string
|
||||
{
|
||||
$join = '.';
|
||||
if (! $this->platform->supportsSchemas() && $this->platform->canEmulateSchemas()) {
|
||||
$join = '__';
|
||||
}
|
||||
|
||||
return $table['schema'] . $join . $table['name'];
|
||||
}
|
||||
|
||||
private function createClassMetadata(string $className) : ClassMetadata
|
||||
{
|
||||
$cm = new ClassMetadata($className);
|
||||
$cm->initializeReflection(new RuntimeReflectionService());
|
||||
|
||||
return $cm;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
* @Table(name="cms_users", schema="cms")
|
||||
*/
|
||||
class GH7079CmsUser
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/** @OneToOne(targetEntity=GH7079CmsAddress::class, mappedBy="user", cascade={"persist"}, orphanRemoval=true) */
|
||||
public $address;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
* @Table(name="cms_addresses", schema="cms")
|
||||
*/
|
||||
class GH7079CmsAddress
|
||||
{
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity=GH7079CmsUser::class, inversedBy="address")
|
||||
* @JoinColumn(referencedColumnName="id")
|
||||
*/
|
||||
public $user;
|
||||
}
|
||||
92
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7505Test.php
Normal file
92
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7505Test.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
|
||||
/**
|
||||
* @group GH7505
|
||||
*/
|
||||
final class GH7505Test extends OrmFunctionalTestCase
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
protected function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->setUpEntitySchema([
|
||||
GH7505AbstractResponse::class,
|
||||
GH7505ArrayResponse::class,
|
||||
GH7505TextResponse::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testSimpleArrayTypeHydratedCorrectly() : void
|
||||
{
|
||||
$arrayResponse = new GH7505ArrayResponse();
|
||||
$this->_em->persist($arrayResponse);
|
||||
|
||||
$textResponse = new GH7505TextResponse();
|
||||
$this->_em->persist($textResponse);
|
||||
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$repository = $this->_em->getRepository(GH7505AbstractResponse::class);
|
||||
|
||||
/** @var GH7505ArrayResponse $arrayResponse */
|
||||
$arrayResponse = $repository->find($arrayResponse->id);
|
||||
self::assertSame([], $arrayResponse->value);
|
||||
|
||||
/** @var GH7505TextResponse $textResponse */
|
||||
$textResponse = $repository->find($textResponse->id);
|
||||
self::assertNull($textResponse->value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity()
|
||||
* @Table(name="gh7505_responses")
|
||||
* @InheritanceType("SINGLE_TABLE")
|
||||
* @DiscriminatorColumn(name="discr", type="string")
|
||||
* @DiscriminatorMap({
|
||||
* "array" = GH7505ArrayResponse::class,
|
||||
* "text" = GH7505TextResponse::class,
|
||||
* })
|
||||
*/
|
||||
abstract class GH7505AbstractResponse
|
||||
{
|
||||
/**
|
||||
* @Id @GeneratedValue
|
||||
* @Column(type="integer")
|
||||
*/
|
||||
public $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity()
|
||||
*/
|
||||
class GH7505ArrayResponse extends GH7505AbstractResponse
|
||||
{
|
||||
/**
|
||||
* @Column(name="value_array", type="simple_array")
|
||||
* @var array
|
||||
*/
|
||||
public $value = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity()
|
||||
*/
|
||||
class GH7505TextResponse extends GH7505AbstractResponse
|
||||
{
|
||||
/**
|
||||
* @Column(name="value_string", type="string")
|
||||
* @var string|null
|
||||
*/
|
||||
public $value;
|
||||
}
|
||||
63
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7829Test.php
Normal file
63
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7829Test.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\DBAL\Logging\DebugStack;
|
||||
use Doctrine\ORM\Tools\Pagination\Paginator;
|
||||
use Doctrine\Tests\Models\CMS\CmsArticle;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
|
||||
/**
|
||||
* @group GH7829
|
||||
*/
|
||||
final class GH7829Test extends OrmFunctionalTestCase
|
||||
{
|
||||
/** @var DebugStack */
|
||||
private $logger;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->useModelSet('cms');
|
||||
parent::setUp();
|
||||
|
||||
$article = new CmsArticle();
|
||||
|
||||
$article->topic = 'Skip Limit Subquery';
|
||||
$article->text = 'Skip Limit Subquery if not required.';
|
||||
|
||||
$this->_em->persist($article);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->_em->getConnection()->getConfiguration()->setSQLLogger($this->logger = new DebugStack());
|
||||
}
|
||||
|
||||
public function testPaginatorWithLimitSubquery() : void
|
||||
{
|
||||
$query = $this->_em->createQuery('SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a');
|
||||
$query->setMaxResults(1);
|
||||
|
||||
$paginator = new Paginator($query, true);
|
||||
$paginator->setUseOutputWalkers(false);
|
||||
|
||||
$paginator->count();
|
||||
$paginator->getIterator();
|
||||
|
||||
$this->assertCount(3, $this->logger->queries);
|
||||
}
|
||||
|
||||
public function testPaginatorWithLimitSubquerySkipped() : void
|
||||
{
|
||||
$query = $this->_em->createQuery('SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a');
|
||||
|
||||
$paginator = new Paginator($query, true);
|
||||
$paginator->setUseOutputWalkers(false);
|
||||
|
||||
$paginator->count();
|
||||
$paginator->getIterator();
|
||||
|
||||
$this->assertCount(2, $this->logger->queries);
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
|
||||
/**
|
||||
* @group GH7841
|
||||
*/
|
||||
class GH7841Test extends OrmFunctionalTestCase
|
||||
{
|
||||
public function testForeignKeysNotCompare() : void
|
||||
{
|
||||
if ($this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
|
||||
$this->markTestSkipped('Test for platforms without foreign keys support');
|
||||
}
|
||||
$class = $this->_em->getClassMetadata(GH7841Child::class);
|
||||
$this->_schemaTool->updateSchema([$class], true);
|
||||
$diff = $this->_schemaTool->getUpdateSchemaSql([$class], true);
|
||||
|
||||
self::assertEmpty($diff);
|
||||
|
||||
$this->_schemaTool->dropSchema([$class]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH7841Parent
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @OneToMany(targetEntity=GH7841Child::class, mappedBy="parent") */
|
||||
public $children;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->children = new ArrayCollection();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH7841Child
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @ManyToOne(targetEntity=GH7841Parent::class) */
|
||||
public $parent;
|
||||
}
|
||||
99
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7864Test.php
Normal file
99
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7864Test.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use function array_values;
|
||||
|
||||
/**
|
||||
* @group gh7864
|
||||
*/
|
||||
class GH7864Test extends OrmFunctionalTestCase
|
||||
{
|
||||
protected function setUp() : void
|
||||
{
|
||||
parent::setup();
|
||||
|
||||
$this->setUpEntitySchema(
|
||||
[
|
||||
GH7864User::class,
|
||||
GH7864Tweet::class,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function testExtraLazyRemoveElement()
|
||||
{
|
||||
$user = new GH7864User();
|
||||
$user->name = 'test';
|
||||
|
||||
$tweet1 = new GH7864Tweet();
|
||||
$tweet1->content = 'Hello World!';
|
||||
$user->addTweet($tweet1);
|
||||
|
||||
$tweet2 = new GH7864Tweet();
|
||||
$tweet2->content = 'Goodbye, and thanks for all the fish';
|
||||
$user->addTweet($tweet2);
|
||||
|
||||
$this->_em->persist($user);
|
||||
$this->_em->persist($tweet1);
|
||||
$this->_em->persist($tweet2);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$user = $this->_em->find(GH7864User::class, $user->id);
|
||||
$tweet = $this->_em->find(GH7864Tweet::class, $tweet1->id);
|
||||
|
||||
$user->tweets->removeElement($tweet);
|
||||
|
||||
$tweets = $user->tweets->map(static function (GH7864Tweet $tweet) {
|
||||
return $tweet->content;
|
||||
});
|
||||
|
||||
$this->assertEquals(['Goodbye, and thanks for all the fish'], array_values($tweets->toArray()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH7864User
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @Column(type="string") */
|
||||
public $name;
|
||||
|
||||
/** @OneToMany(targetEntity="GH7864Tweet", mappedBy="user", fetch="EXTRA_LAZY") */
|
||||
public $tweets;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->tweets = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function addTweet(GH7864Tweet $tweet)
|
||||
{
|
||||
$tweet->user = $this;
|
||||
$this->tweets->add($tweet);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH7864Tweet
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @Column(type="string") */
|
||||
public $content;
|
||||
|
||||
/** @ManyToOne(targetEntity="GH7864User", inversedBy="tweets") */
|
||||
public $user;
|
||||
}
|
||||
136
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7875Test.php
Normal file
136
tests/Doctrine/Tests/ORM/Functional/Ticket/GH7875Test.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\DBAL\Configuration;
|
||||
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
|
||||
use Doctrine\ORM\Tools\SchemaTool;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
use function array_filter;
|
||||
use function current;
|
||||
use function method_exists;
|
||||
use function sprintf;
|
||||
use function strpos;
|
||||
|
||||
/** @group GH7875 */
|
||||
final class GH7875Test extends OrmFunctionalTestCase
|
||||
{
|
||||
/** @after */
|
||||
public function cleanUpSchema() : void
|
||||
{
|
||||
$connection = $this->_em->getConnection();
|
||||
|
||||
$connection->exec('DROP TABLE IF EXISTS gh7875_my_entity');
|
||||
$connection->exec('DROP TABLE IF EXISTS gh7875_my_other_entity');
|
||||
|
||||
if ($connection->getDatabasePlatform() instanceof PostgreSqlPlatform) {
|
||||
$connection->exec('DROP SEQUENCE IF EXISTS gh7875_my_entity_id_seq');
|
||||
$connection->exec('DROP SEQUENCE IF EXISTS gh7875_my_other_entity_id_seq');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $sqls
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
private function filterCreateTable(array $sqls, string $tableName) : array
|
||||
{
|
||||
return array_filter($sqls, static function (string $sql) use ($tableName) : bool {
|
||||
return strpos($sql, sprintf('CREATE TABLE %s (', $tableName)) === 0;
|
||||
});
|
||||
}
|
||||
|
||||
public function testUpdateSchemaSql() : void
|
||||
{
|
||||
$classes = [$this->_em->getClassMetadata(GH7875MyEntity::class)];
|
||||
|
||||
$tool = new SchemaTool($this->_em);
|
||||
$sqls = $this->filterCreateTable($tool->getUpdateSchemaSql($classes), 'gh7875_my_entity');
|
||||
|
||||
self::assertCount(1, $sqls);
|
||||
|
||||
$this->_em->getConnection()->exec(current($sqls));
|
||||
|
||||
$sqls = array_filter($tool->getUpdateSchemaSql($classes), static function (string $sql) : bool {
|
||||
return strpos($sql, ' gh7875_my_entity ') !== false;
|
||||
});
|
||||
|
||||
self::assertSame([], $sqls);
|
||||
|
||||
$classes[] = $this->_em->getClassMetadata(GH7875MyOtherEntity::class);
|
||||
|
||||
$sqls = $tool->getUpdateSchemaSql($classes);
|
||||
|
||||
self::assertCount(0, $this->filterCreateTable($sqls, 'gh7875_my_entity'));
|
||||
self::assertCount(1, $this->filterCreateTable($sqls, 'gh7875_my_other_entity'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<array<string|callable|null>>
|
||||
*/
|
||||
public function provideUpdateSchemaSqlWithSchemaAssetFilter() : array
|
||||
{
|
||||
return [
|
||||
['/^(?!my_enti)/', null],
|
||||
[
|
||||
null,
|
||||
static function ($assetName) : bool {
|
||||
return $assetName !== 'gh7875_my_entity';
|
||||
},
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/** @dataProvider provideUpdateSchemaSqlWithSchemaAssetFilter */
|
||||
public function testUpdateSchemaSqlWithSchemaAssetFilter(?string $filterRegex, ?callable $filterCallback) : void
|
||||
{
|
||||
if ($filterRegex && ! method_exists(Configuration::class, 'setFilterSchemaAssetsExpression')) {
|
||||
self::markTestSkipped(sprintf('Test require %s::setFilterSchemaAssetsExpression method', Configuration::class));
|
||||
}
|
||||
|
||||
$classes = [$this->_em->getClassMetadata(GH7875MyEntity::class)];
|
||||
|
||||
$tool = new SchemaTool($this->_em);
|
||||
$tool->createSchema($classes);
|
||||
|
||||
$config = $this->_em->getConnection()->getConfiguration();
|
||||
if ($filterRegex) {
|
||||
$config->setFilterSchemaAssetsExpression($filterRegex);
|
||||
} else {
|
||||
$config->setSchemaAssetsFilter($filterCallback);
|
||||
}
|
||||
|
||||
$previousFilter = $config->getSchemaAssetsFilter();
|
||||
|
||||
$sqls = $tool->getUpdateSchemaSql($classes);
|
||||
$sqls = array_filter($sqls, static function (string $sql) : bool {
|
||||
return strpos($sql, ' gh7875_my_entity ') !== false;
|
||||
});
|
||||
|
||||
self::assertCount(0, $sqls);
|
||||
self::assertSame($previousFilter, $config->getSchemaAssetsFilter());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
* @Table(name="gh7875_my_entity")
|
||||
*/
|
||||
class GH7875MyEntity
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
|
||||
public $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
* @Table(name="gh7875_my_other_entity")
|
||||
*/
|
||||
class GH7875MyOtherEntity
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
|
||||
public $id;
|
||||
}
|
||||
@@ -141,7 +141,7 @@ class ValueObjectsTest extends OrmFunctionalTestCase
|
||||
|
||||
$person = new DDC93Person('Johannes', new DDC93Address('Moo', '12345', 'Karlsruhe', new DDC93Country('Germany')));
|
||||
$this->_em->persist($person);
|
||||
$this->_em->flush($person);
|
||||
$this->_em->flush();
|
||||
|
||||
// SELECT
|
||||
$selectDql = "SELECT p FROM " . __NAMESPACE__ ."\\DDC93Person p WHERE p.address.city = :city AND p.address.country.name = :country";
|
||||
@@ -184,7 +184,7 @@ class ValueObjectsTest extends OrmFunctionalTestCase
|
||||
{
|
||||
$person = new DDC93Person('Karl', new DDC93Address('Foo', '12345', 'Gosport', new DDC93Country('England')));
|
||||
$this->_em->persist($person);
|
||||
$this->_em->flush($person);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
// Prove that the entity was persisted correctly.
|
||||
@@ -254,7 +254,7 @@ class ValueObjectsTest extends OrmFunctionalTestCase
|
||||
{
|
||||
$car = new DDC93Car(new DDC93Address('Foo', '12345', 'Asdf'));
|
||||
$this->_em->persist($car);
|
||||
$this->_em->flush($car);
|
||||
$this->_em->flush();
|
||||
|
||||
$reloadedCar = $this->_em->find(DDC93Car::class, $car->id);
|
||||
$this->assertEquals($car, $reloadedCar);
|
||||
@@ -328,6 +328,11 @@ class ValueObjectsTest extends OrmFunctionalTestCase
|
||||
['DDCNestingEmbeddable1', 'DDCNestingEmbeddable4'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testEmbeddableIsNotTransient()
|
||||
{
|
||||
$this->assertFalse($this->_em->getMetadataFactory()->isTransient(DDC93Address::class));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
namespace Doctrine\Tests\ORM\Mapping\Symfony;
|
||||
|
||||
use \Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
|
||||
/**
|
||||
* @group DDC-1418
|
||||
*/
|
||||
class YamlDriverTest extends AbstractDriverTest
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function getFileExtension()
|
||||
{
|
||||
return '.orm.yml';
|
||||
@@ -17,6 +20,7 @@ class YamlDriverTest extends AbstractDriverTest
|
||||
protected function getDriver(array $paths = [])
|
||||
{
|
||||
$driver = new SimplifiedYamlDriver(array_flip($paths));
|
||||
$this->expectDeprecationMessage('YAML mapping driver is deprecated and will be removed in Doctrine ORM 3.0, please migrate to annotation or XML driver.');
|
||||
|
||||
return $driver;
|
||||
}
|
||||
|
||||
@@ -8,10 +8,13 @@ use Doctrine\ORM\Mapping\Driver\YamlDriver;
|
||||
use Doctrine\Tests\Models\DirectoryTree\Directory;
|
||||
use Doctrine\Tests\Models\DirectoryTree\File;
|
||||
use Doctrine\Tests\Models\Generic\SerializationModel;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
|
||||
class YamlMappingDriverTest extends AbstractMappingDriverTest
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
protected function _loadDriver()
|
||||
{
|
||||
if (!class_exists(Yaml::class, true)) {
|
||||
@@ -43,6 +46,7 @@ class YamlMappingDriverTest extends AbstractMappingDriverTest
|
||||
$classDirectory = new ClassMetadata(Directory::class);
|
||||
$classDirectory = $factory->getMetadataFor(Directory::class);
|
||||
$this->assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,6 +80,13 @@ class YamlMappingDriverTest extends AbstractMappingDriverTest
|
||||
|
||||
$this->assertEquals(255, $nameField['length']);
|
||||
$this->assertEquals(255, $valueField['length']);
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testDeprecation() : void
|
||||
{
|
||||
$this->createClassMetadata(DDC2069Entity::class);
|
||||
$this->expectDeprecationMessage('YAML mapping driver is deprecated and will be removed in Doctrine ORM 3.0, please migrate to annotation or XML driver.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -134,6 +134,8 @@ class LanguageRecognitionTest extends OrmTestCase
|
||||
['SELECT \'foo\' AS foo\\\\bar FROM Doctrine\Tests\Models\CMS\CmsUser u'],
|
||||
['SELECT \'foo\' AS foo: FROM Doctrine\Tests\Models\CMS\CmsUser u'],
|
||||
['SELECT \'foo\' AS foo:bar FROM Doctrine\Tests\Models\CMS\CmsUser u'],
|
||||
|
||||
['0'],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -134,6 +134,24 @@ class ParserTest extends OrmTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* PHP 7.4 would fail with Notice: Trying to access array offset on value of type null.
|
||||
*
|
||||
* @see https://github.com/doctrine/orm/pull/7934
|
||||
*
|
||||
* @group GH7934
|
||||
*/
|
||||
public function testNullLookahead() : void
|
||||
{
|
||||
$query = new Query($this->_getTestEntityManager());
|
||||
$query->setDQL('SELECT CURRENT_TIMESTAMP()');
|
||||
|
||||
$parser = new Parser($query);
|
||||
|
||||
$this->expectException(QueryException::class);
|
||||
$parser->match(Lexer::T_SELECT);
|
||||
}
|
||||
|
||||
private function createParser($dql)
|
||||
{
|
||||
$query = new Query($this->_getTestEntityManager());
|
||||
|
||||
@@ -128,7 +128,7 @@ class QueryTest extends OrmTestCase
|
||||
{
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
$q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
|
||||
$q->useResultCache(true);
|
||||
$q->enableResultCache();
|
||||
$this->assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver());
|
||||
}
|
||||
|
||||
@@ -245,7 +245,7 @@ class QueryTest extends OrmTestCase
|
||||
$driverConnectionMock->setStatementMock($stmt);
|
||||
$res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u")
|
||||
->useQueryCache(true)
|
||||
->useResultCache(true, 60)
|
||||
->enableResultCache(60)
|
||||
//let it cache
|
||||
->getResult();
|
||||
|
||||
@@ -255,7 +255,7 @@ class QueryTest extends OrmTestCase
|
||||
|
||||
$res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u")
|
||||
->useQueryCache(true)
|
||||
->useResultCache(false)
|
||||
->disableResultCache()
|
||||
->getResult();
|
||||
$this->assertCount(0, $res);
|
||||
}
|
||||
@@ -278,7 +278,7 @@ class QueryTest extends OrmTestCase
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
|
||||
$query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u")
|
||||
->useResultCache(true);
|
||||
->enableResultCache();
|
||||
|
||||
/** @var DriverConnectionMock $driverConnectionMock */
|
||||
$driverConnectionMock = $this->_em->getConnection()
|
||||
@@ -397,7 +397,7 @@ class QueryTest extends OrmTestCase
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
|
||||
|
||||
$query = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u');
|
||||
$query->useResultCache(true);
|
||||
$query->enableResultCache();
|
||||
$query->setResultCacheProfile();
|
||||
|
||||
self::assertAttributeSame(null, '_queryCacheProfile', $query);
|
||||
@@ -420,4 +420,13 @@ class QueryTest extends OrmTestCase
|
||||
|
||||
self::assertEmpty($query->getResult());
|
||||
}
|
||||
|
||||
/** @group 7982 */
|
||||
public function testNonExistentExecutor()
|
||||
{
|
||||
$this->expectException(QueryException::class);
|
||||
$this->expectExceptionMessage('[Syntax Error] line 0, col -1: Error: Expected SELECT, UPDATE or DELETE, got end of string.');
|
||||
|
||||
$query = $this->_em->createQuery('0')->execute();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,19 @@ namespace Doctrine\Tests\ORM\Tools\Console\Command;
|
||||
use Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand;
|
||||
use Doctrine\ORM\Tools\EntityGenerator;
|
||||
use Doctrine\Tests\OrmTestCase;
|
||||
use Doctrine\Tests\VerifyDeprecations;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ConvertDoctrine1SchemaCommandTest extends OrmTestCase
|
||||
{
|
||||
use VerifyDeprecations;
|
||||
|
||||
/** @after */
|
||||
public function ensureTestGeneratedDeprecationMessages() : void
|
||||
{
|
||||
$this->assertHasDeprecationMessages();
|
||||
}
|
||||
|
||||
public function testExecution()
|
||||
{
|
||||
$entityGenerator = $this->createMock(EntityGenerator::class);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user