From c363f55ad1eca11ade4becebeda5b260c690a685 Mon Sep 17 00:00:00 2001 From: W0rma Date: Mon, 29 Apr 2024 14:35:45 +0200 Subject: [PATCH 1/2] Fix deprecation layer --- src/ORMException.php | 94 +++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/ORMException.php b/src/ORMException.php index eb5aa6c7b40..898c20ecb0c 100644 --- a/src/ORMException.php +++ b/src/ORMException.php @@ -5,11 +5,31 @@ namespace Doctrine\ORM; use Doctrine\Common\Cache\Cache as CacheDriver; -use Doctrine\Persistence\ObjectRepository; +use Doctrine\ORM\Cache\Exception\InvalidResultCacheDriver; +use Doctrine\ORM\Cache\Exception\MetadataCacheNotConfigured; +use Doctrine\ORM\Cache\Exception\MetadataCacheUsesNonPersistentCache; +use Doctrine\ORM\Cache\Exception\QueryCacheNotConfigured; +use Doctrine\ORM\Cache\Exception\QueryCacheUsesNonPersistentCache; +use Doctrine\ORM\Exception\EntityManagerClosed; +use Doctrine\ORM\Exception\InvalidEntityRepository; +use Doctrine\ORM\Exception\InvalidHydrationMode; +use Doctrine\ORM\Exception\MismatchedEventManager; +use Doctrine\ORM\Exception\MissingIdentifierField; +use Doctrine\ORM\Exception\MissingMappingDriverImplementation; +use Doctrine\ORM\Exception\NamedNativeQueryNotFound; +use Doctrine\ORM\Exception\NamedQueryNotFound; +use Doctrine\ORM\Exception\ProxyClassesAlwaysRegenerating; +use Doctrine\ORM\Exception\UnexpectedAssociationValue; +use Doctrine\ORM\Exception\UnknownEntityNamespace; +use Doctrine\ORM\Exception\UnrecognizedIdentifierFields; +use Doctrine\ORM\Persisters\Exception\CantUseInOperatorOnCompositeKeys; +use Doctrine\ORM\Persisters\Exception\InvalidOrientation; +use Doctrine\ORM\Persisters\Exception\UnrecognizedField; +use Doctrine\ORM\Repository\Exception\InvalidFindByCall; +use Doctrine\ORM\Repository\Exception\InvalidMagicMethodCall; +use Doctrine\ORM\Tools\Exception\NotSupported; use Exception; -use function get_debug_type; -use function implode; use function sprintf; /** @@ -26,8 +46,7 @@ class ORMException extends Exception */ public static function missingMappingDriverImpl() { - return new self("It's a requirement to specify a Metadata Driver and pass it " . - 'to Doctrine\\ORM\\Configuration::setMetadataDriverImpl().'); + return MissingMappingDriverImplementation::create(); } /** @@ -39,11 +58,11 @@ public static function missingMappingDriverImpl() */ public static function namedQueryNotFound($queryName) { - return new self('Could not find a named query by the name "' . $queryName . '"'); + return NamedQueryNotFound::fromName($queryName); } /** - * @deprecated Use Doctrine\ORM\Exception\NamedQueryNotFound + * @deprecated Use Doctrine\ORM\Exception\NamedNativeQueryNotFound * * @param string $nativeQueryName * @@ -51,7 +70,7 @@ public static function namedQueryNotFound($queryName) */ public static function namedNativeQueryNotFound($nativeQueryName) { - return new self('Could not find a named native query by the name "' . $nativeQueryName . '"'); + return NamedNativeQueryNotFound::fromName($nativeQueryName); } /** @@ -63,7 +82,7 @@ public static function namedNativeQueryNotFound($nativeQueryName) */ public static function unrecognizedField($field) { - return new self(sprintf('Unrecognized field: %s', $field)); + return new UnrecognizedField(sprintf('Unrecognized field: %s', $field)); } /** @@ -78,7 +97,7 @@ public static function unrecognizedField($field) */ public static function unexpectedAssociationValue($class, $association, $given, $expected) { - return new self(sprintf('Found entity of type %s on association %s#%s, but expecting %s', $given, $class, $association, $expected)); + return UnexpectedAssociationValue::create($class, $association, $given, $expected); } /** @@ -91,7 +110,7 @@ public static function unexpectedAssociationValue($class, $association, $given, */ public static function invalidOrientation($className, $field) { - return new self('Invalid order by orientation specified for ' . $className . '#' . $field); + return InvalidOrientation::fromClassNameAndField($className, $field); } /** @@ -101,7 +120,7 @@ public static function invalidOrientation($className, $field) */ public static function entityManagerClosed() { - return new self('The EntityManager is closed.'); + return EntityManagerClosed::create(); } /** @@ -113,7 +132,7 @@ public static function entityManagerClosed() */ public static function invalidHydrationMode($mode) { - return new self(sprintf("'%s' is an invalid hydration mode.", $mode)); + return InvalidHydrationMode::fromMode($mode); } /** @@ -123,7 +142,7 @@ public static function invalidHydrationMode($mode) */ public static function mismatchedEventManager() { - return new self('Cannot use different EventManager instances for EntityManager and Connection.'); + return MismatchedEventManager::create(); } /** @@ -135,11 +154,11 @@ public static function mismatchedEventManager() */ public static function findByRequiresParameter($methodName) { - return new self("You need to pass a parameter to '" . $methodName . "'"); + return InvalidMagicMethodCall::onMissingParameter($methodName); } /** - * @deprecated Doctrine\ORM\Repository\Exception\InvalidFindByCall + * @deprecated Doctrine\ORM\Repository\Exception\InvalidMagicMethodCall::becauseFieldNotFoundIn() * * @param string $entityName * @param string $fieldName @@ -149,10 +168,7 @@ public static function findByRequiresParameter($methodName) */ public static function invalidMagicCall($entityName, $fieldName, $method) { - return new self( - "Entity '" . $entityName . "' has no field '" . $fieldName . "'. " . - "You can therefore not call '" . $method . "' on the entities' repository" - ); + return InvalidMagicMethodCall::becauseFieldNotFoundIn($entityName, $fieldName, $method); } /** @@ -165,10 +181,7 @@ public static function invalidMagicCall($entityName, $fieldName, $method) */ public static function invalidFindByInverseAssociation($entityName, $associationFieldName) { - return new self( - "You cannot search for the association field '" . $entityName . '#' . $associationFieldName . "', " . - 'because it is the inverse side of an association. Find methods only work on owning side associations.' - ); + return InvalidFindByCall::fromInverseSideUsage($entityName, $associationFieldName); } /** @@ -178,7 +191,7 @@ public static function invalidFindByInverseAssociation($entityName, $association */ public static function invalidResultCacheDriver() { - return new self('Invalid result cache driver; it must implement Doctrine\\Common\\Cache\\Cache.'); + return InvalidResultCacheDriver::create(); } /** @@ -188,7 +201,7 @@ public static function invalidResultCacheDriver() */ public static function notSupported() { - return new self('This behaviour is (currently) not supported by Doctrine 2'); + return NotSupported::create(); } /** @@ -198,7 +211,7 @@ public static function notSupported() */ public static function queryCacheNotConfigured() { - return new self('Query Cache is not configured.'); + return QueryCacheNotConfigured::create(); } /** @@ -208,7 +221,7 @@ public static function queryCacheNotConfigured() */ public static function metadataCacheNotConfigured() { - return new self('Class Metadata Cache is not configured.'); + return MetadataCacheNotConfigured::create(); } /** @@ -218,7 +231,7 @@ public static function metadataCacheNotConfigured() */ public static function queryCacheUsesNonPersistentCache(CacheDriver $cache) { - return new self('Query Cache uses a non-persistent cache driver, ' . get_debug_type($cache) . '.'); + return QueryCacheUsesNonPersistentCache::fromDriver($cache); } /** @@ -228,7 +241,7 @@ public static function queryCacheUsesNonPersistentCache(CacheDriver $cache) */ public static function metadataCacheUsesNonPersistentCache(CacheDriver $cache) { - return new self('Metadata Cache uses a non-persistent cache driver, ' . get_debug_type($cache) . '.'); + return MetadataCacheUsesNonPersistentCache::fromDriver($cache); } /** @@ -238,7 +251,7 @@ public static function metadataCacheUsesNonPersistentCache(CacheDriver $cache) */ public static function proxyClassesAlwaysRegenerating() { - return new self('Proxy Classes are always regenerating.'); + return ProxyClassesAlwaysRegenerating::create(); } /** @@ -250,9 +263,7 @@ public static function proxyClassesAlwaysRegenerating() */ public static function unknownEntityNamespace($entityNamespaceAlias) { - return new self( - sprintf("Unknown Entity namespace alias '%s'.", $entityNamespaceAlias) - ); + return UnknownEntityNamespace::fromNamespaceAlias($entityNamespaceAlias); } /** @@ -264,11 +275,7 @@ public static function unknownEntityNamespace($entityNamespaceAlias) */ public static function invalidEntityRepository($className) { - return new self(sprintf( - "Invalid repository class '%s'. It must be a %s.", - $className, - ObjectRepository::class - )); + return InvalidEntityRepository::fromClassName($className); } /** @@ -281,7 +288,7 @@ public static function invalidEntityRepository($className) */ public static function missingIdentifierField($className, $fieldName) { - return new self(sprintf('The identifier %s is missing for a query of %s', $fieldName, $className)); + return MissingIdentifierField::fromFieldAndClass($fieldName, $className); } /** @@ -294,10 +301,7 @@ public static function missingIdentifierField($className, $fieldName) */ public static function unrecognizedIdentifierFields($className, $fieldNames) { - return new self( - "Unrecognized identifier fields: '" . implode("', '", $fieldNames) . "' " . - "are not present on class '" . $className . "'." - ); + return UnrecognizedIdentifierFields::fromClassAndFieldNames($className, $fieldNames); } /** @@ -307,6 +311,6 @@ public static function unrecognizedIdentifierFields($className, $fieldNames) */ public static function cantUseInOperatorOnCompositeKeys() { - return new self("Can't use IN operator on entities that have composite keys."); + return CantUseInOperatorOnCompositeKeys::create(); } } From ad5c8e4bdc93e422a284c1cdc0bf6fa6d8f4d7b3 Mon Sep 17 00:00:00 2001 From: W0rma Date: Mon, 29 Apr 2024 14:52:02 +0200 Subject: [PATCH 2/2] Make test compatible with PHP 7.1 --- .../Tests/ORM/Functional/Ticket/GH6123Test.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/Tests/ORM/Functional/Ticket/GH6123Test.php b/tests/Tests/ORM/Functional/Ticket/GH6123Test.php index 7a5f14980f0..05a1a765f27 100644 --- a/tests/Tests/ORM/Functional/Ticket/GH6123Test.php +++ b/tests/Tests/ORM/Functional/Ticket/GH6123Test.php @@ -6,7 +6,6 @@ use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; -use Doctrine\ORM\Mapping\Column; use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\OrmFunctionalTestCase; @@ -17,7 +16,7 @@ protected function setUp(): void parent::setUp(); $this->createSchemaForModels( - GH6123Entity::class, + GH6123Entity::class ); } @@ -58,7 +57,7 @@ public function testRemovedEntityCanBePersistedAgain(): void $this->_em->flush(); } - private function loadEntityFromDatabase(int $id): GH6123Entity|null + private function loadEntityFromDatabase(int $id): ?GH6123Entity { return $this->_em->createQueryBuilder() ->select('e') @@ -70,11 +69,20 @@ private function loadEntityFromDatabase(int $id): GH6123Entity|null } } +/** + * @ORM\Entity + */ #[ORM\Entity] class GH6123Entity { + /** + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + * @var int + */ #[ORM\Id] #[ORM\GeneratedValue] - #[Column(type: Types::INTEGER, nullable: false)] - public int $id; + #[ORM\Column(type: Types::INTEGER)] + public $id; }