From 140dc92e5f4fa30ac23f941a9b9a09986f91790b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Gallego?= Date: Sun, 18 May 2014 12:47:59 +0200 Subject: [PATCH] Enforce Criteria --- .../ORM/Cache/Persister/AbstractEntityPersister.php | 4 ++-- lib/Doctrine/ORM/Persisters/BasicEntityPersister.php | 8 ++------ lib/Doctrine/ORM/Persisters/EntityPersister.php | 6 +++--- lib/Doctrine/ORM/Persisters/OneToManyPersister.php | 5 +++-- tests/Doctrine/Tests/Mocks/EntityPersisterMock.php | 3 ++- .../ORM/Cache/Persister/AbstractEntityPersisterTest.php | 4 ++-- 6 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/Persister/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/AbstractEntityPersister.php index a9c9ed00c..c051a38d0 100644 --- a/lib/Doctrine/ORM/Cache/Persister/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/AbstractEntityPersister.php @@ -191,9 +191,9 @@ abstract class AbstractEntityPersister implements CachedEntityPersister /** * {@inheritdoc} */ - public function exists($entity, $extraConditions = array()) + public function exists($entity, Criteria $extraConditions = null) { - if (empty($extraConditions)) { + if (null === $extraConditions) { $key = new EntityCacheKey($this->class->rootEntityName, $this->class->getIdentifierValues($entity)); if ($this->region->contains($key)) { diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php index 157d0c6fe..4be7ee78e 100644 --- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php @@ -1835,7 +1835,7 @@ class BasicEntityPersister implements EntityPersister /** * {@inheritdoc} */ - public function exists($entity, $extraConditions = array()) + public function exists($entity, Criteria $extraConditions = null) { $criteria = $this->class->getIdentifierValues($entity); @@ -1843,10 +1843,6 @@ class BasicEntityPersister implements EntityPersister return false; } - if (is_array($extraConditions)) { - $criteria = array_merge($criteria, $extraConditions); - } - $alias = $this->getSQLTableAlias($this->class->name); $sql = 'SELECT 1 ' @@ -1855,7 +1851,7 @@ class BasicEntityPersister implements EntityPersister list($params) = $this->expandParameters($criteria); - if ($extraConditions instanceof Criteria) { + if (null !== $extraConditions) { $sql .= ' AND ' . $this->getSelectConditionCriteriaSQL($extraConditions); list($criteriaParams, $values) = $this->expandCriteriaParameters($extraConditions); diff --git a/lib/Doctrine/ORM/Persisters/EntityPersister.php b/lib/Doctrine/ORM/Persisters/EntityPersister.php index a3a33cd26..bc2685852 100644 --- a/lib/Doctrine/ORM/Persisters/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/EntityPersister.php @@ -319,10 +319,10 @@ interface EntityPersister /** * Checks whether the given managed entity exists in the database. * - * @param object $entity - * @param array|Criteria $extraConditions + * @param object $entity + * @param Criteria|null $extraConditions * * @return boolean TRUE if the entity exists in the database, FALSE otherwise. */ - public function exists($entity, $extraConditions = array()); + public function exists($entity, Criteria $extraConditions = null); } diff --git a/lib/Doctrine/ORM/Persisters/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/OneToManyPersister.php index e9edcef52..ef5703a6a 100644 --- a/lib/Doctrine/ORM/Persisters/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/OneToManyPersister.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Persisters; +use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\UnitOfWork; @@ -227,9 +228,9 @@ class OneToManyPersister extends AbstractCollectionPersister // only works with single id identifier entities. Will throw an // exception in Entity Persisters if that is not the case for the // 'mappedBy' field. - $id = current($uow->getEntityIdentifier($coll->getOwner())); + $criteria = new Criteria(Criteria::expr()->eq($mapping['mappedBy'], $coll->getOwner())); - return $persister->exists($element, array($mapping['mappedBy'] => $id)); + return $persister->exists($element, $criteria); } /** diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index 3722da5f5..4df977729 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -1,6 +1,7 @@ existsCalled = true; } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/AbstractEntityPersisterTest.php index 4f81d0680..fcee102b9 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/AbstractEntityPersisterTest.php @@ -433,8 +433,8 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase $this->entityPersister->expects($this->once()) ->method('exists') - ->with($this->equalTo($entity), $this->equalTo(array())); + ->with($this->equalTo($entity), $this->equalTo(null)); - $this->assertNull($persister->exists($entity, array())); + $this->assertNull($persister->exists($entity)); } }